diff --git a/project/project.godot b/project/project.godot index 9da00e4..f30e0eb 100644 --- a/project/project.godot +++ b/project/project.godot @@ -81,6 +81,11 @@ force_game_tick={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null) ] } +force_game_tick_fast={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":103,"location":0,"echo":false,"script":null) +] +} key_4={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null) diff --git a/project/scripts/global/GameManager.gd b/project/scripts/global/GameManager.gd index e58ec24..39fc9b2 100644 --- a/project/scripts/global/GameManager.gd +++ b/project/scripts/global/GameManager.gd @@ -40,6 +40,8 @@ func _process(delta: float) -> void: world.camp_manager.campfire_extinguish() if Input.is_action_just_pressed("force_game_tick"): _on_game_tick_timeout() + if Input.is_action_pressed("force_game_tick_fast"): + _on_game_tick_timeout() if Input.is_action_just_pressed("key_6"): toggle_temperature_layer() @@ -52,12 +54,17 @@ func player_health_depleted(): func _on_game_tick_timeout() -> void: var timer_on_game_tick_timeout: PerformanceTimer = PerformanceTimer.new() timer_on_game_tick_timeout.display_name = "game tick duration" + tilemap_navigation.game_tick_start() - world.step_visualizer.game_tick_start() + world.game_tick_start() + player.game_tick() + tilemap_navigation.game_tick_end() - world.step_visualizer.game_tick_end() + world.game_tick_end() + update_bars() + timer_on_game_tick_timeout.stop() diff --git a/project/scripts/player/PlayerManager.gd b/project/scripts/player/PlayerManager.gd index abaeb53..33928fa 100644 --- a/project/scripts/player/PlayerManager.gd +++ b/project/scripts/player/PlayerManager.gd @@ -91,13 +91,17 @@ func pick_up_item(tilemap_pos: Vector2i) -> void: var pick_up_item_type: Vector2i = game_manager.world.tilemap_interactive.tilemap.get_cell_atlas_coords(tilemap_pos) # check if tile will transform into another tile upon pickup + var tile_drop_item: Vector2i = inventory_slot + if tile_drop_item == tilemap_types.OBJECT_I_FILLED_BUSH: + tile_drop_item = tilemap_types.OBJECT_I_BERRY + elif tile_drop_item == tilemap_types.OBJECT_I_TREE_FULL: + tile_drop_item = tilemap_types.OBJECT_I_STICK + var tile_after_pickup_transform = null - var tile_drop_item: Vector2i = inventory_slot if pick_up_item_type == tilemap_types.OBJECT_I_FILLED_BUSH: tile_after_pickup_transform = tilemap_types.OBJECT_I_EMPTY_BUSH pick_up_item_type = tilemap_types.OBJECT_I_BERRY - tile_drop_item = tilemap_types.OBJECT_I_BERRY - if pick_up_item_type == tilemap_types.OBJECT_I_TREE_FULL: + elif pick_up_item_type == tilemap_types.OBJECT_I_TREE_FULL: tile_after_pickup_transform = tilemap_types.OBJECT_I_TREE_CUT pick_up_item_type = tilemap_types.OBJECT_I_STICK tile_drop_item = tilemap_types.OBJECT_I_STICK diff --git a/project/scripts/tilemap/TilemapNavigation.gd b/project/scripts/tilemap/TilemapNavigation.gd index 37b5332..e6e5eec 100644 --- a/project/scripts/tilemap/TilemapNavigation.gd +++ b/project/scripts/tilemap/TilemapNavigation.gd @@ -65,7 +65,20 @@ func find_path_allow_neighbors(start_position: Vector2i, end_position: Vector2i, return path else: - for direction in walking_directions: + # be smart about which to check first + var directions: Array[Vector2i] = [] + if start_position.y < end_position.y: + directions = [Vector2i(0, -1), Vector2i(-1, 0), Vector2i(1, 0), Vector2i(0, 1)] + elif start_position.y > end_position.y: + directions = [Vector2i(0, 1), Vector2i(-1, 0), Vector2i(1, 0), Vector2i(0, -1)] + elif start_position.x < end_position.x: + directions = [Vector2i(-1, 0), Vector2i(0, -1), Vector2i(0, 1), Vector2i(1, 0)] + elif start_position.x > end_position.x: + directions = [Vector2i(1, 0), Vector2i(0, -1), Vector2i(0, 1), Vector2i(-1, 0)] + else: + directions = walking_directions + + for direction in directions: var neighbor: Vector2i = end_position + direction var path: Array[Vector2i] = find_path(start_position, neighbor, max_radius) if path.size() != 0: diff --git a/project/scripts/tilemap/World.gd b/project/scripts/tilemap/World.gd index 1052956..ced4a02 100644 --- a/project/scripts/tilemap/World.gd +++ b/project/scripts/tilemap/World.gd @@ -11,6 +11,7 @@ var tilemap_temperature: TileMapLayerAccess = TileMapLayerAccess.new() var tilemap_nav_vis: TileMapLayerAccess = TileMapLayerAccess.new() # managers var camp_manager: CampManager = CampManager.new() + # visualization @onready var step_visualizer: StepVisualization = $StepVisualization @@ -69,3 +70,23 @@ func is_walkable(position: Vector2i) -> bool: var interactive_walkable: bool = tilemap_interactive.get_custom_data(position, "walkable", true) return ground_tile_walkable and non_interactive_walkable and interactive_walkable + + +func game_tick_start() -> void: + step_visualizer.game_tick_start() + + # refill empty bushes + var empty_bushes: Array[Vector2i] = tilemap_interactive.get_cells_by_type(tilemap_types.OBJECT_I_EMPTY_BUSH) + for bush in empty_bushes: + if randf() < 0.01: + tilemap_interactive.set_cell(bush, tilemap_types.OBJECT_I_FILLED_BUSH) + + # refill empty trees + var empty_trees: Array[Vector2i] = tilemap_interactive.get_cells_by_type(tilemap_types.OBJECT_I_TREE_CUT) + for tree in empty_trees: + if randf() < 0.01: + tilemap_interactive.set_cell(tree, tilemap_types.OBJECT_I_TREE_FULL) + + +func game_tick_end() -> void: + step_visualizer.game_tick_end()