Files

107 lines
3.5 KiB
Plaintext

//* This file is explicitly licensed under the MIT license. *//
//* Copyright (c) 2024 Citadel Station Developers *//
// todo: mob.generate_simulated_actor(...)
/**
* used to hold semantic data about an action being done by an actor vs initiator (controller)
*/
/datum/event_args/actor
/// arbitrary data list
/// * this is a lazy list
/// * this will be logged, don't be too verbose
/// * only primitives (text / numbers / lists, no datums) are allowed in here, including inside nested lists.
var/list/data = list()
/// Is this a simulated event?
/// * This is used for logging.
/// * This should be set to TRUE if this didn't originate from a player's client.
var/simulated = FALSE
/// the mob performing the action
var/mob/performer
/// the mob actually initiating the action, e.g. a remote controller.
var/mob/initiator
/datum/event_args/actor/New(mob/performer, mob/initiator)
src.performer = performer
src.initiator = initiator || performer
/datum/event_args/actor/clone()
var/datum/event_args/actor/cloning = new type
cloning.performer = performer
cloning.initiator = initiator
cloning.simulated = simulated
cloning.data = deep_copy_list(data)
return cloning
//* Logging *//
/datum/event_args/actor/proc/actor_log_string()
return performer == initiator ? key_name(performer) : "[key_name(performer)] (via [key_name(initiator)])"
//* Feedback *//
/datum/event_args/actor/proc/chat_feedback(msg, atom/target)
performer.action_feedback(msg, target)
if(performer != initiator)
initiator.action_feedback(msg, target)
/datum/event_args/actor/proc/bubble_feedback(msg, atom/target)
performer.bubble_action_feedback(msg, target)
if(performer != initiator)
initiator.bubble_action_feedback(msg, target)
// todo: rework these awful ass feedback/message procs below wtf
// proposal:
// visible_feedback(visible, audible, self, them, range, target)
// visible_proximity_feedback(visible_far, visible_near, audible_far, audible_near, self, them, range_far, range_near, target)
/**
* It is highly recommended to use named parameters with this.
*/
/datum/event_args/actor/proc/visible_feedback(atom/target, range, visible, audible, visible_self, otherwise_self, visible_them, otherwise_them)
performer.visible_action_feedback(
target = target,
initiator = initiator,
hard_range = range,
visible_hard = visible,
audible_hard = audible,
visible_self = visible_self,
otherwise_self = otherwise_self,
visible_them = visible_them,
otherwise_them = otherwise_them,
)
/**
* It is highly recommended to use named parameters with this.
*/
/datum/event_args/actor/proc/visible_dual_feedback(atom/target, range_hard, range_soft, visible_hard, visible_soft, audible_hard, audible_soft, visible_self, otherwise_self, visible_them, otherwise_them)
performer.visible_action_feedback(
target = target,
initiator = initiator,
hard_range = range_hard,
soft_range = range_soft,
visible_hard = visible_hard,
visible_soft = visible_soft,
audible_hard = audible_hard,
audible_soft = audible_soft,
visible_self = visible_self,
otherwise_self = otherwise_self,
visible_them = visible_them,
otherwise_them = otherwise_them,
)
//* Reachability *//
/**
* Checks if 'performer' can reach an atom
*/
/datum/event_args/actor/proc/check_performer_reachability(atom/target)
return check_default_performer_reachability(target)
/**
* Checks if 'performer' can reach an atom by default
*/
/datum/event_args/actor/proc/check_default_performer_reachability(atom/target)
return performer.Reachability(target)