-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds hallucination managers (#27482)
* Adds hallucination managers * Contra + Lewc review * Contra review * Initial comment enhancement
- Loading branch information
Showing
3 changed files
with
67 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
/* | ||
* Hallucination manager | ||
* Automatically spawns a hallucination effect according to `get_spawn_location` and `initial_hallucination` | ||
* By default invokes a 10 second trigger. By default that trigger will delete the manager and thus the hallucination | ||
*/ | ||
|
||
/datum/hallucination_manager | ||
/// Person on who this hallucination is | ||
var/mob/living/owner | ||
/// Reference to the timer that will do the first trigger | ||
var/trigger_timer | ||
/// How fast do we need to start our first trigger | ||
var/trigger_time = 10 SECONDS | ||
/// A list with all of our hallucinations | ||
var/list/hallucination_list = list() | ||
/// A list with any images that we made separately from our hallucinations | ||
var/list/images = list() | ||
/// The first hallucination that we spawn. Also doubles as a reference to our hallucination | ||
var/obj/effect/hallucination/no_delete/initial_hallucination | ||
|
||
// `ignore_this_argument` is here because there are still old hallucinations which require a location passed | ||
/datum/hallucination_manager/New(turf/ignore_this_argument, mob/living/hallucinator) | ||
. = ..() | ||
owner = hallucinator | ||
if(QDELETED(owner)) | ||
qdel(src) | ||
return | ||
RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(signal_qdel)) | ||
spawn_hallucination() | ||
|
||
/datum/hallucination_manager/Destroy(force, ...) | ||
. = ..() | ||
owner = null | ||
deltimer(trigger_timer) | ||
QDEL_NULL(hallucination_list) | ||
QDEL_NULL(images) | ||
|
||
/datum/hallucination_manager/proc/spawn_hallucination() | ||
var/turf/spawn_location = get_spawn_location() | ||
initial_hallucination = new(spawn_location, owner) | ||
hallucination_list |= initial_hallucination | ||
on_spawn() | ||
trigger_timer = addtimer(CALLBACK(src, PROC_REF(on_trigger)), trigger_time, TIMER_DELETE_ME) | ||
|
||
/// Returns a turf on where to spawn a hallucination | ||
/datum/hallucination_manager/proc/get_spawn_location() | ||
var/list/turfs = view(5, owner) | ||
return pick(turfs) | ||
|
||
/// The proc that runs when our hallucination is first spawned | ||
/datum/hallucination_manager/proc/on_spawn() | ||
return | ||
|
||
/// Trigger. By default will delete the manager | ||
/datum/hallucination_manager/proc/on_trigger() | ||
// If you want to have more behaviour after this callback, define a new proc on your own manager | ||
qdel(src) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters