From 8496523a6cdbca9688384822cc4eedc806937c2e Mon Sep 17 00:00:00 2001 From: davipatury Date: Sat, 4 Mar 2017 18:40:16 -0300 Subject: [PATCH] Battery ETA --- .../computers/item/computer.dm | 2 +- .../computers/item/computer_power.dm | 12 +++++++++++ .../programs/generic/configurator.dm | 21 +++++++------------ .../hardware/battery_module.dm | 11 +++------- nano/templates/laptop_configuration.tmpl | 8 +++++-- 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/code/modules/modular_computers/computers/item/computer.dm b/code/modules/modular_computers/computers/item/computer.dm index cbdd46eb2b2..9f867692153 100644 --- a/code/modules/modular_computers/computers/item/computer.dm +++ b/code/modules/modular_computers/computers/item/computer.dm @@ -191,7 +191,7 @@ icon_state = icon_state_unpowered else icon_state = icon_state_powered - if(active_program) + if(active_program && active_program.program_state != PROGRAM_STATE_KILLED) overlays += active_program.program_icon_state ? active_program.program_icon_state : icon_state_menu else overlays += icon_state_menu diff --git a/code/modules/modular_computers/computers/item/computer_power.dm b/code/modules/modular_computers/computers/item/computer_power.dm index c5aab99ce57..8483e9c4fc6 100644 --- a/code/modules/modular_computers/computers/item/computer_power.dm +++ b/code/modules/modular_computers/computers/item/computer_power.dm @@ -56,6 +56,18 @@ power_failure() return FALSE +/obj/item/device/modular_computer/proc/get_power_eta() + var/obj/item/weapon/computer_hardware/battery/battery_module = all_components[MC_CELL] + if(battery_module && battery_module.battery) + var/hours = 0 + var/minutes = (battery_module.battery.charge) / (last_power_usage / 20) // 20 = obj processing interval + if(minutes > 60) + hours = minutes/60 + minutes = (hours - round(hours)) * 60 + var/seconds = (minutes - round(minutes)) * 60 + return list("hours" = hours, "minutes" = minutes, "seconds" = seconds) + return list() + // Used by child types if they have other power source than battery or recharger /obj/item/device/modular_computer/proc/check_power_override() return FALSE diff --git a/code/modules/modular_computers/file_system/programs/generic/configurator.dm b/code/modules/modular_computers/file_system/programs/generic/configurator.dm index e46b9e3d09c..154caa103e0 100644 --- a/code/modules/modular_computers/file_system/programs/generic/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/generic/configurator.dm @@ -12,7 +12,6 @@ size = 4 available_on_ntnet = 0 requires_ntnet = 0 - var/obj/item/device/modular_computer/movable = null /datum/computer_file/program/computerconfig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) @@ -25,32 +24,26 @@ ui.open() /datum/computer_file/program/computerconfig/ui_data(mob/user) - movable = computer - var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = movable.all_components[MC_HDD] - var/obj/item/weapon/computer_hardware/battery/battery_module = movable.all_components[MC_CELL] - if(!istype(movable)) - movable = null - - // No computer connection, we can't get data from that. - if(!movable) - return 0 + var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = computer.all_components[MC_HDD] + var/obj/item/weapon/computer_hardware/battery/battery_module = computer.all_components[MC_CELL] var/list/data = get_header_data() data["disk_size"] = hard_drive.max_capacity data["disk_used"] = hard_drive.used_capacity - data["power_usage"] = movable.last_power_usage + data["power_usage"] = computer.last_power_usage data["battery_exists"] = battery_module ? 1 : 0 if(battery_module && battery_module.battery) data["battery_rating"] = battery_module.battery.maxcharge data["battery_percent"] = round(battery_module.battery.percent()) + data["eta"] = computer.get_power_eta() if(battery_module && battery_module.battery) data["battery"] = list("max" = battery_module.battery.maxcharge, "charge" = round(battery_module.battery.charge)) var/list/all_entries[0] - for(var/I in movable.all_components) - var/obj/item/weapon/computer_hardware/H = movable.all_components[I] + for(var/I in computer.all_components) + var/obj/item/weapon/computer_hardware/H = computer.all_components[I] all_entries.Add(list(list( "name" = H.name, "desc" = H.desc, @@ -68,7 +61,7 @@ return switch(href_list["action"]) if("PC_toggle_component") - var/obj/item/weapon/computer_hardware/H = movable.find_hardware_by_name(href_list["name"]) + var/obj/item/weapon/computer_hardware/H = computer.find_hardware_by_name(href_list["name"]) if(H && istype(H)) H.enabled = !H.enabled . = TRUE diff --git a/code/modules/modular_computers/hardware/battery_module.dm b/code/modules/modular_computers/hardware/battery_module.dm index 562fb8c6cad..5ef74b74f4b 100644 --- a/code/modules/modular_computers/hardware/battery_module.dm +++ b/code/modules/modular_computers/hardware/battery_module.dm @@ -69,11 +69,7 @@ return FALSE - - - - - +// Stock parts /obj/item/weapon/stock_parts/cell/computer name = "standard battery" desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops." @@ -83,13 +79,11 @@ w_class = WEIGHT_CLASS_TINY maxcharge = 750 - /obj/item/weapon/stock_parts/cell/computer/advanced name = "advanced battery" desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices." icon_state = "cell" origin_tech = "powerstorage=2;engineering=2" - w_class = WEIGHT_CLASS_SMALL maxcharge = 1500 /obj/item/weapon/stock_parts/cell/computer/super @@ -97,17 +91,18 @@ desc = "An advanced power cell, often used in high-end laptops." icon_state = "cell" origin_tech = "powerstorage=3;engineering=3" - w_class = WEIGHT_CLASS_SMALL maxcharge = 2000 /obj/item/weapon/stock_parts/cell/computer/micro name = "micro battery" desc = "A small power cell, commonly seen in most portable microcomputers." icon_state = "cell_micro" + w_class = WEIGHT_CLASS_TINY maxcharge = 500 /obj/item/weapon/stock_parts/cell/computer/nano name = "nano battery" desc = "A tiny power cell, commonly seen in low-end portable microcomputers." icon_state = "cell_micro" + w_class = WEIGHT_CLASS_TINY maxcharge = 300 \ No newline at end of file diff --git a/nano/templates/laptop_configuration.tmpl b/nano/templates/laptop_configuration.tmpl index 07c499d7158..95dd315b90e 100644 --- a/nano/templates/laptop_configuration.tmpl +++ b/nano/templates/laptop_configuration.tmpl @@ -10,6 +10,10 @@
Battery Rating
{{:data.battery.max}}
+
+
ETA
+
{{:data.eta.hours ? helper.smoothRound(data.eta.hours) + "h " : ""}}{{:data.eta.minutes ? helper.smoothRound(data.eta.minutes) + "m " : ""}}{{:helper.smoothRound(data.eta.seconds)}}s
+
Battery Charge
{{:helper.displayBar(data.battery.charge, 0, data.battery.max, (data.battery.charge > data.battery.max/2) ? 'good' : (data.battery.charge > data.battery.max/4) ? 'average' : 'bad')}} @@ -29,7 +33,7 @@
{{:data.power_usage}}W
- +

File System

@@ -40,7 +44,7 @@
- +

Computer Components

{{for data.hardware}}