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

110 lines
3.8 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,
CAMP_BOAT_PART_DELIVERED,
CAMP_BOAT_COMPLETE,
SLEEP,
PLAYER_PICKED_UP_ITEM,
PLAYER_DROPPED_ITEM,
PLAYER_USED_ITEM,
GAME_STATE_WIN,
NEW_EXPLORATION_GOAL,
EXPLORATION_GOAL_REACHED,
TEMPERATURE_COLD,
TIME_SUNDOWN,
};
#
static var events: Array[TrackedEvent] = []
static var max_events: int = 14
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 x" + str(params["count"])
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"
elif event_id == Event.CAMP_BOAT_PART_DELIVERED:
text = "Boat construction"
elif event_id == Event.CAMP_BOAT_COMPLETE:
text = "Boat complete"
elif event_id == Event.GAME_STATE_WIN:
text = "Game won"
elif event_id == Event.NEW_EXPLORATION_GOAL:
text = "New goal " + str(params["goal"])
elif event_id == Event.EXPLORATION_GOAL_REACHED:
text = "Goal reached"
elif event_id == Event.TEMPERATURE_COLD:
text = "Temperature is cold: -" + str(params["temperature"])
elif event_id == Event.TIME_SUNDOWN:
text = "The sun is setting..."
else:
text = "Something happened..."
var event_label: Label = Label.new()
event_label.text = text
event_label.add_theme_font_size_override("font_size", 24 * game_manager.calculate_scale(Vector2(1200, 1200)).y)
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
item_texture_rect.set_expand_mode(TextureRect.EXPAND_FIT_WIDTH)
item_texture_rect.set_stretch_mode(TextureRect.STRETCH_KEEP_ASPECT_CENTERED)
event_container.add_child(item_texture_rect)
container.add_child(event_container)