mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2025-12-18 14:12:20 +00:00
Updates to sun.dm and solar.dm
Improved solar manual tracking by switching sun.dm and solar.dm to run off of the same clock (world.time) and added several options to the solar generator control computer.
This commit is contained in:
@@ -2,14 +2,15 @@
|
|||||||
var/angle
|
var/angle
|
||||||
var/dx
|
var/dx
|
||||||
var/dy
|
var/dy
|
||||||
var/counter = 50 // to make the vars update during 1st call
|
// var/counter = 50 // to make the vars update during 1st call
|
||||||
var/rate
|
var/rate
|
||||||
var/list/solars // for debugging purposes, references solars_list at the constructor
|
var/list/solars // for debugging purposes, references solars_list at the constructor
|
||||||
|
var/nexttime = 3600 // Replacement for var/counter to force the sun to move every X IC minutes
|
||||||
|
|
||||||
/datum/sun/New()
|
/datum/sun/New()
|
||||||
|
|
||||||
solars = solars_list
|
solars = solars_list
|
||||||
rate = rand(75,125)/100 // 75% - 125% of standard rotation
|
rate = rand(750,1250)/1000 // 75.0% - 125.0% of standard rotation
|
||||||
if(prob(50))
|
if(prob(50))
|
||||||
rate = -rate
|
rate = -rate
|
||||||
|
|
||||||
@@ -17,13 +18,22 @@
|
|||||||
|
|
||||||
/datum/sun/proc/calc_position()
|
/datum/sun/proc/calc_position()
|
||||||
|
|
||||||
counter++
|
/* counter++
|
||||||
if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change)
|
if(counter<50) // count 50 pticks (50 seconds, roughly - about a 5deg change)
|
||||||
return
|
return
|
||||||
counter = 0
|
counter = 0 */
|
||||||
|
|
||||||
|
angle = ((rate*world.time/100)%360 + 360)%360
|
||||||
|
/*
|
||||||
|
Yields a 45 - 75 IC minute rotational period
|
||||||
|
Rotation rate can vary from 4.8 deg/min to 8 deg/min (288 to 480 deg/hr)
|
||||||
|
*/
|
||||||
|
|
||||||
|
// To prevent excess server load the server only updates the sun's sight lines every 6 minutes
|
||||||
|
if(nexttime < world.time)
|
||||||
|
return
|
||||||
|
nexttime = nexttime + 3600 // 600 world.time ticks = 1 minute, 3600 = 6 minutes.
|
||||||
|
|
||||||
angle = ((rate*world.realtime/100)%360 + 360)%360 // gives about a 60 minute rotation time
|
|
||||||
// now 45 - 75 minutes, depending on rate
|
|
||||||
// now calculate and cache the (dx,dy) increments for line drawing
|
// now calculate and cache the (dx,dy) increments for line drawing
|
||||||
|
|
||||||
var/s = sin(angle)
|
var/s = sin(angle)
|
||||||
|
|||||||
@@ -277,10 +277,10 @@ var/list/solars_list = list()
|
|||||||
var/cdir = 0
|
var/cdir = 0
|
||||||
var/gen = 0
|
var/gen = 0
|
||||||
var/lastgen = 0
|
var/lastgen = 0
|
||||||
var/track = 0 // 0= off 1=timed 2=auto (tracker)
|
var/track = 0 // 0=off 1=manual 2=automatic
|
||||||
var/trackrate = 600 // 300-900 seconds
|
var/trackrate = 60 // Measured in tenths of degree per minute (i.e. defaults to 6.0 deg/min)
|
||||||
var/trackdir = 1 // 0 =CCW, 1=CW
|
var/trackdir = 1 // -1=CCW, 1=CW
|
||||||
var/nexttime = 0
|
var/nexttime = 0 // Next clock time that manual tracking will move the array
|
||||||
|
|
||||||
|
|
||||||
/obj/machinery/power/solar_control/New()
|
/obj/machinery/power/solar_control/New()
|
||||||
@@ -371,9 +371,11 @@ var/list/solars_list = list()
|
|||||||
return
|
return
|
||||||
|
|
||||||
use_power(250)
|
use_power(250)
|
||||||
if(track==1 && nexttime < world.timeofday && trackrate)
|
if(track==1 && nexttime < world.time && trackdir*trackrate)
|
||||||
nexttime = world.timeofday + 3600/abs(trackrate)
|
// Increments nexttime using itself and not world.time to prevent drift
|
||||||
cdir = (cdir+trackrate/abs(trackrate)+360)%360
|
nexttime = nexttime + 6000/trackrate
|
||||||
|
// Nudges array 1 degree in desired direction
|
||||||
|
cdir = (cdir+trackdir+360)%360
|
||||||
set_panels(cdir)
|
set_panels(cdir)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
@@ -402,19 +404,28 @@ var/list/solars_list = list()
|
|||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
|
|
||||||
var/t = "<TT><B>Solar Generator Control</B><HR><PRE>"
|
var/t = "<TT><B>Solar Generator Control</B><HR><PRE>"
|
||||||
t += "Generated power : [round(lastgen)] W<BR><BR>"
|
t += "<B>Generated power</B> : [round(lastgen)] W<BR>"
|
||||||
t += "<B>Orientation</B>: [rate_control(src,"cdir","[cdir]°",1,15)] ([angle2text(cdir)])<BR><BR><BR>"
|
t += "Station Rotational Period: [60/abs(sun.rate)] minutes<BR>"
|
||||||
t += "<BR><HR><BR><BR>"
|
t += "Station Rotational Direction: [sun.rate<0 ? "CCW" : "CW"]<BR>"
|
||||||
|
t += "Star Orientation: [sun.angle]° ([angle2text(sun.angle)])<BR>"
|
||||||
|
t += "Array Orientation: [rate_control(src,"cdir","[cdir]°",1,10,60)] ([angle2text(cdir)])<BR>"
|
||||||
|
t += "<BR><HR><BR>"
|
||||||
t += "Tracking: "
|
t += "Tracking: "
|
||||||
switch(track)
|
switch(track)
|
||||||
if(0)
|
if(0)
|
||||||
t += "<B>Off</B> <A href='?src=\ref[src];track=1'>Timed</A> <A href='?src=\ref[src];track=2'>Auto</A><BR>"
|
t += "<B>Off</B> <A href='?src=\ref[src];track=1'>Manual</A> <A href='?src=\ref[src];track=2'>Automatic</A><BR>"
|
||||||
if(1)
|
if(1)
|
||||||
t += "<A href='?src=\ref[src];track=0'>Off</A> <B>Timed</B> <A href='?src=\ref[src];track=2'>Auto</A><BR>"
|
t += "<A href='?src=\ref[src];track=0'>Off</A> <B>Manual</B> <A href='?src=\ref[src];track=2'>Automatic</A><BR>"
|
||||||
if(2)
|
if(2)
|
||||||
t += "<A href='?src=\ref[src];track=0'>Off</A> <A href='?src=\ref[src];track=1'>Timed</A> <B>Auto</B><BR>"
|
t += "<A href='?src=\ref[src];track=0'>Off</A> <A href='?src=\ref[src];track=1'>Manual</A> <B>Automatic</B><BR>"
|
||||||
|
|
||||||
t += "Tracking Rate: [rate_control(src,"tdir","[trackrate] deg/h ([trackrate<0 ? "CCW" : "CW"])",5,30,180)]<BR><BR>"
|
t += "Manual Tracking Rate: [rate_control(src,"tdir","[trackrate/10]°/min ([trackdir<0 ? "CCW" : "CW"])",1,10)]<BR>"
|
||||||
|
t += "Manual Tracking Direction: "
|
||||||
|
switch(trackdir)
|
||||||
|
if(-1)
|
||||||
|
t += "<A href='?src=\ref[src];trackdir=1'>CW</A> <B>CCW</B><BR>"
|
||||||
|
if(1)
|
||||||
|
t += "<B>CW</B> <A href='?src=\ref[src];trackdir=-1'>CCW</A><BR>"
|
||||||
t += "<A href='?src=\ref[src];close=1'>Close</A></TT>"
|
t += "<A href='?src=\ref[src];close=1'>Close</A></TT>"
|
||||||
user << browse(t, "window=solcon")
|
user << browse(t, "window=solcon")
|
||||||
onclose(user, "solcon")
|
onclose(user, "solcon")
|
||||||
@@ -443,11 +454,11 @@ var/list/solars_list = list()
|
|||||||
set_panels(cdir)
|
set_panels(cdir)
|
||||||
update_icon()
|
update_icon()
|
||||||
if(href_list["tdir"])
|
if(href_list["tdir"])
|
||||||
src.trackrate = dd_range(-7200,7200,src.trackrate+text2num(href_list["tdir"]))
|
src.trackrate = dd_range(0,360,src.trackrate+text2num(href_list["tdir"]))
|
||||||
if(src.trackrate) nexttime = world.timeofday + 3600/abs(trackrate)
|
if(src.trackrate) nexttime = world.time + 6000/trackrate
|
||||||
|
|
||||||
if(href_list["track"])
|
if(href_list["track"])
|
||||||
if(src.trackrate) nexttime = world.timeofday + 3600/abs(trackrate)
|
if(src.trackrate) nexttime = world.time + 6000/trackrate
|
||||||
track = text2num(href_list["track"])
|
track = text2num(href_list["track"])
|
||||||
if(powernet && (track == 2))
|
if(powernet && (track == 2))
|
||||||
for(var/obj/machinery/power/tracker/T in get_solars_powernet())
|
for(var/obj/machinery/power/tracker/T in get_solars_powernet())
|
||||||
@@ -455,6 +466,9 @@ var/list/solars_list = list()
|
|||||||
cdir = T.sun_angle
|
cdir = T.sun_angle
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if(href_list["trackdir"])
|
||||||
|
trackdir = text2num(href_list["trackdir"])
|
||||||
|
|
||||||
set_panels(cdir)
|
set_panels(cdir)
|
||||||
update_icon()
|
update_icon()
|
||||||
src.updateUsrDialog()
|
src.updateUsrDialog()
|
||||||
|
|||||||
Reference in New Issue
Block a user