mirror of
https://github.com/KabKebab/GS13.git
synced 2026-07-20 04:17:45 +01:00
Improvements all around!
This commit is contained in:
File diff suppressed because it is too large
Load Diff
-11449
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"a" = (
|
||||
/obj/effect/turf_decal/stripes/red/corner{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"b" = (
|
||||
/obj/effect/turf_decal/stripes/red/line{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/arrows/white{
|
||||
dir = 8;
|
||||
pixel_x = 5;
|
||||
pixel_y = 10
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"c" = (
|
||||
/obj/effect/turf_decal/stripes/red/line{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"d" = (
|
||||
/obj/structure/cable/yellow,
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo,
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"e" = (
|
||||
/obj/effect/turf_decal/stripes/red/corner{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"f" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"g" = (
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/purple,
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"h" = (
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"s" = (
|
||||
/obj/effect/turf_decal/stripes/red/corner,
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"t" = (
|
||||
/obj/effect/turf_decal/stripes/red/line{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/arrows/white{
|
||||
dir = 8;
|
||||
pixel_x = 5;
|
||||
pixel_y = 10
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"B" = (
|
||||
/obj/effect/turf_decal/stripes/red/corner{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"G" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/cyan{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"M" = (
|
||||
/obj/effect/turf_decal/stripes/red/line,
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"O" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"P" = (
|
||||
/obj/effect/turf_decal/stripes/red/line{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"V" = (
|
||||
/obj/effect/turf_decal/stripes/red/line{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
"Y" = (
|
||||
/obj/structure/cable/yellow{
|
||||
icon_state = "0-2"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/purple,
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"Z" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/space)
|
||||
|
||||
(1,1,1) = {"
|
||||
s
|
||||
c
|
||||
O
|
||||
b
|
||||
a
|
||||
"}
|
||||
(2,1,1) = {"
|
||||
M
|
||||
h
|
||||
Z
|
||||
h
|
||||
V
|
||||
"}
|
||||
(3,1,1) = {"
|
||||
Y
|
||||
g
|
||||
d
|
||||
h
|
||||
V
|
||||
"}
|
||||
(4,1,1) = {"
|
||||
M
|
||||
h
|
||||
f
|
||||
h
|
||||
V
|
||||
"}
|
||||
(5,1,1) = {"
|
||||
B
|
||||
P
|
||||
G
|
||||
t
|
||||
e
|
||||
"}
|
||||
@@ -27,6 +27,10 @@
|
||||
/proc/radiation_pulse(atom/source, intensity, range_modifier, log=FALSE, can_contaminate=TRUE)
|
||||
if(!SSradiation.can_fire)
|
||||
return
|
||||
if(istype(get_turf(source), /turf/open/pool))
|
||||
var/turf/open/pool/PL = get_turf(source)
|
||||
if(PL.filled == TRUE)
|
||||
intensity *= 0.15
|
||||
var/area/A = get_area(source)
|
||||
var/atom/nested_loc = source.loc
|
||||
var/spawn_waves = TRUE
|
||||
|
||||
+5
-1
@@ -537,6 +537,10 @@
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
|
||||
|
||||
/atom/proc/rad_act(strength)
|
||||
if(istype(get_turf(src), /turf/open/pool))
|
||||
var/turf/open/pool/PL = get_turf(src)
|
||||
if(PL.filled == TRUE)
|
||||
strength *= 0.15
|
||||
SEND_SIGNAL(src, COMSIG_ATOM_RAD_ACT, strength)
|
||||
|
||||
/atom/proc/narsie_act()
|
||||
@@ -894,4 +898,4 @@ Proc for attack log creation, because really why not
|
||||
if(href_list["statpanel_item_click"])
|
||||
// first of all make sure we valid
|
||||
var/mouseparams = list2params(paramslist)
|
||||
usr_client.Click(src, loc, null, mouseparams)
|
||||
usr_client.Click(src, loc, null, mouseparams)
|
||||
|
||||
@@ -193,3 +193,28 @@
|
||||
contains = list(/obj/item/energy_harvester)
|
||||
crate_name = "energy harvesting module crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
|
||||
/datum/supply_pack/engine/fuel_rod
|
||||
name = "Uranium Fuel Rod crate"
|
||||
desc = "Two additional fuel rods for use in a reactor, requires CE access to open. Caution: Radioactive"
|
||||
cost = 4000
|
||||
cost = 3000
|
||||
access = ACCESS_CE
|
||||
contains = list(/obj/item/twohanded/required/fuel_rod,
|
||||
/obj/item/twohanded/required/fuel_rod)
|
||||
crate_name = "Uranium-235 Fuel Rod crate"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
dangerous = TRUE
|
||||
|
||||
/datum/supply_pack/engine/reactor
|
||||
name = "RMBK Nuclear Reactor Kit" // (not) a toy
|
||||
desc = "Contains a reactor beacon and 3 reactor consoles. Uranium rods not included."
|
||||
cost = 12000
|
||||
access = ACCESS_CE
|
||||
contains = list(/obj/item/survivalcapsule/reactor,
|
||||
/obj/machinery/computer/reactor/control_rods/cargo,
|
||||
/obj/machinery/computer/reactor/stats/cargo,
|
||||
/obj/machinery/computer/reactor/fuel_rods/cargo)
|
||||
crate_name = "Build Your Own Reactor Kit"
|
||||
crate_type = /obj/structure/closet/crate/secure/engineering
|
||||
dangerous = TRUE
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
// yes, I COULD make it a seperate object from the surv capsule but the code needed is indeticle soo...
|
||||
|
||||
/obj/item/survivalcapsule/reactor // the not-so-survival capsule
|
||||
name = "RMBK Reactor Beacon"
|
||||
desc = "A special bluespace beacon designed to implement a reactor into the hull of the ship that it is activated on."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "beacon"
|
||||
template_id = "reactor"
|
||||
@@ -0,0 +1,7 @@
|
||||
// yes, I COULD make it a seperate object from the surv capsule but the code needed is indeticle soo...
|
||||
|
||||
/datum/map_template/shelter/reactor
|
||||
name = "RBMK Reactor"
|
||||
shelter_id = "reactor"
|
||||
description = "A reactor core, coolant and moderator loop not included."
|
||||
mappath = "_maps/templates/reactor_1.dmm"
|
||||
@@ -0,0 +1,76 @@
|
||||
/obj/item/twohanded/required/fuel_rod/telecrystal
|
||||
name = "Telecrystal Fuel Rod"
|
||||
desc = "A disguised titanium sheathed rod containing several small slots infused with uranium dioxide. Permits the insertion of telecrystals to grow more. Fissiles much faster than its standard counterpart"
|
||||
icon_state = "telecrystal"
|
||||
fuel_power = 0.30 // twice as powerful as a normal rod, you're going to need some engineering autism if you plan to mass produce TC
|
||||
var/telecrystal_amount = 0 // amount of telecrystals inside the rod?
|
||||
var/max_telecrystal_amount = 8 // the max amount of TC that can be in the rod?
|
||||
var/grown = FALSE // has the rod fissiled enough for us to remove the grown TC?
|
||||
var/expended = FALSE // have we removed the TC already?
|
||||
var/multiplier = 3 // how much do we multiply the inserted TC by?
|
||||
|
||||
|
||||
/obj/item/twohanded/required/fuel_rod/telecrystal/deplete(amount=0.035)
|
||||
depletion += amount
|
||||
if(depletion >= 100)
|
||||
fuel_power = 0.60 // thrice as powerful as plutonium, you'll want to get this one out quick!
|
||||
name = "Exhausted Telecrystal Fuel Rod"
|
||||
desc = "A highly energetic, disguised titanium sheathed rod containing a number of slots filled with greatly expanded telecrystals which can be removed by hand. It's extremely efficient as nuclear fuel, but will cause the reaction to get out of control if not properly utilised."
|
||||
icon_state = "telecrystal_used"
|
||||
grown = TRUE
|
||||
else
|
||||
fuel_power = 0.30
|
||||
|
||||
/obj/item/twohanded/required/fuel_rod/telecrystal/attackby(obj/item/W, mob/user, params)
|
||||
var/obj/item/stack/telecrystal/M = W
|
||||
if(istype(M))
|
||||
if(depletion >= 10)
|
||||
to_chat(user, "<span class='warning'>The sample slots have sealed themselves shut, it's too late to add crystals now!</span>") // no cheesing in crystals at 100%
|
||||
return
|
||||
if(expended)
|
||||
to_chat(user, "<span class='warning'>\The [src]'s material slots have already been used.</span>")
|
||||
return
|
||||
|
||||
if(telecrystal_amount < max_telecrystal_amount)
|
||||
var/adding = 0
|
||||
if(M.amount <= max_telecrystal_amount - telecrystal_amount)
|
||||
adding = M.amount
|
||||
else
|
||||
adding = max_telecrystal_amount - telecrystal_amount
|
||||
adding = min((max_telecrystal_amount - telecrystal_amount), M.amount)
|
||||
M.amount -= adding
|
||||
telecrystal_amount += adding
|
||||
M.zero_amount()
|
||||
to_chat(user, "<span class='notice'>You insert [adding] telecrystals into \the [src].</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src]'s material slots are full!</span>")
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/twohanded/required/fuel_rod/telecrystal/attack_self(mob/user)
|
||||
if(expended)
|
||||
to_chat(user, "<span class='notice'>You have already removed the telecrystals from the [src].</span>")
|
||||
return
|
||||
|
||||
if(grown)
|
||||
var/profit = round(telecrystal_amount * multiplier, 1)
|
||||
to_chat(user, "<span class='notice'>You remove [profit] telecrystals from the [src].</span>")
|
||||
var/obj/item/stack/telecrystal/tc = new(get_turf(src))
|
||||
tc.amount = profit
|
||||
expended = TRUE
|
||||
telecrystal_amount = 0
|
||||
return
|
||||
|
||||
else
|
||||
to_chat(user, "<span class='warning'>\The [src] has not fissiled enough to fully grow the sample. The progress bar shows it is [min(depletion / 40 * 100, 100)]% complete.</span>")
|
||||
|
||||
/obj/item/twohanded/required/fuel_rod/telecrystal/examine(mob/user)
|
||||
. = ..()
|
||||
if(expended)
|
||||
. += "<span class='warning'>The material slots have been slagged by the extreme heat, you can't grow crystals in this rod again...</span>"
|
||||
return
|
||||
if(depletion)
|
||||
. += "<span class='danger'>The sample is [min(depletion / 40 * 100, 100)]% fissiled.</span>"
|
||||
|
||||
. += "<span class='disarm'>[telecrystal_amount]/[max_telecrystal_amount] of the telecrystal slots are full.</span>"
|
||||
+66
-9
@@ -95,7 +95,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
var/next_slowprocess = 0
|
||||
var/gas_absorption_effectiveness = 0.5
|
||||
var/gas_absorption_constant = 0.5 //We refer to this one as it's set on init, randomized.
|
||||
var/minimum_coolant_level = 5
|
||||
var/minimum_coolant_level = 4
|
||||
var/warning = FALSE //Have we begun warning the crew of their impending death?
|
||||
var/next_warning = 0 //To avoid spam.
|
||||
var/last_power_produced = 0 //For logging purposes
|
||||
@@ -106,6 +106,9 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
var/last_coolant_temperature = 0
|
||||
var/last_output_temperature = 0
|
||||
var/last_heat_delta = 0 //For administrative cheating only. Knowing the delta lets you know EXACTLY what to set K at.
|
||||
var/last_user = null
|
||||
var/current_desired_k = null
|
||||
var/datum/powernet/powernet = null
|
||||
|
||||
//Use this in your maps if you want everything to be preset.
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/preset
|
||||
@@ -133,7 +136,6 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
. += msg
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/attackby(obj/item/W, mob/user, params)
|
||||
..()
|
||||
if(istype(W, /obj/item/twohanded/required/fuel_rod))
|
||||
if(power >= 20)
|
||||
to_chat(user, "<span class='notice'>You cannot insert fuel into [src] when it has been raised above 20% power.</span>")
|
||||
@@ -146,9 +148,12 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
if(do_after(user, 5 SECONDS, target=src))
|
||||
if(!fuel_rods.len)
|
||||
start_up() //That was the first fuel rod. Let's heat it up.
|
||||
message_admins("Reactor first started up by [ADMIN_LOOKUPFLW(user)] in [ADMIN_VERBOSEJMP(src)]")
|
||||
investigate_log("Reactor first started by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO)
|
||||
fuel_rods += W
|
||||
W.forceMove(src)
|
||||
radiation_pulse(src, temperature) //Wear protective equipment when even breathing near a reactor!
|
||||
investigate_log("Rod added to reactor by [key_name(user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO)
|
||||
return TRUE
|
||||
if(istype(W, /obj/item/sealant))
|
||||
if(power >= 20)
|
||||
@@ -166,6 +171,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
vessel_integrity += 10
|
||||
vessel_integrity = CLAMP(vessel_integrity, 0, initial(vessel_integrity))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/welder_act(mob/living/user, obj/item/I)
|
||||
if(power >= 20)
|
||||
@@ -185,6 +191,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
for(var/I=0;I<5;I++){
|
||||
fuel_rods += new /obj/item/twohanded/required/fuel_rod(src)
|
||||
}
|
||||
message_admins("Reactor started up by admins in [ADMIN_VERBOSEJMP(src)]")
|
||||
start_up()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/deplete()
|
||||
@@ -194,6 +201,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/Initialize()
|
||||
. = ..()
|
||||
connect_to_network()
|
||||
icon_state = "reactor_off"
|
||||
gas_absorption_effectiveness = rand(5, 6)/10 //All reactors are slightly different. This will result in you having to figure out what the balance is for K.
|
||||
gas_absorption_constant = gas_absorption_effectiveness //And set this up for the rest of the round.
|
||||
@@ -237,6 +245,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
vessel_integrity -= temperature / 200 //Think fast loser.
|
||||
take_damage(10) //Just for the sound effect, to let you know you've fucked up.
|
||||
color = "[COLOR_RED]"
|
||||
investigate_log("Reactor taking damage from the lack of coolant", INVESTIGATE_SINGULO)
|
||||
//Now, heat up the output and set our pressure.
|
||||
coolant_output.temperature = CELSIUS_TO_KELVIN(temperature) //Heat the coolant output gas that we just had pass through us.
|
||||
last_output_temperature = KELVIN_TO_CELSIUS(coolant_output.return_temperature())
|
||||
@@ -260,9 +269,12 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
coolant_output.gases[/datum/gas/nitryl] += total_fuel_moles/50 //Shove out nitryl into the air when it's fuelled. You need to filter this off, or you're gonna have a bad time.
|
||||
var/obj/structure/cable/C = T.get_cable_node()
|
||||
if(!C || !C.powernet)
|
||||
//message_admins("No cable or cable has no powernet!")
|
||||
return
|
||||
else
|
||||
C.powernet.newavail += last_power_produced
|
||||
//C.powernet.newavail += last_power_produced //hacky wtf
|
||||
//message_admins("Adding [last_power_produced] to powernet.")
|
||||
add_avail(last_power_produced)
|
||||
var/total_control_moles = moderator_input.gases[/datum/gas/nitrogen] + (moderator_input.gases[/datum/gas/carbon_dioxide]*2) + (moderator_input.gases[/datum/gas/pluoxium]*3) //N2 helps you control the reaction at the cost of making it absolutely blast you with rads. Pluoxium has the same effect but without the rads!
|
||||
if(total_control_moles >= minimum_coolant_level)
|
||||
var/control_bonus = total_control_moles / 250 //1 mol of n2 -> 0.002 bonus control rod effectiveness, if you want a super controlled reaction, you'll have to sacrifice some power.
|
||||
@@ -294,12 +306,17 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
difference = CLAMP(difference, 0, control_rod_effectiveness) //And we can't instantly zap the K to what we want, so let's zap as much of it as we can manage....
|
||||
if(difference > fuel_power && desired_k > K)
|
||||
message_admins("Not enough fuel to get [difference]. We have fuel [fuel_power]")
|
||||
investigate_log("Reactor has not enough fuel to get [difference]. We have fuel [fuel_power]", INVESTIGATE_SINGULO)
|
||||
difference = fuel_power //Again, to stop you being able to run off of 1 fuel rod.
|
||||
if(K != desired_k)
|
||||
if(desired_k > K)
|
||||
K += difference
|
||||
else if(desired_k < K)
|
||||
K -= difference
|
||||
if(K == desired_k && last_user && current_desired_k != desired_k)
|
||||
current_desired_k = desired_k
|
||||
message_admins("Reactor desired criticality set to [desired_k] by [ADMIN_LOOKUPFLW(last_user)] in [ADMIN_VERBOSEJMP(src)]")
|
||||
investigate_log("reactor desired criticality set to [desired_k] by [key_name(last_user)] at [AREACOORD(src)]", INVESTIGATE_SINGULO)
|
||||
|
||||
K = CLAMP(K, 0, RBMK_MAX_CRITICALITY)
|
||||
if(has_fuel())
|
||||
@@ -314,6 +331,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
for(var/obj/machinery/light/L in GLOB.machines)
|
||||
if(prob(25) && L.z == z) //If youre running the reactor cold though, no need to flicker the lights.
|
||||
L.flicker()
|
||||
investigate_log("Reactor overloading at [power]% power", INVESTIGATE_SINGULO)
|
||||
for(var/atom/movable/I in get_turf(src))
|
||||
if(isliving(I))
|
||||
var/mob/living/L = I
|
||||
@@ -349,8 +367,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/relay(var/sound, var/message=null, loop = FALSE, channel = null) //Sends a sound + text message to the crew of a ship
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(M.z == z)
|
||||
var/area/A = get_area(M)
|
||||
if(A != subtypesof(/area/space))
|
||||
if(!isinspace(M))
|
||||
if(sound)
|
||||
if(channel) //Doing this forbids overlapping of sounds
|
||||
SEND_SOUND(M, sound(sound, repeat = loop, wait = 0, volume = 100, channel = channel))
|
||||
@@ -372,9 +389,12 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
//First alert condition: Overheat
|
||||
if(temperature >= RBMK_TEMPERATURE_CRITICAL)
|
||||
alert = TRUE
|
||||
investigate_log("Reactor reaching critical temperature at [temperature] C with desired criticality at [desired_k]", INVESTIGATE_SINGULO)
|
||||
message_admins("Reactor reaching critical temperature at [ADMIN_VERBOSEJMP(src)]")
|
||||
if(temperature >= RBMK_TEMPERATURE_MELTDOWN)
|
||||
vessel_integrity -= (temperature / 100)
|
||||
if(vessel_integrity <= temperature/100) //It wouldn't be able to tank another hit.
|
||||
investigate_log("Reactor melted down at [temperature] C with desired criticality at [desired_k]", INVESTIGATE_SINGULO)
|
||||
meltdown() //Oops! All meltdown
|
||||
return
|
||||
else
|
||||
@@ -387,12 +407,15 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
//Second alert condition: Overpressurized (the more lethal one)
|
||||
if(pressure >= RBMK_PRESSURE_CRITICAL)
|
||||
alert = TRUE
|
||||
investigate_log("Reactor reaching critical pressure at [pressure] PSI with desired criticality at [desired_k]", INVESTIGATE_SINGULO)
|
||||
message_admins("Reactor reaching critical pressure at [ADMIN_VERBOSEJMP(src)]")
|
||||
shake_animation(0.5)
|
||||
playsound(loc, 'sound/machines/clockcult/steam_whoosh.ogg', 100, TRUE)
|
||||
var/turf/T = get_turf(src)
|
||||
T.atmos_spawn_air("water_vapor=[pressure/100];TEMP=[CELSIUS_TO_KELVIN(temperature)]")
|
||||
vessel_integrity -= (pressure/100)
|
||||
if(vessel_integrity <= pressure/100) //It wouldn't be able to tank another hit.
|
||||
investigate_log("Reactor blowout at [pressure] PSI with desired criticality at [desired_k]", INVESTIGATE_SINGULO)
|
||||
blowout()
|
||||
return
|
||||
if(warning)
|
||||
@@ -420,6 +443,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
set waitfor = FALSE
|
||||
SSair.atmos_machinery -= src //Annd we're now just a useless brick.
|
||||
slagged = TRUE
|
||||
color = null
|
||||
update_icon()
|
||||
STOP_PROCESSING(SSmachines, src)
|
||||
icon_state = "reactor_slagged"
|
||||
@@ -482,6 +506,11 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
set_light(10)
|
||||
var/startup_sound = pick('hyperstation/sound/effects/ship/reactor/startup.ogg', 'hyperstation/sound/effects/ship/reactor/startup2.ogg')
|
||||
playsound(loc, startup_sound, 100)
|
||||
if(!powernet)
|
||||
message_admins("No powernet for the Nuclear Reactor! Trying to add.")
|
||||
connect_to_network()
|
||||
if(!powernet)
|
||||
message_admins("Powernet add fail. This reactor will never produce power.")
|
||||
|
||||
//Shuts off the fuel rods, ambience, etc. Keep in mind that your temperature may still go up!
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/shut_down()
|
||||
@@ -493,8 +522,8 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
update_icon()
|
||||
|
||||
/obj/item/twohanded/required/fuel_rod
|
||||
name = "Uranium-238 Fuel Rod"
|
||||
desc = "A titanium sheathed rod containing a measure of enriched uranium-dioxide powder, used to kick off a fission reaction."
|
||||
name = "Uranium-235 Fuel Rod"
|
||||
desc = "A titanium sheathed rod containing a measure of enriched uranium-dioxide powder inside, and a breeding blanket of uranium-238 around it, used to kick off a fission reaction and breed plutonium fuel respectivly."
|
||||
icon = 'hyperstation/icons/obj/control_rod.dmi'
|
||||
icon_state = "irradiated"
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
@@ -506,7 +535,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
if(depletion >= 100)
|
||||
fuel_power = 0.20
|
||||
name = "Plutonium-239 Fuel Rod"
|
||||
desc = "A highly energetic titanium sheathed rod containing a sizeable measure of weapons grade uranium, it's highly efficient as nuclear fuel, but will cause the reaction to get out of control if not properly utilised."
|
||||
desc = "A highly energetic titanium sheathed rod containing a sizeable measure of weapons grade plutonium, it's highly efficient as nuclear fuel, but will cause the reaction to get out of control if not properly utilised."
|
||||
icon_state = "inferior"
|
||||
AddComponent(/datum/component/radioactive, 1500 , src)
|
||||
else
|
||||
@@ -553,7 +582,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
/obj/machinery/computer/reactor/control_rods/ui_interact(mob/user, ui_key, datum/tgui/ui, force_open, datum/tgui/master_ui, datum/ui_state/state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "RbmkControlRods", name, 300, 300, master_ui, state)
|
||||
ui = new(user, src, ui_key, "rbmkcontrolrods", name, 300, 300, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/reactor/control_rods/ui_act(action, params)
|
||||
@@ -563,6 +592,7 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
return
|
||||
if(action == "input")
|
||||
var/input = text2num(params["target"])
|
||||
reactor.last_user = usr
|
||||
reactor.desired_k = CLAMP(input, 0, 3)
|
||||
|
||||
/obj/machinery/computer/reactor/control_rods/ui_data(mob/user)
|
||||
@@ -948,3 +978,30 @@ The reactor CHEWS through moderator. It does not do this slowly. Be very careful
|
||||
|
||||
/area/engine/engineering/reactor_control
|
||||
name = "Reactor Control Room"
|
||||
|
||||
|
||||
//Procs shamelessly taken from machinery/power
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/connect_to_network()
|
||||
var/turf/T = src.loc
|
||||
if(!T || !istype(T))
|
||||
return FALSE
|
||||
|
||||
var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked
|
||||
if(!C || !C.powernet)
|
||||
return FALSE
|
||||
|
||||
C.powernet.add_machine(src)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/disconnect_from_network()
|
||||
if(!powernet)
|
||||
return FALSE
|
||||
powernet.remove_machine(src)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/proc/add_avail(amount)
|
||||
if(powernet)
|
||||
powernet.newavail += amount
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
@@ -0,0 +1,31 @@
|
||||
// modular shitcode but it works:tm:
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/multitool_act(mob/living/user, obj/item/multitool/I)
|
||||
if(istype(I))
|
||||
to_chat(user, "<span class='notice'>You add \the [src]'s ID into the multitool's buffer.</span>")
|
||||
I.buffer = src.id
|
||||
return TRUE
|
||||
/obj/machinery/computer/reactor/multitool_act(mob/living/user, obj/item/multitool/I)
|
||||
if(istype(I))
|
||||
to_chat(user, "<span class='notice'>You add the reactor's ID to \the [src]>")
|
||||
src.id = I.buffer
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo // easier on the brain
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/nuclear_reactor/cargo/New()
|
||||
id = rand(1, 1000000) // cmon, what are the chances?
|
||||
|
||||
// Cargo varients can be wrenched down and don't start linked to the default RMBK reactor
|
||||
|
||||
/obj/machinery/computer/reactor/control_rods/cargo
|
||||
anchored = FALSE
|
||||
id = null
|
||||
|
||||
/obj/machinery/computer/reactor/stats/cargo
|
||||
anchored = FALSE
|
||||
id = null
|
||||
|
||||
/obj/machinery/computer/reactor/fuel_rods/cargo
|
||||
anchored = FALSE
|
||||
id = null
|
||||
@@ -0,0 +1,8 @@
|
||||
/datum/uplink_item/device_tools/tc_rod
|
||||
name = "Telecrystal Fuel Rod"
|
||||
desc = "This special fuel rod has eight material slots that can be inserted with telecrystals, \
|
||||
once the rod has been fully depleted, you will be able to harvest the extra telecrystals. \
|
||||
Please note: This Rod fissiles much faster than it's regular counterpart, it doesn't take \
|
||||
much to overload the reactor with these..."
|
||||
item = /obj/item/twohanded/required/fuel_rod/telecrystal
|
||||
cost = 7
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 844 B After Width: | Height: | Size: 1.1 KiB |
+6
-1
@@ -3087,7 +3087,11 @@
|
||||
#include "hyperstation\code\modules\integrated_electronics\input.dm"
|
||||
#include "hyperstation\code\modules\mob\mob_helpers.dm"
|
||||
#include "hyperstation\code\modules\patreon\patreon.dm"
|
||||
#include "hyperstation\code\modules\power\rbmk.dm"
|
||||
#include "hyperstation\code\modules\power\reactor\rbmk.dm"
|
||||
#include "hyperstation\code\modules\power\reactor\reactor_cargo.dm"
|
||||
#include "hyperstation\code\modules\power\reactor\fuel_rods.dm"
|
||||
#include "hyperstation\code\modules\mining\shelters.dm"
|
||||
#include "hyperstation\code\modules\mining\equipment\survival_pod.dm"
|
||||
#include "hyperstation\code\modules\reagents\chemistry\reagents\food_reagents.dm"
|
||||
#include "hyperstation\code\modules\reagents\chemistry\reagents\hydroponics_reactions.dm"
|
||||
#include "hyperstation\code\modules\resize\resize_action.dm"
|
||||
@@ -3095,6 +3099,7 @@
|
||||
#include "hyperstation\code\modules\resize\sizechems.dm"
|
||||
#include "hyperstation\code\modules\resize\sizegun.dm"
|
||||
#include "hyperstation\code\modules\surgery\organs\augments_arms.dm"
|
||||
#include "hyperstation\code\modules\uplink\uplink_items.dm"
|
||||
#include "hyperstation\code\obj\ashtray.dm"
|
||||
#include "hyperstation\code\obj\bluespace sewing kit.dm"
|
||||
#include "hyperstation\code\obj\condom.dm"
|
||||
|
||||
@@ -4,88 +4,87 @@ import { toFixed } from 'common/math';
|
||||
import { pureComponentHooks } from 'common/react';
|
||||
import { Component, Fragment } from 'inferno';
|
||||
import { Box, Button, Chart, ColorBox, Flex, Icon, LabeledList, ProgressBar, Section, Table } from '../components';
|
||||
import { NtosWindow } from '../layouts';
|
||||
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
|
||||
export const NtosRbmkStats = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
|
||||
export const NtosRbmkStats = props => {
|
||||
const { state } = props;
|
||||
const { act, data } = useBackend(props);
|
||||
const powerData = data.powerData.map((value, i) => [i, value]);
|
||||
const psiData = data.psiData.map((value, i) => [i, value]);
|
||||
const tempInputData = data.tempInputData.map((value, i) => [i, value]);
|
||||
const tempOutputdata = data.tempOutputdata.map((value, i) => [i, value]);
|
||||
return (
|
||||
<NtosWindow resizable>
|
||||
<NtosWindow.Content>
|
||||
|
||||
<Section title="Legend:" buttons={
|
||||
<Button
|
||||
icon="search"
|
||||
onClick={() => act('swap_reactor')}
|
||||
content="Change Reactor" />
|
||||
}>
|
||||
Reactor Power (%):
|
||||
<ProgressBar
|
||||
value={data.power}
|
||||
minValue={0}
|
||||
maxValue={100}
|
||||
color="yellow" />
|
||||
<br />
|
||||
Reactor Pressure (PSI):
|
||||
<ProgressBar
|
||||
value={data.psi}
|
||||
minValue={0}
|
||||
maxValue={2000}
|
||||
color="white" >
|
||||
{data.psi} PSI
|
||||
</ProgressBar>
|
||||
Coolant temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantInput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="blue">
|
||||
{data.coolantInput} °C
|
||||
</ProgressBar>
|
||||
Outlet temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantOutput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="bad">
|
||||
{data.coolantOutput} °C
|
||||
</ProgressBar>
|
||||
</Section>
|
||||
<Section title="Reactor Statistics:" height="200px">
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={powerData}
|
||||
rangeX={[0, powerData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255, 215,0, 1)"
|
||||
fillColor="rgba(255, 215, 0, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={psiData}
|
||||
rangeX={[0, psiData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255,250,250, 1)"
|
||||
fillColor="rgba(255,250,250, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempInputData}
|
||||
rangeX={[0, tempInputData.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(127, 179, 255 , 1)"
|
||||
fillColor="rgba(127, 179, 255 , 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempOutputdata}
|
||||
rangeX={[0, tempOutputdata.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(255, 0, 0 , 1)"
|
||||
fillColor="rgba(255, 0, 0 , 0.1)" />
|
||||
</Section>
|
||||
</NtosWindow.Content>
|
||||
</NtosWindow>
|
||||
<Section title="Reactor Management">
|
||||
<Section title="Legend:" buttons={
|
||||
<Button
|
||||
icon="search"
|
||||
onClick={() => act('swap_reactor')}
|
||||
content="Change Reactor" />
|
||||
}>
|
||||
Reactor Power (%):
|
||||
<ProgressBar
|
||||
value={data.power}
|
||||
minValue={0}
|
||||
maxValue={100}
|
||||
color="yellow" />
|
||||
<br />
|
||||
Reactor Pressure (PSI):
|
||||
<ProgressBar
|
||||
value={data.psi}
|
||||
minValue={0}
|
||||
maxValue={2000}
|
||||
color="white" >
|
||||
{data.psi} PSI
|
||||
</ProgressBar>
|
||||
Coolant temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantInput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="blue">
|
||||
{data.coolantInput} °C
|
||||
</ProgressBar>
|
||||
Outlet temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantOutput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="bad">
|
||||
{data.coolantOutput} °C
|
||||
</ProgressBar>
|
||||
</Section>
|
||||
<Section title="Reactor Statistics:" height="200px">
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={powerData}
|
||||
rangeX={[0, powerData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255, 215,0, 1)"
|
||||
fillColor="rgba(255, 215, 0, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={psiData}
|
||||
rangeX={[0, psiData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255,250,250, 1)"
|
||||
fillColor="rgba(255,250,250, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempInputData}
|
||||
rangeX={[0, tempInputData.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(127, 179, 255 , 1)"
|
||||
fillColor="rgba(127, 179, 255 , 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempOutputdata}
|
||||
rangeX={[0, tempOutputdata.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(255, 0, 0 , 1)"
|
||||
fillColor="rgba(255, 0, 0 , 0.1)" />
|
||||
</Section>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -1,52 +1,53 @@
|
||||
import { Fragment } from 'inferno';
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
import { Section, ProgressBar, Slider } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { Section, ProgressBar, LabeledList, NumberInput } from '../components';
|
||||
|
||||
export const RbmkControlRods = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const RbmkControlRods = props => {
|
||||
const { state } = props;
|
||||
const { act, data } = useBackend(props);
|
||||
const control_rods = data.control_rods;
|
||||
const k = data.k;
|
||||
const desiredK = data.desiredK;
|
||||
return (
|
||||
<Window resizable theme="ntos">
|
||||
<Window.Content>
|
||||
<Section title="Control Rod Management:">
|
||||
Control Rod Insertion:
|
||||
<ProgressBar
|
||||
value={(control_rods / 100 * 100) * 0.01}
|
||||
ranges={{
|
||||
good: [0.7, Infinity],
|
||||
average: [0.4, 0.7],
|
||||
bad: [-Infinity, 0.4],
|
||||
}} />
|
||||
<br />
|
||||
Neutrons per generation (K):
|
||||
<br />
|
||||
<ProgressBar
|
||||
value={(k / 3 * 100) * 0.01}
|
||||
ranges={{
|
||||
good: [-Infinity, 0.4],
|
||||
average: [0.4, 0.6],
|
||||
bad: [0.6, Infinity],
|
||||
}}>
|
||||
{k}
|
||||
</ProgressBar>
|
||||
<br />
|
||||
Target criticality:
|
||||
<br />
|
||||
<Slider
|
||||
<Section title="Control Rod Management:">
|
||||
Control Rod Insertion:
|
||||
<ProgressBar
|
||||
value={(control_rods / 100 * 100) * 0.01}
|
||||
ranges={{
|
||||
good: [0.7, Infinity],
|
||||
average: [0.4, 0.7],
|
||||
bad: [-Infinity, 0.4],
|
||||
}} />
|
||||
<br />
|
||||
Neutrons per generation (K):
|
||||
<br />
|
||||
<ProgressBar
|
||||
value={(k / 3 * 100) * 0.01}
|
||||
ranges={{
|
||||
good: [-Infinity, 0.4],
|
||||
average: [0.4, 0.6],
|
||||
bad: [0.6, Infinity],
|
||||
}}>
|
||||
{k}
|
||||
</ProgressBar>
|
||||
<br />
|
||||
Target criticality:
|
||||
<br />
|
||||
<LabeledList>
|
||||
<LabeledList.Item label="Target">
|
||||
<NumberInput
|
||||
animated
|
||||
value={desiredK}
|
||||
fillValue={k}
|
||||
unit="k"
|
||||
width="125px"
|
||||
minValue={0}
|
||||
maxValue={3}
|
||||
step={0.1}
|
||||
stepPixelSize={5}
|
||||
onDrag={(e, value) => act('input', {
|
||||
onChange={(e, value) => act('input', {
|
||||
target: value,
|
||||
})} />
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -4,82 +4,80 @@ import { toFixed } from 'common/math';
|
||||
import { pureComponentHooks } from 'common/react';
|
||||
import { Component, Fragment } from 'inferno';
|
||||
import { Box, Button, Chart, ColorBox, Flex, Icon, LabeledList, ProgressBar, Section, Table } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { useBackend, useLocalState } from '../backend';
|
||||
|
||||
export const RbmkStats = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const RbmkStats = props => {
|
||||
const { state } = props;
|
||||
const { act, data } = useBackend(props);
|
||||
const powerData = data.powerData.map((value, i) => [i, value]);
|
||||
const psiData = data.psiData.map((value, i) => [i, value]);
|
||||
const tempInputData = data.tempInputData.map((value, i) => [i, value]);
|
||||
const tempOutputdata = data.tempOutputdata.map((value, i) => [i, value]);
|
||||
return (
|
||||
<Window resizable theme="ntos">
|
||||
<Window.Content>
|
||||
<Section title="Legend:">
|
||||
Reactor Power (%):
|
||||
<ProgressBar
|
||||
value={data.power}
|
||||
minValue={0}
|
||||
maxValue={100}
|
||||
color="yellow" />
|
||||
<br />
|
||||
Reactor Pressure (PSI):
|
||||
<ProgressBar
|
||||
value={data.psi}
|
||||
minValue={0}
|
||||
maxValue={2000}
|
||||
color="white" >
|
||||
{data.psi} PSI
|
||||
</ProgressBar>
|
||||
Coolant temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantInput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="blue">
|
||||
{data.coolantInput} °C
|
||||
</ProgressBar>
|
||||
Outlet temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantOutput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="bad">
|
||||
{data.coolantOutput} °C
|
||||
</ProgressBar>
|
||||
</Section>
|
||||
<Section title="Reactor Statistics:" height="200px">
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={powerData}
|
||||
rangeX={[0, powerData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255, 215,0, 1)"
|
||||
fillColor="rgba(255, 215, 0, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={psiData}
|
||||
rangeX={[0, psiData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255,250,250, 1)"
|
||||
fillColor="rgba(255,250,250, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempInputData}
|
||||
rangeX={[0, tempInputData.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(127, 179, 255 , 1)"
|
||||
fillColor="rgba(127, 179, 255 , 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempOutputdata}
|
||||
rangeX={[0, tempOutputdata.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(255, 0, 0 , 1)"
|
||||
fillColor="rgba(255, 0, 0 , 0.1)" />
|
||||
</Section>
|
||||
</Window.Content>
|
||||
</Window>
|
||||
<Section title="RBMK Stats:">
|
||||
<Section title="Legend:">
|
||||
Reactor Power (%):
|
||||
<ProgressBar
|
||||
value={data.power}
|
||||
minValue={0}
|
||||
maxValue={100}
|
||||
color="yellow" />
|
||||
<br />
|
||||
Reactor Pressure (PSI):
|
||||
<ProgressBar
|
||||
value={data.psi}
|
||||
minValue={0}
|
||||
maxValue={2000}
|
||||
color="white" >
|
||||
{data.psi} PSI
|
||||
</ProgressBar>
|
||||
Coolant temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantInput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="blue">
|
||||
{data.coolantInput} °C
|
||||
</ProgressBar>
|
||||
Outlet temperature (°C):
|
||||
<ProgressBar
|
||||
value={data.coolantOutput}
|
||||
minValue={-273.15}
|
||||
maxValue={1227}
|
||||
color="bad">
|
||||
{data.coolantOutput} °C
|
||||
</ProgressBar>
|
||||
</Section>
|
||||
<Section title="Reactor Statistics:" height="200px">
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={powerData}
|
||||
rangeX={[0, powerData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255, 215,0, 1)"
|
||||
fillColor="rgba(255, 215, 0, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={psiData}
|
||||
rangeX={[0, psiData.length - 1]}
|
||||
rangeY={[0, 1500]}
|
||||
strokeColor="rgba(255,250,250, 1)"
|
||||
fillColor="rgba(255,250,250, 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempInputData}
|
||||
rangeX={[0, tempInputData.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(127, 179, 255 , 1)"
|
||||
fillColor="rgba(127, 179, 255 , 0.1)" />
|
||||
<Chart.Line
|
||||
fillPositionedParent
|
||||
data={tempOutputdata}
|
||||
rangeX={[0, tempOutputdata.length - 1]}
|
||||
rangeY={[-273.15, 1227]}
|
||||
strokeColor="rgba(255, 0, 0 , 1)"
|
||||
fillColor="rgba(255, 0, 0 , 0.1)" />
|
||||
</Section>
|
||||
</Section>
|
||||
);
|
||||
};
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -381,11 +381,15 @@ const ROUTES = {
|
||||
},
|
||||
rbmkcontrolrods: {
|
||||
component: () => RbmkControlRods,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
rbmkstats: {
|
||||
component: () => RbmkStats,
|
||||
wrapper: () => NtosWrapper,
|
||||
scrollable: true,
|
||||
theme: 'ntos',
|
||||
},
|
||||
nuclear_bomb: {
|
||||
component: () => NuclearBomb,
|
||||
|
||||
Reference in New Issue
Block a user