84 lines
2.7 KiB
GDScript
84 lines
2.7 KiB
GDScript
class_name EventsTracker
|
|
extends Node
|
|
|
|
enum Event {
|
|
CAMPFIRE_LIT,
|
|
CAMPFIRE_LIT_FAILED,
|
|
CAMPFIRE_EXTINGUISHED,
|
|
CAMP_ADDED_ITEM,
|
|
CAMP_TAKEN_ITEM,
|
|
CAMP_TAKE_ITEM_FAILED,
|
|
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 func track(event: Event, params: Dictionary = {}) -> void:
|
|
var tracked_event: TrackedEvent = TrackedEvent.new()
|
|
tracked_event.event = event
|
|
tracked_event.params = params
|
|
events.append(tracked_event)
|
|
print("Event tracked: ", event, " params: ", params)
|
|
if events.size() > max_events:
|
|
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)
|