Added first real behavior
parent
3c61ce4e7f
commit
b89131bbaa
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=13 format=4 uid="uid://b88asko1ugyd2"]
|
||||
[gd_scene load_steps=15 format=4 uid="uid://b88asko1ugyd2"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/global/GameManager.gd" id="1_eeg2d"]
|
||||
[ext_resource type="Script" path="res://scripts/tilemap/World.gd" id="1_k0rw8"]
|
||||
|
@ -11,12 +11,15 @@
|
|||
[ext_resource type="Script" path="res://scripts/player/tree/impl/testing/WalkUpToMouse.gd" id="8_s6mqc"]
|
||||
[ext_resource type="Script" path="res://scripts/player/tree/impl/base/TaskSequence.gd" id="9_i67mw"]
|
||||
[ext_resource type="Script" path="res://scripts/player/tree/impl/base/GoToWhileRunningSuccessStop.gd" id="10_4v1m1"]
|
||||
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskEatFoodFromInventory.gd" id="10_70s0w"]
|
||||
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/critical_survival/TaskCheckFoodCritical.gd" id="10_sf2pi"]
|
||||
[ext_resource type="Script" path="res://scripts/player/tree/impl/game/inventory/TaskPickupBerry.gd" id="13_mljce"]
|
||||
|
||||
[node name="Island-scene" type="Node2D"]
|
||||
script = ExtResource("1_eeg2d")
|
||||
|
||||
[node name="Camera2D" type="Camera2D" parent="."]
|
||||
position = Vector2(352, 235)
|
||||
script = ExtResource("2_k51iv")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="Camera2D"]
|
||||
|
@ -67,6 +70,7 @@ tile_set = ExtResource("1_vlccq")
|
|||
|
||||
[node name="StepVisualization" type="Node2D" parent="Tileset"]
|
||||
script = ExtResource("5_sr2su")
|
||||
text_color = Color(0.16133, 0.00745911, 0.0516868, 1)
|
||||
|
||||
[node name="PlayerManager" type="Node" parent="."]
|
||||
script = ExtResource("4_1xqo1")
|
||||
|
@ -80,15 +84,27 @@ script = ExtResource("7_1jajd")
|
|||
[node name="sl_CriticalSurvival" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"]
|
||||
script = ExtResource("7_1jajd")
|
||||
|
||||
[node name="sq_Food" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival"]
|
||||
[node name="sl_Food" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival"]
|
||||
script = ExtResource("7_1jajd")
|
||||
|
||||
[node name="sq_FoodInInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food"]
|
||||
script = ExtResource("9_i67mw")
|
||||
|
||||
[node name="TaskCheckFoodCritical" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food"]
|
||||
[node name="TaskEatFoodFromInventory" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_FoodInInventory"]
|
||||
script = ExtResource("10_70s0w")
|
||||
|
||||
[node name="sq_NextFood" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food"]
|
||||
script = ExtResource("9_i67mw")
|
||||
|
||||
[node name="TaskCheckFoodCritical" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"]
|
||||
script = ExtResource("10_sf2pi")
|
||||
|
||||
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sq_Food"]
|
||||
[node name="GoToWhileRunningSuccessStop" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"]
|
||||
script = ExtResource("10_4v1m1")
|
||||
|
||||
[node name="TaskPickupBerry" type="Node" parent="PlayerManager/BehaviorTree/sl_Root/sl_CriticalSurvival/sl_Food/sq_NextFood"]
|
||||
script = ExtResource("13_mljce")
|
||||
|
||||
[node name="WalkUpToMouse" type="Node" parent="PlayerManager/BehaviorTree/sl_Root"]
|
||||
script = ExtResource("8_s6mqc")
|
||||
|
||||
|
|
|
@ -9,6 +9,8 @@ enum Event {
|
|||
CAMP_TAKEN_ITEM,
|
||||
CAMP_TAKE_ITEM_FAILED,
|
||||
SLEEP,
|
||||
PLAYER_PICKED_UP_ITEM,
|
||||
PLAYER_DROPPED_ITEM,
|
||||
};
|
||||
#
|
||||
static var events: Array[TrackedEvent] = []
|
||||
|
|
|
@ -3,16 +3,22 @@ extends Node
|
|||
|
||||
@onready var inventory_label: Label = %InventoryLabel
|
||||
|
||||
# food system
|
||||
@export var food_damage: int = 1
|
||||
@export var food_addon_per_berry: int = 100
|
||||
@export var food_critical_threshold: int = 50
|
||||
# temperature
|
||||
@export var temperature_damage: int = 1
|
||||
@export var temperature_endure: int = 50
|
||||
# viewing
|
||||
@export var view_distance: int = 50
|
||||
|
||||
var tilemap_types: TileMapTileTypes = TileMapTileTypes.new()
|
||||
#
|
||||
var game_manager: GameManager = null
|
||||
var last_board_position: Vector2i = Vector2i(0, 0)
|
||||
var board_position: Vector2i = Vector2i(0, 0):
|
||||
|
||||
var board_position: Vector2i = Vector2i(0, 0):
|
||||
set(value):
|
||||
last_board_position = board_position
|
||||
board_position = value
|
||||
|
@ -24,6 +30,7 @@ var food: int = 0
|
|||
# var water: int = 0
|
||||
var temperature_timer: int = 0
|
||||
var health: int = 0
|
||||
|
||||
#
|
||||
var inventory_slot: Vector2i = tilemap_types.EMPTY:
|
||||
set(value):
|
||||
|
@ -96,9 +103,13 @@ func pick_up_item(tilemap_pos: Vector2i) -> void:
|
|||
else:
|
||||
game_manager.world.tilemap_interactive.clear_cell(tilemap_pos)
|
||||
print("Picked up item: ", pick_up_item_type)
|
||||
EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type})
|
||||
|
||||
else:
|
||||
# inventory is full, swap the item
|
||||
print("Inventory is full. Swapping item: ", inventory_slot, " with item: ", pick_up_item_type)
|
||||
EventsTracker.track(EventsTracker.Event.PLAYER_DROPPED_ITEM, {"item": inventory_slot})
|
||||
EventsTracker.track(EventsTracker.Event.PLAYER_PICKED_UP_ITEM, {"item": pick_up_item_type})
|
||||
if tile_after_pickup_transform:
|
||||
game_manager.world.tilemap_interactive.set_cell(tilemap_pos, tile_after_pickup_transform)
|
||||
var drop_location: Vector2i = game_manager.world.find_item_drop_location(tilemap_pos)
|
||||
|
@ -185,6 +196,8 @@ func tick_handle_temperature(cell_temperature: int):
|
|||
|
||||
|
||||
func tick_handle_food():
|
||||
if food > 0:
|
||||
food -= 1
|
||||
if food <= 0:
|
||||
health -= food_damage
|
||||
|
||||
|
|
|
@ -6,6 +6,11 @@ func run(blackboard: Dictionary) -> void:
|
|||
var player: PlayerManager = blackboard["player"]
|
||||
var navigation: TilemapNavigation = blackboard["navigation"]
|
||||
|
||||
if player.food > player.food_critical_threshold:
|
||||
status = FAILURE
|
||||
status_reason = "Player food is not critical (" + str(player.food) + " > " + str(player.food_critical_threshold) + ")"
|
||||
return
|
||||
|
||||
var active_foods: Array[Vector2i] = world.tilemap_interactive.get_cells_by_type_collection(
|
||||
tilemap_types.OBJECT_COLLECTION_BERRY_SOURCE, player.board_position, player.view_distance)
|
||||
if len(active_foods) == 0:
|
||||
|
@ -19,6 +24,8 @@ func run(blackboard: Dictionary) -> void:
|
|||
status_reason = "No closest berry found"
|
||||
return
|
||||
|
||||
blackboard["closest_berry"] = closest_berry
|
||||
|
||||
var path: Array[Vector2i] = navigation.find_path_allow_neighbors(player.board_position, closest_berry, player.view_distance)
|
||||
if path.size() > 0:
|
||||
blackboard["path"] = path
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
class_name TaskEatFoodFromInventory
|
||||
extends Task
|
||||
|
||||
func run(blackboard: Dictionary) -> void:
|
||||
var player: PlayerManager = blackboard["player"]
|
||||
|
||||
if player.inventory_slot != tilemap_types.OBJECT_I_BERRY:
|
||||
status = FAILURE
|
||||
status_reason = "Inventory does not contain berry"
|
||||
return
|
||||
|
||||
player.inventory_slot = tilemap_types.EMPTY
|
||||
player.food += player.food_addon_per_berry
|
||||
|
||||
status = SUCCESS
|
||||
status_reason = "Ate berry, player now has " + str(player.food) + " food"
|
|
@ -0,0 +1,11 @@
|
|||
class_name TaskPickupBerry
|
||||
extends Task
|
||||
|
||||
func run(blackboard: Dictionary) -> void:
|
||||
var player: PlayerManager = blackboard["player"]
|
||||
var closest_berry: Vector2i = blackboard["closest_berry"]
|
||||
|
||||
player.pick_up_item(closest_berry)
|
||||
|
||||
status = SUCCESS
|
||||
status_reason = "Picked up berry"
|
|
@ -13,18 +13,8 @@ static func add_line(from: Vector2i, to: Vector2i, label: String) -> void:
|
|||
|
||||
|
||||
static func add_line_tileset(from: Vector2i, to: Vector2i, label: String) -> void:
|
||||
var add_factor: Vector2i = world.tilemap_ground.tilemap.tile_set.tile_size
|
||||
add_factor.x /= 2
|
||||
add_factor.y /= 2
|
||||
|
||||
var from_tileset: Vector2i = world.tilemap_ground.cell_to_local(from)
|
||||
from_tileset.x += add_factor.x
|
||||
from_tileset.y += add_factor.y
|
||||
|
||||
var to_tileset: Vector2i = world.tilemap_ground.cell_to_local(to)
|
||||
to_tileset.x += add_factor.x
|
||||
to_tileset.y += add_factor.y
|
||||
|
||||
var to_tileset: Vector2i = world.tilemap_ground.cell_to_local(to)
|
||||
draw_lines[[from_tileset, to_tileset]] = label
|
||||
|
||||
|
||||
|
@ -37,6 +27,9 @@ func game_tick_end():
|
|||
|
||||
var label_font = Control.new().get_theme_default_font()
|
||||
|
||||
@export var line_color: Color = Color("red")
|
||||
@export var text_color: Color = Color("white")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
pass
|
||||
|
@ -48,6 +41,6 @@ func _draw() -> void:
|
|||
var from: Vector2i = key[0]
|
||||
var to: Vector2i = key[1]
|
||||
var label: String = draw_lines[key]
|
||||
draw_line(from, to, Color("red"), 2)
|
||||
draw_line(from, to, line_color, 2)
|
||||
var center: Vector2 = (from + to) / 2
|
||||
draw_string(label_font, center, label)
|
||||
draw_string(label_font, center, label, 0, -1, 12, text_color)
|
||||
|
|
|
@ -23,7 +23,7 @@ func get_cells_by_type_collection(
|
|||
if max_distance < 99999999:
|
||||
var filtered_tiles: Array[Vector2i] = []
|
||||
for tile in tiles_with_type:
|
||||
if TilemapNavigation.manhattan_distance(center, tile) <= max_distance:
|
||||
if TilemapNavigation.manhattan_distance(center, tile, true) <= max_distance:
|
||||
filtered_tiles.append(tile)
|
||||
return filtered_tiles
|
||||
return tiles_with_type
|
||||
|
|
|
@ -32,13 +32,14 @@ func game_tick_end() -> void:
|
|||
world.tilemap_nav_vis.set_cell(chosen_path[chosen_path.size() - 1], tilemap_types.NAVIGATION_TARGET)
|
||||
|
||||
|
||||
func is_within_radius(position: Vector2i, center: Vector2i, radius: int) -> bool:
|
||||
return TilemapNavigation.manhattan_distance(position, center) <= radius
|
||||
func is_within_radius(position: Vector2i, center: Vector2i, radius: int, record: bool = false) -> bool:
|
||||
return TilemapNavigation.manhattan_distance(position, center, record) <= radius
|
||||
|
||||
|
||||
static func manhattan_distance(a: Vector2i, b: Vector2i) -> int:
|
||||
static func manhattan_distance(a: Vector2i, b: Vector2i, record: bool = false) -> int:
|
||||
var dist: int = abs(a.x - b.x) + abs(a.y - b.y)
|
||||
# StepVisualization.add_line_tileset(a, b, str(dist))
|
||||
if record:
|
||||
StepVisualization.add_line_tileset(a, b, str(dist))
|
||||
return dist
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue