From c7bd20ceb634d4379a3713f66e8740fb23c9e04f Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sun, 23 Aug 2015 13:33:10 +0200 Subject: [PATCH] Rig AI fixes. Changes how the state for the NanoUI window is selected. Fixes and optimizes the hardsuit module tab for rig AIs. Corrects some qdel issues for ejected rig AIs. --- .../spacesuits/rig/modules/computer.dm | 26 +++++++++++++++---- .../spacesuits/rig/modules/modules.dm | 10 +++---- code/modules/clothing/spacesuits/rig/rig.dm | 6 ++--- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index b035678e749..975f6dfc7c6 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -23,7 +23,7 @@ usr << "Your module is not installed in a hardsuit." return - module.holder.ui_interact(usr) + module.holder.ui_interact(usr, nano_state = contained_state) /obj/item/rig_module/ai_container @@ -46,9 +46,23 @@ var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI. var/obj/item/ai_verbs/verb_holder +/mob + var/get_rig_stats = 0 + /obj/item/rig_module/ai_container/process() - if(integrated_ai && loc) - integrated_ai.SetupStat(loc.get_rig()) + if(integrated_ai) + var/obj/item/weapon/rig/rig = get_rig() + if(rig && rig.ai_override_enabled) + integrated_ai.get_rig_stats = 1 + else + integrated_ai.get_rig_stats = 0 + +/mob/living/Stat() + . = ..() + if(. && get_rig_stats) + var/obj/item/weapon/rig/rig = get_rig() + if(rig) + SetupStat(rig) /obj/item/rig_module/ai_container/proc/update_verb_holder() if(!verb_holder) @@ -158,7 +172,10 @@ if(integrated_ai) integrated_ai.ghostize() qdel(integrated_ai) - if(ai_card) qdel(ai_card) + integrated_ai = null + if(ai_card) + qdel(ai_card) + ai_card = null else if(user) user.put_in_hands(ai_card) else @@ -168,7 +185,6 @@ update_verb_holder() /obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user) - if(!ai) return // The ONLY THING all the different AI systems have in common is that they all store the mob inside an item. diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm index 81af43d9f4a..c33064b41c9 100644 --- a/code/modules/clothing/spacesuits/rig/modules/modules.dm +++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm @@ -227,21 +227,21 @@ return 0 /mob/living/carbon/human/Stat() - ..() + . = ..() - if(istype(back,/obj/item/weapon/rig)) + if(. && istype(back,/obj/item/weapon/rig)) var/obj/item/weapon/rig/R = back SetupStat(R) /mob/proc/SetupStat(var/obj/item/weapon/rig/R) - if(src == usr && R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) + if(R && !R.canremove && R.installed_modules.len && statpanel("Hardsuit Modules")) var/cell_status = R.cell ? "[R.cell.charge]/[R.cell.maxcharge]" : "ERROR" - statpanel("Hardsuit Modules", "Suit charge", cell_status) + stat("Suit charge", cell_status) for(var/obj/item/rig_module/module in R.installed_modules) { for(var/stat_rig_module/SRM in module.stat_modules) if(SRM.CanUse()) - statpanel("Hardsuit Modules",SRM.module.interface_name,SRM) + stat(SRM.module.interface_name,SRM) } /stat_rig_module diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm index c09f7d382d8..5d6b894cd5c 100644 --- a/code/modules/clothing/spacesuits/rig/rig.dm +++ b/code/modules/clothing/spacesuits/rig/rig.dm @@ -383,8 +383,7 @@ cell.use(cost*10) return 1 -/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - +/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/nano_state = inventory_state) if(!user) return @@ -454,7 +453,7 @@ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, data["ai"] ? contained_state : inventory_state) + ui = new(user, src, ui_key, ((src.loc != user) ? ai_interface_path : interface_path), interface_title, 480, 550, state = nano_state) ui.set_initial_data(data) ui.open() ui.set_auto_update(1) @@ -766,6 +765,7 @@ return 0 wearer.Move(null,dir)*/ +// This returns the rig if you are contained inside one, but not if you are wearing it /atom/proc/get_rig() if(loc) return loc.get_rig()