gai-ca2/project/scripts/global/EventsTracker.gd

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)