mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Moved an unchecked file into unused, please put any unchecked files out of WIP or FEA into unused that way if you see an unchecked file you know it should be checked. DM loves to uncheck files when you are messing around with folders in the editor. Moved the old TEG defines into the proper files. Commented out some old nonfunctioning FEA debug code. Removed some commented out codechunks from FEA and attempted to clean up a few of the files a bit. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3852 316c924e-a436-60f5-8080-3fe189b3f50e
165 lines
4.5 KiB
Plaintext
165 lines
4.5 KiB
Plaintext
// dummy generator object for testing
|
|
|
|
/*/obj/machinery/power/generator/verb/set_amount(var/g as num)
|
|
set src in view(1)
|
|
|
|
gen_amount = g
|
|
|
|
*/
|
|
/obj/machinery/power/generator
|
|
name = "thermoelectric generator"
|
|
desc = "It's a high efficiency thermoelectric generator."
|
|
icon_state = "teg"
|
|
anchored = 1
|
|
density = 1
|
|
|
|
var/obj/machinery/atmospherics/binary/circulator/circ1
|
|
var/obj/machinery/atmospherics/binary/circulator/circ2
|
|
|
|
var/lastgen = 0
|
|
var/lastgenlev = -1
|
|
|
|
|
|
New()
|
|
..()
|
|
|
|
spawn(5)
|
|
circ1 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,WEST)
|
|
circ2 = locate(/obj/machinery/atmospherics/binary/circulator) in get_step(src,EAST)
|
|
|
|
if(circ1)
|
|
circ1.side = 1
|
|
circ1.update_icon()
|
|
if(circ2)
|
|
circ2.side = 2
|
|
circ2.update_icon()
|
|
|
|
if(!circ1 || !circ2)
|
|
stat |= BROKEN
|
|
|
|
updateicon()
|
|
|
|
proc/updateicon()
|
|
|
|
if(stat & (NOPOWER|BROKEN))
|
|
overlays = null
|
|
else
|
|
overlays = null
|
|
|
|
if(lastgenlev != 0)
|
|
overlays += image('power.dmi', "teg-op[lastgenlev]")
|
|
|
|
#define GENRATE 800 // generator output coefficient from Q
|
|
|
|
process()
|
|
|
|
//world << "Generator process ran"
|
|
|
|
if(!circ1 || !circ2)
|
|
return
|
|
|
|
//world << "circ1 and circ2 pass"
|
|
|
|
var/datum/gas_mixture/cold_air = circ1.return_transfer_air()
|
|
var/datum/gas_mixture/hot_air = circ2.return_transfer_air()
|
|
|
|
lastgen = 0
|
|
|
|
//world << "hot_air = [hot_air]; cold_air = [cold_air];"
|
|
|
|
if(cold_air && hot_air)
|
|
|
|
//world << "hot_air = [hot_air] temperature = [hot_air.temperature]; cold_air = [cold_air] temperature = [hot_air.temperature];"
|
|
|
|
//world << "coldair and hotair pass"
|
|
var/cold_air_heat_capacity = cold_air.heat_capacity()
|
|
var/hot_air_heat_capacity = hot_air.heat_capacity()
|
|
|
|
var/delta_temperature = hot_air.temperature - cold_air.temperature
|
|
|
|
//world << "delta_temperature = [delta_temperature]; cold_air_heat_capacity = [cold_air_heat_capacity]; hot_air_heat_capacity = [hot_air_heat_capacity]"
|
|
|
|
if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0)
|
|
var/efficiency = 0.65
|
|
|
|
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
|
|
|
var/heat = energy_transfer*(1-efficiency)
|
|
lastgen = energy_transfer*efficiency
|
|
|
|
//world << "lastgen = [lastgen]; heat = [heat]; delta_temperature = [delta_temperature]; hot_air_heat_capacity = [hot_air_heat_capacity]; cold_air_heat_capacity = [cold_air_heat_capacity];"
|
|
|
|
hot_air.temperature = hot_air.temperature - energy_transfer/hot_air_heat_capacity
|
|
cold_air.temperature = cold_air.temperature + heat/cold_air_heat_capacity
|
|
|
|
world << "POWER: [lastgen] W generated at [efficiency*100]% efficiency and sinks sizes [cold_air_heat_capacity], [hot_air_heat_capacity]"
|
|
|
|
add_avail(lastgen)
|
|
// update icon overlays only if displayed level has changed
|
|
|
|
if(hot_air)
|
|
circ2.air2.merge(hot_air)
|
|
|
|
if(cold_air)
|
|
circ1.air2.merge(cold_air)
|
|
|
|
var/genlev = max(0, min( round(11*lastgen / 100000), 11))
|
|
if(genlev != lastgenlev)
|
|
lastgenlev = genlev
|
|
updateicon()
|
|
|
|
src.updateDialog()
|
|
|
|
attack_ai(mob/user)
|
|
if(stat & (BROKEN|NOPOWER)) return
|
|
interact(user)
|
|
|
|
|
|
attack_hand(mob/user)
|
|
add_fingerprint(user)
|
|
if(stat & (BROKEN|NOPOWER)) return
|
|
interact(user)
|
|
|
|
|
|
proc/interact(mob/user)
|
|
if ( (get_dist(src, user) > 1 ) && (!istype(user, /mob/living/silicon/ai)))
|
|
user.machine = null
|
|
user << browse(null, "window=teg")
|
|
return
|
|
|
|
user.machine = src
|
|
|
|
var/t = "<PRE><B>Thermo-Electric Generator</B><HR>"
|
|
|
|
t += "Output : [round(lastgen)] W<BR><BR>"
|
|
|
|
t += "<B>Cold loop</B><BR>"
|
|
t += "Temperature Inlet: [round(circ1.air1.temperature, 0.1)] K Outlet: [round(circ1.air2.temperature, 0.1)] K<BR>"
|
|
t += "Pressure Inlet: [round(circ1.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ1.air2.return_pressure(), 0.1)] kPa<BR>"
|
|
|
|
t += "<B>Hot loop</B><BR>"
|
|
t += "Temperature Inlet: [round(circ2.air1.temperature, 0.1)] K Outlet: [round(circ2.air2.temperature, 0.1)] K<BR>"
|
|
t += "Pressure Inlet: [round(circ2.air1.return_pressure(), 0.1)] kPa Outlet: [round(circ2.air2.return_pressure(), 0.1)] kPa<BR>"
|
|
|
|
t += "<BR><HR><A href='?src=\ref[src];close=1'>Close</A>"
|
|
|
|
t += "</PRE>"
|
|
user << browse(t, "window=teg;size=460x300")
|
|
onclose(user, "teg")
|
|
return 1
|
|
|
|
|
|
Topic(href, href_list)
|
|
..()
|
|
if( href_list["close"] )
|
|
usr << browse(null, "window=teg")
|
|
usr.machine = null
|
|
return 0
|
|
return 1
|
|
|
|
|
|
power_change()
|
|
..()
|
|
updateicon()
|
|
|