adds: Ability to set mob ai to "MobSpawner"

Adds new interface element to the "Mobspawner"
- AI Settings Section (besides position settings)
- -  Button to toggle custom/default AI values
- -  Button to select predefined AI types
- -  Button to sanitized text input ANY faction
- -  Button to select predefined attack intents
- -  All above buttons default to the mob's type definition, unless unsafe, then they instead use hardcoded defaults
This commit is contained in:
Runa Dacino
2023-07-30 11:48:04 +02:00
parent 9f28fdc9b5
commit a72016aad5
3 changed files with 153 additions and 49 deletions
@@ -2,6 +2,13 @@
// The path of the mob to be spawned
var/path
//The ai type path to be assigned to the mob
var/use_custom_ai = FALSE
var/ai_type = ""
var/faction = ""
var/intent = ""
var/new_path = TRUE //Sets default ai vars based on path. Tracked explicitly because tgui_act wouldn't make it work, used in tgui_data thusly
// Defines if the location of the spawned mob should be bound of the users position
var/loc_lock = FALSE
@@ -28,26 +35,40 @@
data["initial_y"] = usr.y;
data["initial_z"] = usr.z;
return data
/datum/eventkit/mob_spawner/tgui_data(mob/user)
var/list/data = list()
data["loc_lock"] = loc_lock;
data["loc_lock"] = loc_lock
if(loc_lock)
data["loc_x"] = usr.x;
data["loc_y"] = usr.y;
data["loc_z"] = usr.z;
data["loc_x"] = usr.x
data["loc_y"] = usr.y
data["loc_z"] = usr.z
data["path"] = path;
data["use_custom_ai"] = use_custom_ai
if(path)
var/mob/M = new path();
var/mob/M = new path()
if(M)
data["default_path_name"] = M.name;
data["default_desc"] = M.desc;
data["default_flavor_text"] = M.flavor_text;
qdel(M);
data["default_path_name"] = M.name
data["default_desc"] = M.desc
data["default_flavor_text"] = M.flavor_text
if(new_path && istype(M, /mob/living))
var/mob/living/L = M
ai_type = (L.ai_holder_type ? L.ai_holder_type : /datum/ai_holder/simple_mob/inert)
faction = (L.faction ? L.faction : "neutral")
intent = (L.a_intent ? L.a_intent : I_HELP)
new_path = FALSE
qdel(L)
qdel(M)
data["ai_type"] = ai_type
data["faction"] = faction
data["intent"] = intent
return data
@@ -63,7 +84,20 @@
var/newPath = tgui_input_list(usr, "Please select the new path of the mob you want to spawn.", items = choices)
path = newPath
new_path = TRUE
return TRUE
if("toggle_custom_ai")
use_custom_ai = !use_custom_ai
return TRUE
if("set_faction")
faction = sanitize(tgui_input_text(usr, "Please input your mobs' faction", "Faction", (faction ? faction : "neutral")))
return TRUE
if("set_intent")
intent = tgui_input_list(usr, "Please select preferred intent", "Select Intent", list(I_HELP, I_HURT), (intent ? intent : I_HELP))
return TRUE
if("set_ai_path")
ai_type = tgui_input_list(usr, "Select AI path. Not all subtypes are compatible!", "AI type", \
typesof(/datum/ai_holder/), (ai_type ? ai_type : /datum/ai_holder/simple_mob/inert))
return TRUE
if("loc_lock")
loc_lock = !loc_lock
@@ -99,6 +133,18 @@
M.name = sanitize(name)
M.desc = sanitize(params["desc"])
M.flavor_text = sanitize(params["flavor_text"])
if(use_custom_ai)
if(istype(M, /mob/living))
var/mob/living/L = M
L.ai_holder_type = ai_type
L.faction = faction
L.a_intent = intent
L.initialize_ai_holder()
L.AdjustSleeping(-100)
else
to_chat(usr, span_notice("You can only set AI for subtypes of mob/living!"))
/*
WIP: Radius around selected coords