Added visualizer for events tracker
parent
75af4679c0
commit
ed665886d3
|
@ -111,6 +111,23 @@ texture = ExtResource("4_o8ona")
|
|||
expand_mode = 2
|
||||
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="."]
|
||||
script = ExtResource("1_k0rw8")
|
||||
|
||||
|
@ -139,7 +156,6 @@ 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")
|
||||
|
|
|
@ -11,11 +11,13 @@ enum Event {
|
|||
SLEEP,
|
||||
PLAYER_PICKED_UP_ITEM,
|
||||
PLAYER_DROPPED_ITEM,
|
||||
PLAYER_USED_ITEM,
|
||||
};
|
||||
#
|
||||
static var events: Array[TrackedEvent] = []
|
||||
static var max_events: int = 20
|
||||
static var callbacks: Array[Callable] = []
|
||||
static var max_events: int = 20
|
||||
static var callbacks: Array[Callable] = []
|
||||
|
||||
|
||||
static func track(event: Event, params: Dictionary = {}) -> void:
|
||||
var tracked_event: TrackedEvent = TrackedEvent.new()
|
||||
|
@ -27,3 +29,55 @@ static func track(event: Event, params: Dictionary = {}) -> void:
|
|||
events.remove_at(0)
|
||||
for cb in callbacks:
|
||||
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()
|
||||
world.game_tick_end()
|
||||
EventsTracker.populate_visual_log(%RecentEventsLog, self)
|
||||
|
||||
update_bars()
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
|||
return
|
||||
|
||||
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:
|
||||
status = FAILURE
|
||||
status_reason = "No closest berry found"
|
||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
|||
return
|
||||
|
||||
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:
|
||||
status = FAILURE
|
||||
status_reason = "No closest stick found"
|
||||
|
|
|
@ -14,6 +14,7 @@ func run(blackboard: Dictionary) -> void:
|
|||
return
|
||||
|
||||
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:
|
||||
status = FAILURE
|
||||
status_reason = "No closest warm tile found"
|
||||
|
|
|
@ -2,15 +2,16 @@ class_name TaskEatFoodFromInventory
|
|||
extends Task
|
||||
|
||||
func run(blackboard: Dictionary) -> void:
|
||||
var player: PlayerManager = blackboard["player"]
|
||||
var player: PlayerManager = blackboard["player"]
|
||||
|
||||
if player.inventory_slot != tilemap_types.OBJECT_I_BERRY:
|
||||
status = FAILURE
|
||||
status_reason = "Inventory does not contain berry"
|
||||
return
|
||||
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.max_food
|
||||
EventsTracker.track(EventsTracker.Event.PLAYER_USED_ITEM, {"item": player.inventory_slot})
|
||||
player.inventory_slot = tilemap_types.EMPTY
|
||||
player.food = player.max_food
|
||||
|
||||
status = SUCCESS
|
||||
status_reason = "Ate berry, player now has " + str(player.food) + " food"
|
||||
status = SUCCESS
|
||||
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"
|
||||
return
|
||||
|
||||
EventsTracker.track(EventsTracker.Event.PLAYER_USED_ITEM, {"item": player.inventory_slot})
|
||||
player.inventory_slot = tilemap_types.EMPTY
|
||||
player.temperature_buff_timer = player.temperature_set_buff_value
|
||||
status = SUCCESS
|
||||
|
|
|
@ -4,18 +4,20 @@ extends Node2D
|
|||
static var game_manager: GameManager
|
||||
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 func add_line(from: Vector2i, to: Vector2i, label: String) -> void:
|
||||
draw_lines[[from, to]] = label
|
||||
static func add_line(from: Vector2i, to: Vector2i, line_type: LineType) -> void:
|
||||
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 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():
|
||||
|
@ -27,8 +29,7 @@ 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")
|
||||
@export var default_line_color: Color = Color("red")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
|
@ -38,9 +39,14 @@ func _ready() -> void:
|
|||
func _draw() -> void:
|
||||
# draw all draw_lines with their labels
|
||||
for key in draw_lines.keys():
|
||||
var from: Vector2i = key[0]
|
||||
var to: Vector2i = key[1]
|
||||
var label: String = draw_lines[key]
|
||||
draw_line(from, to, line_color, 2)
|
||||
var center: Vector2 = (from + to) / 2
|
||||
draw_string(label_font, center, label, 0, -1, 12, text_color)
|
||||
var from: Vector2i = key[0]
|
||||
var to: Vector2i = key[1]
|
||||
var line_type: LineType = draw_lines[key]
|
||||
|
||||
if line_type == LineType.SEARCH_BASE:
|
||||
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:
|
||||
var dist: int = abs(a.x - b.x) + abs(a.y - b.y)
|
||||
if record:
|
||||
StepVisualization.add_line_tileset(a, b, str(dist))
|
||||
StepVisualization.add_line_tileset(a, b, StepVisualization.LineType.SEARCH_BASE)
|
||||
return dist
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue