diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index 5c5f4e9eb3a..dac44c9d773 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -33,6 +33,7 @@ var/interface_path = "RIGSuit" var/ai_interface_path = "RIGSuit" var/interface_title = "Hardsuit Controller" + var/interface_intro = "NT" var/wearer_move_delay //Used for AI moving. var/ai_controlled_move_delay = 10 @@ -803,7 +804,7 @@ /obj/item/rig/dropped(mob/user) . = ..(user) // So the next user will see the boot animation - tgui_shared_states.Cut() + tgui_shared_states?.Cut() for(var/piece in list("helmet","gauntlets","chest","boots")) toggle_piece(piece, user, ONLY_RETRACT) if(wearer && wearer.wearing_rig == src) diff --git a/code/modules/clothing/spacesuits/rig/rig_tgui.dm b/code/modules/clothing/spacesuits/rig/rig_tgui.dm index 8f93cb11ced..3c3e77b1321 100644 --- a/code/modules/clothing/spacesuits/rig/rig_tgui.dm +++ b/code/modules/clothing/spacesuits/rig/rig_tgui.dm @@ -1,5 +1,5 @@ // Just used to force the icon into the rsc, Byond.iconRefMap does the rest -GLOBAL_DATUM_INIT(rigsuit_ui_icon, /icon, 'icons/hud/rig_ui_slots.dmi') +GLOBAL_DATUM_INIT(rigsuit_ui_icon, /icon, 'icons/hud/rig/rig_ui_slots.dmi') /* * This defines the global UI for RIGSuits. @@ -120,6 +120,26 @@ GLOBAL_DATUM_INIT(rigsuit_ui_icon, /icon, 'icons/hud/rig_ui_slots.dmi') return data +/* + * Sends data once each time the UI is opened. + */ +/obj/item/rig/tgui_static_data(mob/user) + var/list/data = ..() + + data["interface_intro"] = interface_intro + + return data + + +/datum/asset/simple/rig + assets = list( + "tentacles.mp4" = 'icons/hud/rig/tentacles.mp4', + ) + +/obj/item/rig/ui_assets(mob/user) + . = ..() + . += get_asset_datum(/datum/asset/simple/rig) + /* * tgui_act() is the TGUI equivelent of Topic(). It's responsible for all of the "actions" you can take in the UI. */ diff --git a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm index 716699990c4..375b6e46be0 100644 --- a/code/modules/clothing/spacesuits/rig/suits/station_vr.dm +++ b/code/modules/clothing/spacesuits/rig/suits/station_vr.dm @@ -230,6 +230,7 @@ /obj/item/rig/baymed name = "\improper Commonwealth medical hardsuit control module" desc = "A lightweight first responder hardsuit from the Commonwealth. Not suitable for combat use, but advanced myomer fibers can push the user to incredible speeds." + interface_intro = "Commonwealth" icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob @@ -295,6 +296,7 @@ /obj/item/rig/bayeng name = "\improper Commonwealth engineering hardsuit control module" desc = "An advanced construction hardsuit from the Commonwealth. Built like a tank. Don't expect to be taking any tight corners while running." + interface_intro = "Commonwealth" icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob @@ -361,6 +363,7 @@ /obj/item/rig/pathfinder name = "\improper Commonwealth pathfinder hardsuit control module" desc = "A Commonwealth pathfinder hardsuit is hard to come by... how'd this end up on the frontier?" + interface_intro = "Commonwealth" icon = 'icons/obj/rig_modules_vr.dmi' // the item default_mob_icon = 'icons/mob/rig_back_vr.dmi' // the onmob diff --git a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm index 6d38cce5ad5..c022d9f2bf0 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean/protean_rig.dm @@ -8,6 +8,7 @@ unremovable = TRUE //Can not be removed. At least, not initially. default_mob_icon = null //Actually having a forced sprite for Proteans is ugly af. I'm not gonna make this a toggle icon_state = "nanomachine_rig" + interface_intro = "Protean" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 100) siemens_coefficient= 1 slowdown = 0 diff --git a/icons/hud/rig_ui_slots.dmi b/icons/hud/rig/rig_ui_slots.dmi similarity index 100% rename from icons/hud/rig_ui_slots.dmi rename to icons/hud/rig/rig_ui_slots.dmi diff --git a/icons/hud/rig/tentacles.mp4 b/icons/hud/rig/tentacles.mp4 new file mode 100644 index 00000000000..057a6eb8dbe Binary files /dev/null and b/icons/hud/rig/tentacles.mp4 differ diff --git a/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx b/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx index ec5b1960056..af433e2a041 100644 --- a/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx +++ b/tgui/packages/tgui/interfaces/RIGSuit/RIGSuitHardware.tsx @@ -126,7 +126,7 @@ export const RIGSuitHardware = (props) => { @@ -153,7 +153,7 @@ export const RIGSuitHardware = (props) => { @@ -174,7 +174,7 @@ export const RIGSuitHardware = (props) => { @@ -192,7 +192,7 @@ export const RIGSuitHardware = (props) => { @@ -231,7 +231,7 @@ const HardwarePiece = (props: { { - return ( - - - - - - ); -}; +import { resolveAsset } from '../../assets'; +import { useBackend } from '../../backend'; +import { CommonwealthLogo } from './animated_logos/Commonwealth'; +import { NTLogo } from './animated_logos/NT'; +import { type Data } from './types'; const LoadingText = (props: { onFinish?: () => void }) => { const onFinish = props.onFinish ? props.onFinish : () => {}; @@ -87,9 +65,9 @@ export const LoaderNT = (props: { onFinish?: () => void }) => { if (showLogo) { return ( - + - + ); @@ -98,10 +76,76 @@ export const LoaderNT = (props: { onFinish?: () => void }) => { return ; }; +export const LoaderCommonwealth = (props: { onFinish?: () => void }) => { + const [showLogo, setShowLogo] = useState(true); + + useEffect(() => { + setTimeout(() => { + setShowLogo(false); + }, 3500); + }, []); + + if (showLogo) { + return ( + + + + + + ); + } + + return ( + + + + ); +}; + +export const LoaderProtean = (props: { onFinish?: () => void }) => { + const [showLogo, setShowLogo] = useState(true); + + useEffect(() => { + setTimeout(() => { + setShowLogo(false); + }, 3500); + }, []); + + if (showLogo) { + return ( + + + + + ); + } + + return ( + + + + ); +}; + export const RIGSuitLoader = (props: { onFinish?: () => void }) => { + const { data } = useBackend(); // You can skip to the end by clicking const onFinish = props.onFinish ? props.onFinish : () => {}; + let loader = ; + + if (data.interface_intro === 'Commonwealth') { + loader = ; + } else if (data.interface_intro === 'Protean') { + loader = ; + } + return ( void }) => { onClick={() => onFinish()} style={{ cursor: 'pointer' }} > - - - + {loader} ); diff --git a/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/Commonwealth.tsx b/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/Commonwealth.tsx new file mode 100644 index 00000000000..5e340646dfd --- /dev/null +++ b/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/Commonwealth.tsx @@ -0,0 +1,174 @@ +export const CommonwealthLogo = (props) => ( + + {/* Circles */} + + + + + + + + {/* Stars */} + + + + + {/* Lines */} + + + + {/* Left Wreath */} + + + + {/* Right Wreath */} + + + + +); diff --git a/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/NT.tsx b/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/NT.tsx new file mode 100644 index 00000000000..06346fb6c9c --- /dev/null +++ b/tgui/packages/tgui/interfaces/RIGSuit/animated_logos/NT.tsx @@ -0,0 +1,27 @@ +// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. +// http://creativecommons.org/licenses/by-sa/4.0/ +export const NTLogo = (props) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RIGSuit/types.ts b/tgui/packages/tgui/interfaces/RIGSuit/types.ts index 0c57ffb6366..276d07754d6 100644 --- a/tgui/packages/tgui/interfaces/RIGSuit/types.ts +++ b/tgui/packages/tgui/interfaces/RIGSuit/types.ts @@ -2,6 +2,7 @@ import type { BooleanLike } from 'tgui-core/react'; export type Data = { primarysystem: string | null; + interface_intro: string; ai: BooleanLike; cooling: BooleanLike; sealed: BooleanLike; diff --git a/tgui/packages/tgui/styles/interfaces/RIGSuit.scss b/tgui/packages/tgui/styles/interfaces/RIGSuit.scss index da23abe161d..f40186622b4 100644 --- a/tgui/packages/tgui/styles/interfaces/RIGSuit.scss +++ b/tgui/packages/tgui/styles/interfaces/RIGSuit.scss @@ -49,3 +49,16 @@ 0.2s -webkit-filter linear; -webkit-user-drag: none; } + +@keyframes wipe-in-up { + from { + clip-path: inset(100% 0 0 0); + } + to { + clip-path: inset(0 0 0 0); + } +} + +.RIGSuit__Animation__WipeUp { + animation: 1s linear wipe-in-up both; +}