diff --git a/global_variables.gd b/global_variables.gd index d552e2d..5fb4c11 100644 --- a/global_variables.gd +++ b/global_variables.gd @@ -1,5 +1,7 @@ extends Node +enum Tools { MINE, BUILD, PICKUP, DRAG } + var server_config: Dictionary = {} var server_player_save_data_file_name: String = "user://server_player_data.dat" var player_save_data: Dictionary = {} diff --git a/player/player.tscn b/player/player.tscn index 35bcfef..63a4765 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -37,7 +37,7 @@ properties/4/replication_mode = 1 properties/5/path = NodePath("Interaction Controller:mouse_position") properties/5/spawn = true properties/5/replication_mode = 2 -properties/6/path = NodePath("Interaction Controller:is_mining") +properties/6/path = NodePath("Interaction Controller:left_hand_tool_is_active") properties/6/spawn = true properties/6/replication_mode = 2 properties/7/path = NodePath("Interaction Controller:mining_distance") @@ -46,6 +46,9 @@ properties/7/replication_mode = 2 properties/8/path = NodePath("Interaction Controller:flipped") properties/8/spawn = true properties/8/replication_mode = 2 +properties/9/path = NodePath("Interaction Controller:left_hand_tool") +properties/9/spawn = true +properties/9/replication_mode = 2 [sub_resource type="Curve" id="Curve_tmffk"] _data = [Vector2(0.455729, 0.856713), 0.0, 0.0, 0, 0, Vector2(0.669271, 0.0490983), 0.0, 0.0, 0, 0] @@ -90,7 +93,7 @@ turbulence_enabled = true [sub_resource type="RectangleShape2D" id="RectangleShape2D_6r2ad"] size = Vector2(75, 86) -[node name="Player" type="RigidBody2D" node_paths=PackedStringArray("camera", "interaction_controller", "inventory_manager", "player_canvas") groups=["players"]] +[node name="Player" type="RigidBody2D" node_paths=PackedStringArray("camera") groups=["players"]] collision_layer = 2 collision_mask = 11 mass = 200.0 @@ -99,16 +102,16 @@ can_sleep = false lock_rotation = true freeze_mode = 1 continuous_cd = 1 -max_contacts_reported = 5 contact_monitor = true +max_contacts_reported = 5 linear_damp = 0.1 angular_damp = 0.5 script = ExtResource("1_ntq5g") +player = null player_spawn_point = Vector2(0, 0) +synced_position = null +synced_rotation = null camera = NodePath("Camera2D") -interaction_controller = NodePath("Interaction Controller") -inventory_manager = NodePath("Inventory Manager") -player_canvas = NodePath("CanvasLayer") metadata/_edit_horizontal_guides_ = [-66.0, -74.0] [node name="PlayerSynchronizer" type="MultiplayerSynchronizer" parent="."] @@ -131,12 +134,12 @@ antenna = NodePath("../Flip Point/Antenna") [node name="Inventory Manager" type="Node2D" parent="." node_paths=PackedStringArray("stone_bar", "red_ore_bar")] script = ExtResource("5_xpvfg") -stone_bar = NodePath("../CanvasLayer/Control/Stone") -red_ore_bar = NodePath("../CanvasLayer/Control/Red ore") +stone_bar = NodePath("../Player Canvas/Control/Stone") +red_ore_bar = NodePath("../Player Canvas/Control/Red ore") -[node name="CanvasLayer" type="CanvasLayer" parent="."] +[node name="Player Canvas" type="CanvasLayer" parent="."] -[node name="Control" type="Control" parent="CanvasLayer"] +[node name="Control" type="Control" parent="Player Canvas"] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -146,7 +149,7 @@ grow_vertical = 2 size_flags_horizontal = 0 size_flags_vertical = 4 -[node name="Prompt" type="Label" parent="CanvasLayer/Control"] +[node name="Prompt" type="Label" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 5 anchor_left = 0.5 @@ -155,10 +158,9 @@ offset_left = -20.0 offset_right = 20.0 offset_bottom = 23.0 grow_horizontal = 2 -text = "Prompts" script = ExtResource("4_8hopg") -[node name="Label" type="Label" parent="CanvasLayer/Control"] +[node name="Label" type="Label" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -170,7 +172,7 @@ grow_horizontal = 0 scale = Vector2(2, 2) text = "Resources" -[node name="Red Ore Background" type="Control" parent="CanvasLayer/Control"] +[node name="Red Ore Background" type="Control" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -182,14 +184,14 @@ offset_bottom = 214.0 grow_horizontal = 0 scale = Vector2(2, 10) -[node name="ColorRect" type="ColorRect" parent="CanvasLayer/Control/Red Ore Background"] +[node name="ColorRect" type="ColorRect" parent="Player Canvas/Control/Red Ore Background"] layout_mode = 0 offset_left = -5.0 offset_top = -10.0 offset_right = 5.0 color = Color(0.752941, 0.752941, 0.752941, 1) -[node name="Red ore" type="Control" parent="CanvasLayer/Control"] +[node name="Red ore" type="Control" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -201,14 +203,14 @@ offset_bottom = 214.0 grow_horizontal = 0 scale = Vector2(2, 10) -[node name="ColorRect" type="ColorRect" parent="CanvasLayer/Control/Red ore"] +[node name="ColorRect" type="ColorRect" parent="Player Canvas/Control/Red ore"] layout_mode = 0 offset_left = -5.0 offset_top = -10.0 offset_right = 5.0 color = Color(0.478431, 0.196078, 0.196078, 1) -[node name="Stone background" type="Control" parent="CanvasLayer/Control"] +[node name="Stone background" type="Control" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -220,14 +222,14 @@ offset_bottom = 214.0 grow_horizontal = 0 scale = Vector2(2, 10) -[node name="ColorRect" type="ColorRect" parent="CanvasLayer/Control/Stone background"] +[node name="ColorRect" type="ColorRect" parent="Player Canvas/Control/Stone background"] layout_mode = 0 offset_left = -5.0 offset_top = -10.0 offset_right = 5.0 color = Color(0.752941, 0.752941, 0.752941, 1) -[node name="Stone" type="Control" parent="CanvasLayer/Control"] +[node name="Stone" type="Control" parent="Player Canvas/Control"] layout_mode = 1 anchors_preset = 1 anchor_left = 1.0 @@ -239,37 +241,34 @@ offset_bottom = 214.0 grow_horizontal = 0 scale = Vector2(2, 10) -[node name="ColorRect" type="ColorRect" parent="CanvasLayer/Control/Stone"] +[node name="ColorRect" type="ColorRect" parent="Player Canvas/Control/Stone"] layout_mode = 0 offset_left = -5.0 offset_top = -10.0 offset_right = 5.0 color = Color(0.431373, 0.431373, 0.431373, 1) -[node name="Tools" type="Control" parent="CanvasLayer"] +[node name="Tools" type="Control" parent="Player Canvas"] layout_mode = 3 anchors_preset = 0 offset_right = 40.0 offset_bottom = 40.0 -[node name="Title" type="Label" parent="CanvasLayer/Tools"] +[node name="Title" type="Label" parent="Player Canvas/Tools"] layout_mode = 0 offset_right = 40.0 offset_bottom = 23.0 text = "Tools " -[node name="Current" type="Label" parent="CanvasLayer/Tools"] +[node name="Current" type="Label" parent="Player Canvas/Tools"] layout_mode = 0 offset_left = -1.0 offset_top = 27.0 offset_right = 135.0 offset_bottom = 76.0 -text = "Left: Mine -Right: Place Block -" -[node name="Options" type="Label" parent="CanvasLayer/Tools"] +[node name="Options" type="Label" parent="Player Canvas/Tools"] layout_mode = 0 offset_top = 88.0 offset_right = 77.0 diff --git a/player/player_controller.gd b/player/player_controller.gd index 55cff02..bd79b2f 100644 --- a/player/player_controller.gd +++ b/player/player_controller.gd @@ -11,9 +11,6 @@ extends RigidBody2D synced_rotation = new_value update_synced_rotation = !player == multiplayer.get_unique_id() @export var camera: Node -@export var interaction_controller: Node2D -@export var inventory_manager: Node2D -@export var player_canvas: CanvasLayer var update_synced_position: bool = false var update_synced_rotation: bool = false @@ -36,8 +33,17 @@ func _ready() -> void: space, PhysicsServer2D.SPACE_PARAM_CONTACT_MAX_ALLOWED_PENETRATION, 0.0 ) - interaction_controller.initialize(player == multiplayer.get_unique_id()) - inventory_manager.initialize(player == multiplayer.get_unique_id()) + Helpers.log_print( + str( + "player_controller ready_: player == multiplayer.get_unique_id(): ", + player == multiplayer.get_unique_id() + ) + ) + $"Interaction Controller".initialize(player == multiplayer.get_unique_id()) + $"Inventory Manager".initialize(player == multiplayer.get_unique_id()) + $"Player Canvas/Control/Prompt".initialize( + player == multiplayer.get_unique_id() + ) set_process(player == multiplayer.get_unique_id()) set_physics_process(player == multiplayer.get_unique_id()) @@ -49,7 +55,7 @@ func _ready() -> void: camera.queue_free() gravity_scale = 0.0 - player_canvas.visible = !Globals.is_server + $"Player Canvas".visible = !Globals.is_server ## Remotely force the player to a given position @@ -66,11 +72,17 @@ func _physics_process(delta: float) -> void: if ( ( abs(position.x) - > Globals.world_map.max_radius_in_tiles * Globals.world_map.single_tile_width + > ( + Globals.world_map.max_radius_in_tiles + * Globals.world_map.single_tile_width + ) ) or ( abs(position.y) - > Globals.world_map.max_radius_in_tiles * Globals.world_map.single_tile_width + > ( + Globals.world_map.max_radius_in_tiles + * Globals.world_map.single_tile_width + ) ) ): Network.reset_connection() @@ -87,10 +99,14 @@ func _physics_process(delta: float) -> void: var damp: float = 5000.0 var dampening: float = velocity.x if velocity.x < 0.0: - dampening = velocity.x - (damp * delta) * (velocity.x / abs(velocity.x)) + dampening = ( + velocity.x - (damp * delta) * (velocity.x / abs(velocity.x)) + ) dampening = clamp(dampening, velocity.x, 0.0) elif velocity.x > 0: - dampening = velocity.x - (damp * delta) * (velocity.x / abs(velocity.x)) + dampening = ( + velocity.x - (damp * delta) * (velocity.x / abs(velocity.x)) + ) dampening = clamp(dampening, 0.0, velocity.x) velocity = Vector2(dampening, velocity.y) @@ -124,7 +140,9 @@ func _integrate_forces(state: PhysicsDirectBodyState2D) -> void: if update_synced_position and update_synced_rotation: state.transform = Transform2D(synced_rotation, synced_position) elif update_synced_position: - state.transform = Transform2D(state.transform.get_rotation(), synced_position) + state.transform = Transform2D( + state.transform.get_rotation(), synced_position + ) elif update_synced_rotation: state.transform = Transform2D(synced_rotation, state.origin) update_synced_position = false @@ -134,13 +152,15 @@ func _integrate_forces(state: PhysicsDirectBodyState2D) -> void: @rpc("any_peer", "call_remote", "reliable") func add_inventory_data(data: Dictionary) -> void: if player == multiplayer.get_unique_id(): - inventory_manager.add_data(data) + $"Inventory Manager".add_data(data) func spawn_item() -> void: var rng: RandomNumberGenerator = RandomNumberGenerator.new() var id: int = rng.randi() - var thing_name_to_spawn: String = str(player_spawnable_items[player_spawn_item_next], "-", id) + var thing_name_to_spawn: String = str( + player_spawnable_items[player_spawn_item_next], "-", id + ) $"Interaction Controller".spawn_player_controlled_thing.rpc( Vector2.ZERO, 0, thing_name_to_spawn, "Placing" ) diff --git a/player/player_interaction_controller.gd b/player/player_interaction_controller.gd index ee08acb..b80148c 100644 --- a/player/player_interaction_controller.gd +++ b/player/player_interaction_controller.gd @@ -4,7 +4,7 @@ const INTERACT_RANGE: float = 200.0 @export var debug_object: Resource = preload("res://player/debug_object.tscn") @export var mining_particles: GPUParticles2D -@export var is_mining: bool = false +@export var left_hand_tool_is_active: bool = false @export var mining_distance: float = 0.0: set(new_value): mining_distance = new_value @@ -17,25 +17,29 @@ const INTERACT_RANGE: float = 200.0 @export var legs_manager: Node2D @export var antenna: Node2D @export var mouse_position: Vector2 +@export var left_hand_tool: Globals.Tools = Globals.Tools.MINE +@export var right_hand_tool: Globals.Tools = Globals.Tools.BUILD var is_local: bool = false var max_hand_distance: float = 25.0 var mouse_left_down: bool var mine_cast: RayCast2D -var mining_speed: float = 0.1 -var current_mining_time: float = 100 +var tool_speed: float = 0.1 +var current_tool_raycast_time: float = 100 var ball: Resource = preload("res://items/disc/disc.tscn") var box: Resource = preload("res://items/square/square.tscn") -var soup_machine: Resource = preload("res://items/soup_machine/soup_machine.tscn") +var soup_machine: Resource = preload( + "res://items/soup_machine/soup_machine.tscn" +) var controlled_item: RigidBody2D var controlled_item_type: String = "Held" var controlled_item_clear_of_collisions: bool = false -var left_hand_tool: String = "Mine" -var right_hand_tool: String = "Place" func update_mining_particle_length() -> void: - var extents: Vector3 = mining_particles.process_material.get("emission_box_extents") + var extents: Vector3 = mining_particles.process_material.get( + "emission_box_extents" + ) extents.x = mining_distance mining_particles.process_material.set("emission_box_extents", extents) @@ -53,6 +57,8 @@ func initialize(local: bool) -> void: set_process_unhandled_key_input(is_local) set_physics_process(is_local) set_physics_process_internal(is_local) + if is_local: + owner.get_node("Player Canvas/Tools/Current").text = "Left: Mine\nRight: Place Block" func _process(delta: float) -> void: @@ -65,10 +71,10 @@ func _process(delta: float) -> void: else: flip_point.scale.x = 1 - current_mining_time += delta + current_tool_raycast_time += delta if mouse_left_down: - mine_raycast() - is_mining = mouse_left_down + tool_raycast() + left_hand_tool_is_active = mouse_left_down else: if flipped: @@ -79,32 +85,44 @@ func _process(delta: float) -> void: legs_manager.flipped = flipped antenna.flipped = flipped - if is_mining: + if left_hand_tool_is_active and left_hand_tool == Globals.Tools.MINE: mining_particles.look_at(mouse_position) arm_id_controller.target = mouse_position head.look_at(mouse_position) - mining_particles.emitting = is_mining + mining_particles.emitting = ( + left_hand_tool_is_active and left_hand_tool == Globals.Tools.MINE + ) if controlled_item: # Held items drop when you release the mouse button. # Placed items are placed when you click the left mouse button. if controlled_item_type == "Held": - if is_mining: + if left_hand_tool_is_active: controlled_item.set_position(to_local(mouse_position)) - pass - elif is_multiplayer_authority(): var held_item_name: String = controlled_item.name - var held_item_global_position: Vector2 = controlled_item.global_position - Spawner.place_thing.rpc_id(1, held_item_name, held_item_global_position) + var held_item_global_position: Vector2 = ( + controlled_item.global_position + ) + Spawner.place_thing.rpc_id( + 1, held_item_name, held_item_global_position + ) _drop_held_thing.rpc() elif controlled_item_type == "Placing": - if is_mining and is_multiplayer_authority() and controlled_item_clear_of_collisions: + if ( + left_hand_tool_is_active + and is_multiplayer_authority() + and controlled_item_clear_of_collisions + ): Globals.player_has_done.built_an_item = true var held_item_name: String = controlled_item.name - var held_item_global_position: Vector2 = controlled_item.global_position - Spawner.place_thing.rpc_id(1, held_item_name, held_item_global_position) + var held_item_global_position: Vector2 = ( + controlled_item.global_position + ) + Spawner.place_thing.rpc_id( + 1, held_item_name, held_item_global_position + ) _drop_held_thing.rpc() Globals.world_map.delete_drawing_canvas(held_item_name) else: @@ -119,7 +137,9 @@ func _process(delta: float) -> void: controlled_item.name ) ) - controlled_item_clear_of_collisions = intersecting_tiles.all_tiles_are_empty + controlled_item_clear_of_collisions = ( + intersecting_tiles.all_tiles_are_empty + ) #Re-add when arms sometimes need to target other locations @@ -128,7 +148,11 @@ func _process(delta: float) -> void: @rpc("call_local") func _drop_held_thing() -> void: Helpers.log_print( - str(controlled_item.name, " dropped by ", multiplayer.get_remote_sender_id()), + str( + controlled_item.name, + " dropped by ", + multiplayer.get_remote_sender_id() + ), "Cornflowerblue" ) if controlled_item: @@ -147,23 +171,23 @@ func de_spawn_placing_item() -> void: func _input(event: InputEvent) -> void: - var previous_left_hand_tool: String = left_hand_tool + var previous_left_hand_tool: Globals.Tools = left_hand_tool if event.is_action_released(&"build"): - left_hand_tool = "Build" - owner.get_node("CanvasLayer/Tools/Current").text = "Left: Build\nRight: Place Block" + left_hand_tool = Globals.Tools.BUILD + owner.get_node("Player Canvas/Tools/Current").text = "Left: Build\nRight: Place Block" Globals.player_has_done.press_build_button = true owner.spawn_item() elif event.is_action_released(&"mine"): - owner.get_node("CanvasLayer/Tools/Current").text = "Left: Mine\nRight: Place Block" - if left_hand_tool != "Mine": + owner.get_node("Player Canvas/Tools/Current").text = "Left: Mine\nRight: Place Block" + if left_hand_tool != Globals.Tools.MINE: Globals.player_has_done.returned_to_mining_mode = true - left_hand_tool = "Mine" + left_hand_tool = Globals.Tools.MINE elif event.is_action_released(&"pickup"): - owner.get_node("CanvasLayer/Tools/Current").text = "Left: Pick Up\nRight: Place Block" - left_hand_tool = "Pickup" + owner.get_node("Player Canvas/Tools/Current").text = "Left: Pick Up\nRight: Place Block" + left_hand_tool = Globals.Tools.PICKUP elif event.is_action_released(&"drag"): - owner.get_node("CanvasLayer/Tools/Current").text = "Left: Drag\nRight: Place Block" - left_hand_tool = "Drag" + owner.get_node("Player Canvas/Tools/Current").text = "Left: Drag\nRight: Place Block" + left_hand_tool = Globals.Tools.DRAG if event is InputEventMouseButton: if event.button_index == 1 and event.is_pressed(): mouse_left_down = true @@ -172,12 +196,15 @@ func _input(event: InputEvent) -> void: elif event.button_index == 2 and event.is_pressed(): right_mouse_clicked() - if left_hand_tool == "Build": + if left_hand_tool == Globals.Tools.BUILD: Globals.player_has_done.scroll_crafting_items = true if event.button_index == 4 and event.pressed: # Scroll Up owner.player_spawn_item_next += 1 - if owner.player_spawn_item_next > owner.player_spawnable_items.size() - 1: + if ( + owner.player_spawn_item_next + > owner.player_spawnable_items.size() - 1 + ): owner.player_spawn_item_next = 0 de_spawn_placing_item.rpc() owner.spawn_item() @@ -185,23 +212,29 @@ func _input(event: InputEvent) -> void: # Scroll Down owner.player_spawn_item_next -= 1 if owner.player_spawn_item_next < 0: - owner.player_spawn_item_next = owner.player_spawnable_items.size() - 1 + owner.player_spawn_item_next = ( + owner.player_spawnable_items.size() - 1 + ) de_spawn_placing_item.rpc() owner.spawn_item() if previous_left_hand_tool != left_hand_tool: # Tool changed - if previous_left_hand_tool == "Build": + if previous_left_hand_tool == Globals.Tools.BUILD: de_spawn_placing_item.rpc() -func mine_raycast() -> void: - if current_mining_time > mining_speed: - current_mining_time = 0.0 - var space_state: PhysicsDirectSpaceState2D = get_world_2d().direct_space_state +func tool_raycast() -> void: + if current_tool_raycast_time > tool_speed: + current_tool_raycast_time = 0.0 + var space_state: PhysicsDirectSpaceState2D = ( + get_world_2d().direct_space_state + ) var arm_position: Vector2 = arm_id_controller.global_position var mining_particle_distance: float = ( clamp( - clamp(arm_position.distance_to(mouse_position), 0, INTERACT_RANGE), + clamp( + arm_position.distance_to(mouse_position), 0, INTERACT_RANGE + ), 0.0, mining_particles.global_position.distance_to(mouse_position) ) @@ -211,29 +244,46 @@ func mine_raycast() -> void: arm_position + ( (mouse_position - arm_position).normalized() - * clamp(arm_position.distance_to(mouse_position), 0, INTERACT_RANGE) + * clamp( + arm_position.distance_to(mouse_position), 0, INTERACT_RANGE + ) ) ) - var query: PhysicsRayQueryParameters2D = PhysicsRayQueryParameters2D.create( - arm_position, target_position + var query: PhysicsRayQueryParameters2D = ( + PhysicsRayQueryParameters2D.create(arm_position, target_position) ) - Globals.world_map.draw_temp_line_on_map(arm_position, target_position, Color.RED) # For visualizing to debug + if left_hand_tool == Globals.Tools.MINE: + # LASER DRILL!!! ==>----- + Globals.world_map.draw_temp_line_on_map( + arm_position, target_position, Color.RED + ) query.exclude = [self] var result: Dictionary = space_state.intersect_ray(query) if result.size() > 0: var hit_point: Vector2 = result["position"] - if result["collider"] is TileMap and not controlled_item: # Do not mine while holding items - Globals.world_map.mine_cell_at_position(hit_point - result["normal"]) - elif ( - not controlled_item - and result["collider"] is RigidBody2D - and is_multiplayer_authority() - ): - var body: Node = result["collider"] - if body.has_method("grab"): - body.grab.rpc_id(1) - mining_particle_distance = mining_particles.global_position.distance_to(hit_point) / 2.0 + # Here is the logic for "what to do with a raycast, depending on what "tool" is in your hand. + # I think this logic could be improved a lot, but there is no "simple" way to both make the player + # experience good and make this logic easy to read. + # So just document it well and reorganize it later if it becomes more clear how to better organize it + # without also duplicating a lot of code. + if left_hand_tool == Globals.Tools.MINE: + if result["collider"] is TileMap and not controlled_item: # Do not mine while holding items, no matter what + Globals.world_map.mine_cell_at_position( + hit_point - result["normal"] + ) + elif left_hand_tool == Globals.Tools.PICKUP: + if not controlled_item and result["collider"] is RigidBody2D: # You are ALREADY holding an item, you cannot hold two items. # You can currently only pick up RigidBodies. + var body: Node = result["collider"] + if body.has_method("grab"): # The RigidBody must have a "grab" method to be able to be picked up. + body.grab.rpc_id(1) + + # This is always set, even if we don't use it. + mining_particle_distance = ( + mining_particles.global_position.distance_to(hit_point) / 2.0 + ) + + ## This is a synced variable used by other players to see your mining activity. mining_distance = mining_particle_distance @@ -255,12 +305,22 @@ func spawn_player_controlled_thing( # We can never control a new thing if we are already controlling something # Whoever called this should have called de_spawn_placing_item() first if they were serious return - var parsed_thing_name: Dictionary = Helpers.parse_thing_name(controlled_item_name) + var parsed_thing_name: Dictionary = Helpers.parse_thing_name( + controlled_item_name + ) var action: String = "picked up" if spawned_item_type == "Placing": action = "being placed" Helpers.log_print( - str(parsed_thing_name.name, " ", parsed_thing_name.id, " ", action, " by ", name), + str( + parsed_thing_name.name, + " ", + parsed_thing_name.id, + " ", + action, + " by ", + name + ), "Cornflowerblue" ) # Spawn a local version for myself @@ -274,7 +334,8 @@ func spawn_player_controlled_thing( controlled_item = soup_machine.instantiate() _: printerr( - "Invalid thing to spawn name into player held position: ", parsed_thing_name.name + "Invalid thing to spawn name into player held position: ", + parsed_thing_name.name ) return controlled_item_type = spawned_item_type diff --git a/player/prompts.gd b/player/prompts.gd index 0ef3fee..089e87b 100644 --- a/player/prompts.gd +++ b/player/prompts.gd @@ -2,13 +2,9 @@ extends Label var time_elapsed: float = 0 var delay_time: float = 3 +var is_local: bool = false -func _ready() -> void: - text = "Welcome!" - - -# Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: time_elapsed += delta if time_elapsed > delay_time: @@ -18,29 +14,44 @@ func _process(delta: float) -> void: delay_time = 1 elif ( not Globals.player_has_done.has("mine_a_block") - and owner.get_node("Interaction Controller").left_hand_tool == "Mine" + and ( + owner.get_node("Interaction Controller").left_hand_tool + == Globals.Tools.MINE + ) ): text = "Left click to mine a block." elif ( not Globals.player_has_done.has("place_a_block") - and owner.get_node("Interaction Controller").right_hand_tool == "Place" + and ( + owner.get_node("Interaction Controller").right_hand_tool + == Globals.Tools.BUILD + ) ): text = "Right click to place a block." elif not Globals.player_has_done.has("press_build_button"): text = "Press 'b' to enter Build mode." elif ( not Globals.player_has_done.has("scroll_crafting_items") - and owner.get_node("Interaction Controller").left_hand_tool == "Build" + and ( + owner.get_node("Interaction Controller").left_hand_tool + == Globals.Tools.BUILD + ) ): text = "Use mouse wheel to select item to build." elif ( not Globals.player_has_done.has("built_an_item") - and owner.get_node("Interaction Controller").left_hand_tool == "Build" + and ( + owner.get_node("Interaction Controller").left_hand_tool + == Globals.Tools.BUILD + ) ): # and in build mode text = "Left click to place an item." elif ( not Globals.player_has_done.has("returned_to_mining_mode") - and owner.get_node("Interaction Controller").left_hand_tool != "Mine" + and ( + owner.get_node("Interaction Controller").left_hand_tool + != Globals.Tools.MINE + ) ): # TODO: Something is broken, it mines, but the tool is still Build. # TODO: Should it "auto return" to mine or just stay in build with a new item? @@ -49,3 +60,10 @@ func _process(delta: float) -> void: text = "Press 'v' to return to mining mode." else: text = "" + + +func initialize(local: bool) -> void: + is_local = local + set_process(is_local) + if is_local: + text = "Welcome!"