|
| 1 | +//* This file is explicitly licensed under the MIT license. *// |
| 2 | +//* Copyright (c) 2025 Citadel Station Developers *// |
| 3 | + |
| 4 | +// todo: DECLARE_CLIENT_VERB |
| 5 | +/client/verb/view_playtime() |
| 6 | + set name = "View Playtime" |
| 7 | + set desc = "View your own playtime." |
| 8 | + set category = VERB_CATEGORY_SYSTEM |
| 9 | + |
| 10 | + if(TIMER_COOLDOWN_CHECK(src, TIMER_CD_INDEX_CLIENT_VIEW_PLAYTIME)) |
| 11 | + return |
| 12 | + TIMER_COOLDOWN_START(src, TIMER_CD_INDEX_CLIENT_VIEW_PLAYTIME, 2 SECONDS) |
| 13 | + |
| 14 | + log_game("[key_name(usr)] invoked view_playtime on [key_name(src)].") |
| 15 | + |
| 16 | + // todo: self-panel for client maybe? instead of a different datum |
| 17 | + if(!legacy_playtime_viewer) |
| 18 | + legacy_playtime_viewer = new(src) |
| 19 | + legacy_playtime_viewer.ui_interact(mob) |
| 20 | + |
| 21 | +/datum/client_view_playtime |
| 22 | + var/client/owner |
| 23 | + |
| 24 | +/datum/client_view_playtime/New(client/C) |
| 25 | + src.owner = C |
| 26 | + src.owner.persistent.load_playtime() |
| 27 | + |
| 28 | +/datum/client_view_playtime/Destroy() |
| 29 | + if(owner?.legacy_playtime_viewer == src) |
| 30 | + owner.legacy_playtime_viewer = null |
| 31 | + return ..() |
| 32 | + |
| 33 | +/datum/client_view_playtime/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) |
| 34 | + owner.persistent.block_on_playtime_loaded() |
| 35 | + ui = SStgui.try_update_ui(user, src, ui) |
| 36 | + if(!ui) |
| 37 | + ui = new(user, src, "client/ClientPlaytime") |
| 38 | + ui.open() |
| 39 | + |
| 40 | +/datum/client_view_playtime/ui_static_data(mob/user, datum/tgui/ui) |
| 41 | + . = ..() |
| 42 | + // TODO: annotate playtime don't just throw raw strings |
| 43 | + .["playtime"] = owner.persistent.playtime_loaded ? owner.persistent.playtime : null |
| 44 | + |
| 45 | +/datum/client_view_playtime/ui_state() |
| 46 | + return GLOB.always_state |
0 commit comments