Added visualizer for events tracker
parent
75af4679c0
commit
ed665886d3
|
@ -111,6 +111,23 @@ texture = ExtResource("4_o8ona")
|
||||||
expand_mode = 2
|
expand_mode = 2
|
||||||
stretch_mode = 5
|
stretch_mode = 5
|
||||||
|
|
||||||
|
[node name="MarginContainer" type="MarginContainer" parent="Camera2D/CanvasLayer"]
|
||||||
|
anchors_preset = 12
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_top = -5.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
theme_override_constants/margin_left = 5
|
||||||
|
theme_override_constants/margin_bottom = 5
|
||||||
|
|
||||||
|
[node name="RecentEventsLog" type="VBoxContainer" parent="Camera2D/CanvasLayer/MarginContainer"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
layout_mode = 2
|
||||||
|
size_flags_horizontal = 0
|
||||||
|
size_flags_vertical = 8
|
||||||
|
|
||||||
[node name="Tileset" type="Node2D" parent="."]
|
[node name="Tileset" type="Node2D" parent="."]
|
||||||
script = ExtResource("1_k0rw8")
|
script = ExtResource("1_k0rw8")
|
||||||
|
|
||||||
|
@ -139,7 +156,6 @@ tile_set = ExtResource("1_vlccq")
|
||||||
|
|
||||||
[node name="StepVisualization" type="Node2D" parent="Tileset"]
|
[node name="StepVisualization" type="Node2D" parent="Tileset"]
|
||||||
script = ExtResource("5_sr2su")
|
script = ExtResource("5_sr2su")
|
||||||
text_color = Color(0.16133, 0.00745911, 0.0516868, 1)
|
|
||||||
|
|
||||||
[node name="PlayerManager" type="Node" parent="."]
|
[node name="PlayerManager" type="Node" parent="."]
|
||||||
script = ExtResource("4_1xqo1")
|
script = ExtResource("4_1xqo1")
|
||||||
|
|
|
@ -11,11 +11,13 @@ enum Event {
|
||||||
SLEEP,
|
SLEEP,
|
||||||
PLAYER_PICKED_UP_ITEM,
|
PLAYER_PICKED_UP_ITEM,
|
||||||
PLAYER_DROPPED_ITEM,
|
PLAYER_DROPPED_ITEM,
|
||||||
|
PLAYER_USED_ITEM,
|
||||||
};
|
};
|
||||||
#
|
#
|
||||||
static var events: Array[TrackedEvent] = []
|
static var events: Array[TrackedEvent] = []
|
||||||
static var max_events: int = 20
|
static var max_events: int = 20
|
||||||
static var callbacks: Array[Callable] = []
|
static var callbacks: Array[Callable] = []
|
||||||
|
|
||||||
|
|
||||||
static func track(event: Event, params: Dictionary = {}) -> void:
|
static func track(event: Event, params: Dictionary = {}) -> void:
|
||||||
var tracked_event: TrackedEvent = TrackedEvent.new()
|
var tracked_event: TrackedEvent = TrackedEvent.new()
|
||||||
|
@ -27,3 +29,55 @@ static func track(event: Event, params: Dictionary = {}) -> void:
|
||||||
events.remove_at(0)
|
events.remove_at(0)
|
||||||
for cb in callbacks:
|
for cb in callbacks:
|
||||||
cb.call(event, params)
|
cb.call(event, params)
|
||||||
|
|
||||||
|
|
||||||
|
static func populate_visual_log(visual_events_log: VBoxContainer, game_manager: GameManager) -> void:
|
||||||
|
for child in visual_events_log.get_children():
|
||||||
|
child.queue_free()
|
||||||
|
for event in events:
|
||||||
|
event = event as TrackedEvent
|
||||||
|
populate_visual_log_create_label(event, visual_events_log, game_manager)
|
||||||
|
|
||||||
|
|
||||||
|
static func populate_visual_log_create_label(event: TrackedEvent, container: Container, game_manager: GameManager) -> void:
|
||||||
|
var event_id: int = event.event
|
||||||
|
var params: Dictionary = event.params
|
||||||
|
|
||||||
|
var text: String = ""
|
||||||
|
|
||||||
|
if event_id == Event.CAMPFIRE_LIT:
|
||||||
|
text = "Campfire lit"
|
||||||
|
elif event_id == Event.CAMPFIRE_LIT_FAILED:
|
||||||
|
text = "Campfire lighting failed"
|
||||||
|
elif event_id == Event.CAMPFIRE_EXTINGUISHED:
|
||||||
|
text = "Campfire extinguished"
|
||||||
|
elif event_id == Event.CAMP_ADDED_ITEM:
|
||||||
|
text = "Camp added item"
|
||||||
|
elif event_id == Event.CAMP_TAKEN_ITEM:
|
||||||
|
text = "Camp taken item"
|
||||||
|
elif event_id == Event.CAMP_TAKE_ITEM_FAILED:
|
||||||
|
text = "Could not take item from camp"
|
||||||
|
elif event_id == Event.SLEEP:
|
||||||
|
text = "Player slept"
|
||||||
|
elif event_id == Event.PLAYER_PICKED_UP_ITEM:
|
||||||
|
text = "took"
|
||||||
|
elif event_id == Event.PLAYER_DROPPED_ITEM:
|
||||||
|
text = "dropped"
|
||||||
|
elif event_id == Event.PLAYER_USED_ITEM:
|
||||||
|
text = "used"
|
||||||
|
|
||||||
|
var event_label: Label = Label.new()
|
||||||
|
event_label.text = text
|
||||||
|
event_label.add_theme_color_override("font_color", Color(0, 0, 0))
|
||||||
|
|
||||||
|
var event_container: HBoxContainer = HBoxContainer.new()
|
||||||
|
event_container.add_child(event_label)
|
||||||
|
|
||||||
|
if params.has("item"):
|
||||||
|
var item_texture: Texture = game_manager.world.tilemap_interactive.get_cell_texture(params["item"])
|
||||||
|
if item_texture:
|
||||||
|
var item_texture_rect: TextureRect = TextureRect.new()
|
||||||
|
item_texture_rect.texture = item_texture
|
||||||
|
event_container.add_child(item_texture_rect)
|
||||||
|
|
||||||
|
container.add_child(event_container)
|
||||||
|
|
|
@ -62,6 +62,7 @@ func _on_game_tick_timeout() -> void:
|
||||||
|
|
||||||
tilemap_navigation.game_tick_end()
|
tilemap_navigation.game_tick_end()
|
||||||
world.game_tick_end()
|
world.game_tick_end()
|
||||||
|
EventsTracker.populate_visual_log(%RecentEventsLog, self)
|
||||||
|
|
||||||
update_bars()
|
update_bars()
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
||||||
return
|
return
|
||||||
|
|
||||||
var closest_berry: Vector2i = navigation.manhattan_distance_closest(active_foods, player.board_position)
|
var closest_berry: Vector2i = navigation.manhattan_distance_closest(active_foods, player.board_position)
|
||||||
|
StepVisualization.add_line_tileset(player.board_position, closest_berry, StepVisualization.LineType.SEARCH_SELECTED)
|
||||||
if closest_berry == tilemap_types.NO_TILE_FOUND:
|
if closest_berry == tilemap_types.NO_TILE_FOUND:
|
||||||
status = FAILURE
|
status = FAILURE
|
||||||
status_reason = "No closest berry found"
|
status_reason = "No closest berry found"
|
||||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
||||||
return
|
return
|
||||||
|
|
||||||
var closest_stick: Vector2i = navigation.manhattan_distance_closest(sticks, player.board_position)
|
var closest_stick: Vector2i = navigation.manhattan_distance_closest(sticks, player.board_position)
|
||||||
|
StepVisualization.add_line_tileset(player.board_position, closest_stick, StepVisualization.LineType.SEARCH_SELECTED)
|
||||||
if closest_stick == tilemap_types.NO_TILE_FOUND:
|
if closest_stick == tilemap_types.NO_TILE_FOUND:
|
||||||
status = FAILURE
|
status = FAILURE
|
||||||
status_reason = "No closest stick found"
|
status_reason = "No closest stick found"
|
||||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
||||||
return
|
return
|
||||||
|
|
||||||
var closest_warm_tile: Vector2i = navigation.manhattan_distance_closest(warm_tiles, player.board_position)
|
var closest_warm_tile: Vector2i = navigation.manhattan_distance_closest(warm_tiles, player.board_position)
|
||||||
|
StepVisualization.add_line_tileset(player.board_position, closest_warm_tile, StepVisualization.LineType.SEARCH_SELECTED)
|
||||||
if closest_warm_tile == tilemap_types.NO_TILE_FOUND:
|
if closest_warm_tile == tilemap_types.NO_TILE_FOUND:
|
||||||
status = FAILURE
|
status = FAILURE
|
||||||
status_reason = "No closest warm tile found"
|
status_reason = "No closest warm tile found"
|
||||||
|
|
|
@ -2,15 +2,16 @@ class_name TaskEatFoodFromInventory
|
||||||
extends Task
|
extends Task
|
||||||
|
|
||||||
func run(blackboard: Dictionary) -> void:
|
func run(blackboard: Dictionary) -> void:
|
||||||
var player: PlayerManager = blackboard["player"]
|
var player: PlayerManager = blackboard["player"]
|
||||||
|
|
||||||
if player.inventory_slot != tilemap_types.OBJECT_I_BERRY:
|
if player.inventory_slot != tilemap_types.OBJECT_I_BERRY:
|
||||||
status = FAILURE
|
status = FAILURE
|
||||||
status_reason = "Inventory does not contain berry"
|
status_reason = "Inventory does not contain berry"
|
||||||
return
|
return
|
||||||
|
|
||||||
player.inventory_slot = tilemap_types.EMPTY
|
EventsTracker.track(EventsTracker.Event.PLAYER_USED_ITEM, {"item": player.inventory_slot})
|
||||||
player.food = player.max_food
|
player.inventory_slot = tilemap_types.EMPTY
|
||||||
|
player.food = player.max_food
|
||||||
|
|
||||||
status = SUCCESS
|
status = SUCCESS
|
||||||
status_reason = "Ate berry, player now has " + str(player.food) + " food"
|
status_reason = "Ate berry, player now has " + str(player.food) + " food"
|
||||||
|
|
|
@ -9,6 +9,7 @@ func run(blackboard: Dictionary) -> void:
|
||||||
status_reason = "Player does not have a stick in inventory"
|
status_reason = "Player does not have a stick in inventory"
|
||||||
return
|
return
|
||||||
|
|
||||||
|
EventsTracker.track(EventsTracker.Event.PLAYER_USED_ITEM, {"item": player.inventory_slot})
|
||||||
player.inventory_slot = tilemap_types.EMPTY
|
player.inventory_slot = tilemap_types.EMPTY
|
||||||
player.temperature_buff_timer = player.temperature_set_buff_value
|
player.temperature_buff_timer = player.temperature_set_buff_value
|
||||||
status = SUCCESS
|
status = SUCCESS
|
||||||
|
|
|
@ -4,18 +4,20 @@ extends Node2D
|
||||||
static var game_manager: GameManager
|
static var game_manager: GameManager
|
||||||
static var world: World
|
static var world: World
|
||||||
#
|
#
|
||||||
# Dictionary[Array[Vector2i], bool] ([from, to], string)
|
enum LineType { SEARCH_BASE, SEARCH_SELECTED }
|
||||||
|
#
|
||||||
|
# Dictionary[Array[Vector2i], LineType] ([from, to], line_type)
|
||||||
static var draw_lines: Dictionary = {}
|
static var draw_lines: Dictionary = {}
|
||||||
|
|
||||||
|
|
||||||
static func add_line(from: Vector2i, to: Vector2i, label: String) -> void:
|
static func add_line(from: Vector2i, to: Vector2i, line_type: LineType) -> void:
|
||||||
draw_lines[[from, to]] = label
|
draw_lines[[from, to]] = line_type
|
||||||
|
|
||||||
|
|
||||||
static func add_line_tileset(from: Vector2i, to: Vector2i, label: String) -> void:
|
static func add_line_tileset(from: Vector2i, to: Vector2i, line_type: LineType) -> void:
|
||||||
var from_tileset: Vector2i = world.tilemap_ground.cell_to_local(from)
|
var from_tileset: Vector2i = world.tilemap_ground.cell_to_local(from)
|
||||||
var to_tileset: Vector2i = world.tilemap_ground.cell_to_local(to)
|
var to_tileset: Vector2i = world.tilemap_ground.cell_to_local(to)
|
||||||
draw_lines[[from_tileset, to_tileset]] = label
|
draw_lines[[from_tileset, to_tileset]] = line_type
|
||||||
|
|
||||||
|
|
||||||
func game_tick_start():
|
func game_tick_start():
|
||||||
|
@ -27,8 +29,7 @@ func game_tick_end():
|
||||||
|
|
||||||
var label_font = Control.new().get_theme_default_font()
|
var label_font = Control.new().get_theme_default_font()
|
||||||
|
|
||||||
@export var line_color: Color = Color("red")
|
@export var default_line_color: Color = Color("red")
|
||||||
@export var text_color: Color = Color("white")
|
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
@ -38,9 +39,14 @@ func _ready() -> void:
|
||||||
func _draw() -> void:
|
func _draw() -> void:
|
||||||
# draw all draw_lines with their labels
|
# draw all draw_lines with their labels
|
||||||
for key in draw_lines.keys():
|
for key in draw_lines.keys():
|
||||||
var from: Vector2i = key[0]
|
var from: Vector2i = key[0]
|
||||||
var to: Vector2i = key[1]
|
var to: Vector2i = key[1]
|
||||||
var label: String = draw_lines[key]
|
var line_type: LineType = draw_lines[key]
|
||||||
draw_line(from, to, line_color, 2)
|
|
||||||
var center: Vector2 = (from + to) / 2
|
if line_type == LineType.SEARCH_BASE:
|
||||||
draw_string(label_font, center, label, 0, -1, 12, text_color)
|
draw_line(from, to, Color("blue"), 1)
|
||||||
|
elif line_type == LineType.SEARCH_SELECTED:
|
||||||
|
draw_line(from, to, Color("green"), 2)
|
||||||
|
|
||||||
|
# var center: Vector2 = (from + to) / 2
|
||||||
|
# draw_string(label_font, center, label, 0, -1, 12, text_color)
|
||||||
|
|
|
@ -39,7 +39,7 @@ func is_within_radius(position: Vector2i, center: Vector2i, radius: int, record:
|
||||||
static func manhattan_distance(a: Vector2i, b: Vector2i, record: bool = false) -> 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)
|
var dist: int = abs(a.x - b.x) + abs(a.y - b.y)
|
||||||
if record:
|
if record:
|
||||||
StepVisualization.add_line_tileset(a, b, str(dist))
|
StepVisualization.add_line_tileset(a, b, StepVisualization.LineType.SEARCH_BASE)
|
||||||
return dist
|
return dist
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue