PACMAN Generator NanoUI

- Gives PACMAN type generators NanoUI, instead of the old UI
- Example screenshot: http://i.imgur.com/QhQEw1c.png (Red usually means it's bad. In this case, generator is operating at 10 power level, but maximal safe level is 4 (it's varedited to these values, normally it would be only 5/5). Overheats also give warnings (warning shown on screenshot is last warning which occurs approximately 20 seconds before explosion). Fuel is measured in cm3. For simplicity, 1 sheet = 1000cm3
This commit is contained in:
Atlantiscze
2015-02-12 06:09:42 +01:00
parent 01b8873b9d
commit 4c4411259a
2 changed files with 185 additions and 39 deletions

View File

@@ -84,9 +84,9 @@
//A power generator that runs on solid plasma sheets.
/obj/machinery/power/port_gen/pacman
name = "\improper P.A.C.M.A.N.-type Portable Generator"
desc = "A power generator that runs on solid plasma sheets. Rated for 80 kW max safe output."
desc = "A power generator that runs on solid phoron sheets. Rated for 80 kW max safe output."
var/sheet_name = "solid plasma sheet"
var/sheet_name = "Phoron Sheets"
var/sheet_path = /obj/item/stack/sheet/mineral/phoron
var/board_path = "/obj/item/weapon/circuitboard/pacman"
@@ -98,6 +98,7 @@
*/
power_gen = 20000 //Watts output per power_output level
var/max_power_output = 5 //The maximum power setting without emagging.
var/max_safe_output = 4 // For UI use, maximal output that won't cause overheat.
var/time_per_sheet = 96 //fuel efficiency - how long 1 sheet lasts at power level 1
var/max_sheets = 100 //max capacity of the hopper
var/max_temperature = 300 //max temperature before overheating increases
@@ -122,8 +123,6 @@
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new board_path(src)
var/obj/sheet = new sheet_path(null)
sheet_name = sheet.name
RefreshParts()
/obj/machinery/power/port_gen/pacman/Del()
@@ -150,7 +149,7 @@
/obj/machinery/power/port_gen/pacman/examine(mob/user)
..(user)
user << "\The [src] appears to be producing [power_gen*power_output] W."
user << "There are [sheets] [sheet_name]\s left in the hopper."
user << "There [sheets == 1 ? "is" : "are"] [sheets] sheet[sheets == 1 ? "" : "s"] left in the hopper."
if(IsBroken()) user << "<span class='warning'>\The [src] seems to have broken down.</span>"
if(overheating) user << "<span class='danger'>\The [src] is overheating!</span>"
@@ -236,6 +235,9 @@
temperature = max(temperature - temp_loss, cooling_temperature)
src.updateDialog()
if(overheating)
overheating--
/obj/machinery/power/port_gen/pacman/proc/overheat()
overheating++
if (overheating > 60)
@@ -261,7 +263,7 @@
if(amount < 1)
user << "\blue The [src.name] is full!"
return
user << "\blue You add [amount] [addstack.singular_name]\s to the [src.name]."
user << "\blue You add [amount] sheet[amount == 1 ? "" : "s"] to the [src.name]."
sheets += amount
addstack.use(amount)
updateUsrDialog()
@@ -305,11 +307,46 @@
..()
if (!anchored)
return
interact(user)
ui_interact(user)
/obj/machinery/power/port_gen/pacman/attack_ai(mob/user as mob)
interact(user)
ui_interact(user)
/obj/machinery/power/port_gen/pacman/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(IsBroken())
return
var/data[0]
data["active"] = active
if(istype(user, /mob/living/silicon/ai))
data["is_ai"] = 1
else if(istype(user, /mob/living/silicon/robot) && !Adjacent(user))
data["is_ai"] = 1
else
data["is_ai"] = 0
data["output_set"] = power_output
data["output_max"] = max_power_output
data["output_safe"] = max_safe_output
data["output_watts"] = power_output * power_gen
data["temperature_current"] = src.temperature
data["temperature_max"] = src.max_temperature
data["temperature_overheat"] = overheating
// 1 sheet = 1000cm3?
data["fuel_stored"] = round((sheets * 1000) + (sheet_left * 1000))
data["fuel_capacity"] = round(max_sheets * 1000, 0.1)
data["fuel_usage"] = active ? round((power_output / time_per_sheet) * 1000) : 0
data["fuel_type"] = sheet_name
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "pacman.tmpl", src.name, 500, 560)
ui.open()
ui.set_auto_update(1)
/*
/obj/machinery/power/port_gen/pacman/interact(mob/user)
if (get_dist(src, user) > 1 )
if (!istype(user, /mob/living/silicon/ai))
@@ -335,6 +372,7 @@
dat += "<br><A href='?src=\ref[src];action=close'>Close</A>"
user << browse("[dat]", "window=port_gen")
onclose(user, "port_gen")
*/
/obj/machinery/power/port_gen/pacman/Topic(href, href_list)
if(..())
@@ -346,33 +384,26 @@
if(!active && HasFuel() && !IsBroken())
active = 1
icon_state = "portgen1"
src.updateUsrDialog()
if(href_list["action"] == "disable")
if (active)
active = 0
icon_state = "portgen0"
src.updateUsrDialog()
if(href_list["action"] == "eject")
if(!active)
DropFuel()
src.updateUsrDialog()
if(href_list["action"] == "lower_power")
if (power_output > 1)
power_output--
src.updateUsrDialog()
if (href_list["action"] == "higher_power")
if (power_output < max_power_output || (emagged && power_output < round(max_power_output*2.5)))
power_output++
src.updateUsrDialog()
if (href_list["action"] == "close")
usr << browse(null, "window=port_gen")
usr.unset_machine()
/obj/machinery/power/port_gen/pacman/super
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output."
icon_state = "portgen1"
sheet_path = /obj/item/stack/sheet/mineral/uranium
sheet_name = "Uranium Sheets"
time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power
board_path = "/obj/item/weapon/circuitboard/pacman/super"
@@ -399,11 +430,13 @@
desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!"
icon_state = "portgen2"
sheet_path = /obj/item/stack/sheet/mineral/tritium
sheet_name = "Tritium Fuel Sheets"
//I don't think tritium has any other use, so we might as well make this rewarding for players
//max safe power output (power level = 8) is 200 kW and lasts for 1 hour - 3 or 4 of these could power the station
power_gen = 25000 //watts
max_power_output = 10
max_safe_output = 8
time_per_sheet = 576
max_temperature = 800
temperature_gain = 90

113
nano/templates/pacman.tmpl Normal file
View File

@@ -0,0 +1,113 @@
<h3>Status</h3>
<div class='item'>
<div class="itemLabel">
Generator Status:
</div>
<div class = "itemContent">
{{if data.active}}
<span class="good">Online</span>
{{else}}
<span class="average">Offline</span>
{{/if}}
</div>
<div class="itemLabel">
Generator Control:
</div>
<div class = "itemContent">
{{if data.active}}
{{:helper.link('STOP', 'power', {'action' : "disable"})}}
{{else}}
{{:helper.link('START', 'power', {'action' : "enable"})}}
{{/if}}
</div>
</div>
<h3>Fuel</h3>
<div class='item'>
<div class="itemLabel">
Fuel Type:
</div>
<div class="itemContent">
<span class="good">{{:data.fuel_type}}</span>
</div>
<div class="itemLabel">
Fuel Level:
</div>
<div class="itemContent">
{{if data.fuel_stored >= 5000}}
{{:helper.displayBar(data.fuel_stored, 0, data.fuel_capacity, 'good')}}
<br><span class="good">{{:data.fuel_stored}}/{{:data.fuel_capacity}} cm3</span>
{{else data.fuel_stored >= 1000}}
{{:helper.displayBar(data.fuel_stored, 0, data.fuel_capacity, 'average')}}
<br><span class="average">{{:data.fuel_stored}}/{{:data.fuel_capacity}} cm3</span>
{{else}}
{{:helper.displayBar(data.fuel_stored, 0, data.fuel_capacity, 'bad')}}
<br><span class="bad">{{:data.fuel_stored}}/{{:data.fuel_capacity}} cm3</span>
{{/if}}
</div>
<div class="itemLabel">
Fuel Usage:
</div>
<div class="itemContent">
<span class="good">{{:data.fuel_usage}} cm3/s</span>
</div>
{{if !data.is_ai}}
<div class="itemLabel">
Control:
</div>
<div class="itemContent">
{{:helper.link('EJECT FUEL', 'arrowupthick-1-s', {'action' : "eject"}, data.active ? 'disabled' : null)}}
</div>
{{/if}}
</div>
<h3>Output</h3>
<div class='item'>
<div class="itemLabel">
Power setting:
</div>
<div class="itemContent">
{{if data.output_set > data.output_safe}}
<span class="bad">{{:data.output_set}} / {{:data.output_max}} ({{:data.output_watts}} W)</span>
{{else}}
<span class="good">{{:data.output_set}} / {{:data.output_max}} ({{:data.output_watts}} W)</span>
{{/if}}
</div>
<div class="itemLabel">
Control:
</div>
<div class="itemContent">
{{:helper.link('+', null, {'action' : "higher_power"})}}
{{:helper.link('-', null, {'action' : "lower_power"})}}
</div>
</div>
<h3>Temperature</h3>
<div class='item'>
<div class="itemLabel">
Temperature:
</div>
<div class="itemContent">
{{if data.temperature_current < (data.temperature_max * 0.8)}}
{{:helper.displayBar(data.temperature_current, 0, (data.temperature_max * 1.5), 'good')}}
<br><span class="good">{{:data.temperature_current}} C</span>
{{else data.temperature_current < data.temperature_max}}
{{:helper.displayBar(data.temperature_current, 0, (data.temperature_max * 1.5), 'average')}}
<br><span class="average">{{:data.temperature_current}} C</span>
{{else}}
{{:helper.displayBar(data.temperature_current, 0, (data.temperature_max * 1.5), 'bad')}}
<br><span class="bad">{{:data.temperature_current}} C</span>
{{/if}}
</div>
<div class="itemLabel">
Generator Status:
</div>
<div class="itemContent">
{{if data.temperature_overheat > 50}}
<span class="bad">DANGER: CRITICAL OVERHEAT! Deactivate generator immediately!</span>
{{else data.temperature_overheat > 20}}
<span class="average">WARNING: Overheating!</span>
{{else data.temperature_overheat > 1}}
<span class="average">Temperature High</span>
{{else}}
<span class="good">Optimal</span>
{{/if}}
</div>
</div>