mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-24 17:11:22 +00:00
Replaces Subsystems (mostly) with internal computing device (#7798)
This is for robots.
This commit is contained in:
@@ -31,7 +31,7 @@
|
||||
else
|
||||
idle_threads.Remove(P)
|
||||
|
||||
working = hard_drive && processor_unit && damage < broken_damage && (apc_power(0) || battery_power(0))
|
||||
working = hard_drive && processor_unit && damage < broken_damage && computer_use_power()
|
||||
check_update_ui_need()
|
||||
|
||||
if (working && enabled && world.time > ambience_last_played + 30 SECONDS && prob(3))
|
||||
@@ -125,7 +125,7 @@
|
||||
else
|
||||
to_chat(user, "You press the power button, but the computer fails to boot up, displaying variety of errors before shutting down again.")
|
||||
return
|
||||
if(processor_unit && (apc_power(0) || battery_power(0))) // Battery-run and charged or non-battery but powered by APC.
|
||||
if(processor_unit && computer_use_power()) // Battery-run and charged or non-battery but powered by APC.
|
||||
if(issynth)
|
||||
to_chat(user, "You send an activation signal to \the [src], turning it on")
|
||||
else
|
||||
|
||||
@@ -38,6 +38,16 @@
|
||||
A.use_power(power_usage, EQUIP)
|
||||
return TRUE
|
||||
|
||||
|
||||
// Tries to use power in general (Abstraction)
|
||||
/obj/item/modular_computer/proc/computer_use_power(var/power_usage = 0)
|
||||
// First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails.
|
||||
if(apc_power(power_usage))
|
||||
return TRUE
|
||||
if(battery_power(power_usage))
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged
|
||||
/obj/item/modular_computer/proc/handle_power()
|
||||
var/power_usage = screen_on ? base_active_power_usage : base_idle_power_usage
|
||||
@@ -47,13 +57,8 @@
|
||||
power_usage += H.power_usage
|
||||
last_power_usage = power_usage
|
||||
|
||||
// First tries to charge from an APC, if APC is unavailable switches to battery power. If neither works the computer fails.
|
||||
if(apc_power(power_usage))
|
||||
if (power_has_failed)
|
||||
power_has_failed = FALSE
|
||||
update_icon()
|
||||
return
|
||||
if(battery_power(power_usage))
|
||||
|
||||
if(computer_use_power(power_usage))
|
||||
if (power_has_failed)
|
||||
power_has_failed = FALSE
|
||||
update_icon()
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
if(ui)
|
||||
ui.close()
|
||||
return
|
||||
if(!apc_power(0) && !battery_power(0))
|
||||
if(!computer_use_power())
|
||||
if(ui)
|
||||
ui.close()
|
||||
return
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
/obj/item/modular_computer/silicon
|
||||
name = "internal computing device"
|
||||
desc = "A synthetic computer."
|
||||
hardware_flag = PROGRAM_SILICON
|
||||
icon_state_unpowered = "laptop-open"
|
||||
icon = 'icons/obj/modular_laptop.dmi'
|
||||
icon_state = "laptop-open"
|
||||
icon_state_broken = "laptop-broken"
|
||||
base_idle_power_usage = 5
|
||||
base_active_power_usage = 25
|
||||
max_hardware_size = 2
|
||||
max_damage = 50
|
||||
w_class = 3
|
||||
var/mob/living/silicon/computer_host // Thing that contains this computer. Used for silicon computers
|
||||
|
||||
/obj/item/modular_computer/silicon/Initialize(mapload)
|
||||
. = ..()
|
||||
if(istype(loc, /mob/living/silicon))
|
||||
computer_host = loc
|
||||
else
|
||||
return
|
||||
// Let's remove integrated verbs for ejecting things.
|
||||
verbs -= /obj/item/modular_computer/verb/eject_ai
|
||||
verbs -= /obj/item/modular_computer/verb/eject_id
|
||||
verbs -= /obj/item/modular_computer/verb/eject_usb
|
||||
|
||||
/obj/item/modular_computer/silicon/computer_use_power(power_usage)
|
||||
// If we have host like AI, borg or pAI we handle there power
|
||||
if(computer_host)
|
||||
// If host is borg, we use power from it's cell, like anyone other module
|
||||
if(istype(computer_host, /mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/R = computer_host
|
||||
return R.cell_use_power(power_usage)
|
||||
// If we are in AI or pAI we just don't botherwith power use.
|
||||
return TRUE
|
||||
else
|
||||
// If we don't have host, then we let regular computer code handle power - like batteries and tesla coils
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/silicon/Destroy()
|
||||
computer_host = null
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/silicon/Click(location, control, params)
|
||||
if (!istype(usr, /mob/living/silicon) && host == usr)
|
||||
return attack_self(usr)
|
||||
return ..()
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/obj/item/modular_computer/silicon/preset
|
||||
enrolled = 2
|
||||
|
||||
/obj/item/modular_computer/silicon/preset/install_default_hardware()
|
||||
. = ..()
|
||||
processor_unit = new/obj/item/computer_hardware/processor_unit(src)
|
||||
hard_drive = new/obj/item/computer_hardware/hard_drive(src)
|
||||
network_card = new/obj/item/computer_hardware/network_card(src)
|
||||
|
||||
|
||||
/obj/item/modular_computer/silicon/preset/install_default_programs()
|
||||
hard_drive.store_file(new /datum/computer_file/program/filemanager())
|
||||
hard_drive.store_file(new /datum/computer_file/program/ntnetdownload())
|
||||
hard_drive.remove_file(hard_drive.find_file_by_name("clientmanager"))
|
||||
Reference in New Issue
Block a user