mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-26 10:12:17 +00:00
94 lines
2.7 KiB
Plaintext
94 lines
2.7 KiB
Plaintext
/datum/event //NOTE: Times are measured in master controller ticks!
|
|
var/startWhen = 0 //When in the lifetime to call start().
|
|
var/announceWhen = 0 //When in the lifetime to call announce().
|
|
var/endWhen = 0 //When in the lifetime the event should end.
|
|
var/oneShot = 0 //If true, then the event removes itself from the list of potential events on creation.
|
|
|
|
var/activeFor = 0 //How long the event has existed. You don't need to change this.
|
|
var/area/impact_area
|
|
var/scaling_factor // Used to scale spawns to server pop.
|
|
//Called first before processing.
|
|
//Allows you to setup your event, such as randomly
|
|
//setting the startWhen and or announceWhen variables.
|
|
//Only called once.
|
|
/datum/event/proc/setup()
|
|
return
|
|
|
|
//Called when the tick is equal to the startWhen variable.
|
|
//Allows you to start before announcing or vice versa.
|
|
//Only called once.
|
|
/datum/event/proc/start()
|
|
return
|
|
|
|
//Called when the tick is equal to the announceWhen variable.
|
|
//Allows you to announce before starting or vice versa.
|
|
//Only called once.
|
|
/datum/event/proc/announce()
|
|
return
|
|
|
|
//Called on or after the tick counter is equal to startWhen.
|
|
//You can include code related to your event or add your own
|
|
//time stamped events.
|
|
//Called more than once.
|
|
/datum/event/proc/tick()
|
|
return
|
|
|
|
//Called on or after the tick is equal or more than endWhen
|
|
//You can include code related to the event ending.
|
|
//Do not place spawn() in here, instead use tick() to check for
|
|
//the activeFor variable.
|
|
//For example: if(activeFor == myOwnVariable + 30) doStuff()
|
|
//Only called once.
|
|
/datum/event/proc/end()
|
|
return
|
|
|
|
|
|
|
|
//Do not override this proc, instead use the appropiate procs.
|
|
//This proc will handle the calls to the appropiate procs.
|
|
/datum/event/proc/process()
|
|
|
|
if(activeFor > startWhen && activeFor < endWhen)
|
|
tick()
|
|
|
|
if(activeFor == startWhen)
|
|
start()
|
|
|
|
if(activeFor == announceWhen)
|
|
announce()
|
|
|
|
if(activeFor == endWhen)
|
|
end()
|
|
|
|
// Everything is done, let's clean up.
|
|
if(activeFor >= endWhen && activeFor >= announceWhen && activeFor >= startWhen)
|
|
kill()
|
|
|
|
activeFor++
|
|
|
|
|
|
//Garbage collects the event by removing it from the global events list,
|
|
//which should be the only place it's referenced.
|
|
//Called when start(), announce() and end() has all been called.
|
|
/datum/event/proc/kill()
|
|
events.Remove(src)
|
|
|
|
|
|
//Adds the event to the global events list, and removes it from the list
|
|
//of potential events.
|
|
/datum/event/New()
|
|
setup()
|
|
events.Add(src)
|
|
score_eventsendured++
|
|
/*if(oneShot)
|
|
potentialRandomEvents.Remove(type)*/
|
|
..()
|
|
|
|
/datum/event/proc/num_players()
|
|
var/players = 0
|
|
for(var/mob/living/carbon/human/P in player_list)
|
|
if(P.client)
|
|
players++
|
|
return players
|
|
|