K@@*BCOg!uT$}7lmY#&`dt*_s3k#*CgLG1@M0~osxRin1PVOU
z>u3FfQtEfr?}AWA{}h_Xr0L_%h=
z^8zhF)VtNvY?fNTtA3XN){a^eba5j4AR6#Jh?z7R!0Pc1QNPssUG=+6u%tK=#U;U6
zBxpUsnIjk&N%cFwSZf@0WE?CBT7jVR5&b=MG4;V5r)>Q$P@#^0I+7_0g4l(IBNzfr
zQ$1V1vwrPg+#woB9hDg;U)ZQmq)&b3aqaxvBO
zKB$QgveFXt{C;tIoUE*ba4yggl=W;BP@F5R>xma!;1bzLT4>PyU6xV&y
zB-Li#HIwYE-yPORnOe~Io+n>OuvfoJD-)gaHKX5pBEN@VRX(c;_Ud;IP~OrZ5ES-y
z?Is9CZH?BbJN3JDbD-`L)cRb45F2s?d-c0R*j}`Qpeu4wg0XK-u6}dc*z-`8Cn>>o
z;XK)SYSyiP$FRL<2f<`uxvwU6yZ(csS0|d3Dl
z_}Bhb>Yw@Z5C0qO7pM)vY@k4J_IEGT?@}cD6CoIXZVW$-eRLi{sQi~BxYmfd`dzw9
zZXC-5!+)R|g3$*J5>&wnD8bS|fgoR>+cS;@A3S;|R>8v2C@#m)h>#(unJRm_Lu-B6
zF#HyxI60u(!AA(X$22?N3=4g5Z`V{M)OS
z?JqpJss5i6Ju~f3>pM9oh9DZKO;cUE!v4Ymg5Gj};0XHH&qRX#{e@Q|coGOMvwvrQ
zb6zNcz55Ggg3+tUnJ4H~96_{i##qJUazv5^ft~vcWrF+l8w8zwi$90==1f6wS@!HN
zlnL(Fi#~`(IdYyPXmDFNOeW~IZQ){c-L@4Mwxi>q)Wwt_6UDxGntU&;sSsgFFlszN
z(Av1yJV&GWNX`S}pnG>Sxt3A>R1(a8cNhQ~txE&@1Vhvw$hod=wW*2{j5lFaIF(Uc
zi+>gM$^^MoRS-n~f@LMBOuYgVJQ-Af&32
z;GAOEGc;zCU_+=!u&-xRl|-;5a4Er_UPx6U!Nf`SK^G$5Tr35M?sN3l4Y5w^mY<6tVu={418`TbyO;8h5QD_2|LGeKC3
zn)?V2`(Te?ZqvR?;O{^|@uPO$!3R6@LE%SPlmz3?o+vqOjDw@InTzx{Uzk7Yga32+
Z58c@ {
+ const { act, data } = useBackend(context);
+
+ const [tab, setTab] = useLocalState(context, 'tab', 1);
+
+ return (
+
+
+
+
+
+ {(data.integrity + 100) * 0.5}%
+ System Integrity
+
+
+
+
+ {data.location_name}
+
+ ({data.location_coords})
+
+
+
+
+ Current Uplink Location
+
+
+ {data.temperature}K
+ Current Uplink Temperature
+
+
+
+
+
+ {data.temperature}K
+ Utilized CPU Power
+
+
+ {data.temperature}K
+ Utilized RAM Capacity
+
+
+
+
+
+
+ setTab(1))}>
+ Available Projects
+
+ setTab(2))}>
+ Completed Projects
+
+ setTab(3))}>
+ Cloud Resources
+
+
+ {tab === 3 && (
+
+
+ {data.current_cpu ? data.current_cpu : 0}/{data.max_cpu} THz
+
+
+ {data.current_ram ? data.current_ram : 0 }/{data.max_ram} TB
+
+
+ )}
+
+
+
+
+ );
+};
diff --git a/yogstation.dme b/yogstation.dme
index 23119a259820..ef94e9084bfb 100644
--- a/yogstation.dme
+++ b/yogstation.dme
@@ -2314,7 +2314,9 @@
#include "code\modules\mob\living\silicon\ai\decentralized\decentralized_os.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\expansion_card.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\expansion_card_holder.dm"
+#include "code\modules\mob\living\silicon\ai\decentralized\management\ai_dashboard.dm"
#include "code\modules\mob\living\silicon\ai\decentralized\management\resource_distribution.dm"
+#include "code\modules\mob\living\silicon\ai\decentralized\projects\_ai_project.dm"
#include "code\modules\mob\living\silicon\ai\freelook\cameranet.dm"
#include "code\modules\mob\living\silicon\ai\freelook\chunk.dm"
#include "code\modules\mob\living\silicon\ai\freelook\eye.dm"
From 780777c27fbfad06f908b2b352753a3b982c367e Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Thu, 16 Sep 2021 20:09:49 +0200
Subject: [PATCH 8/9] Update ai_dashboard.dm
---
.../silicon/ai/decentralized/management/ai_dashboard.dm | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
index c63a725ffbf0..6ae593588e78 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
@@ -59,8 +59,8 @@
data["location_name"] = get_area(current_turf)
data["location_coords"] = "[current_turf.x], [current_turf.y], [current_turf.z]"
-
- data["temperature"] = current_turf?.air.return_temperature()
+ var/datum/gas_mixture/env = current_turf.return_air()
+ data["temperature"] = env.return_temperature()
for(var/datum/ai_project/AP as anything in available_projects)
data["available_projects"] += list(list("name" = AP.name, "description" = AP.description, "ram_required" = AP.ram_required, "available" = AP.available(), "research_requirements" = AP.research_requirements))
From 50fdce72058157cfdd220c6bfe200c192b20615a Mon Sep 17 00:00:00 2001
From: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date: Thu, 23 Sep 2021 19:36:29 +0200
Subject: [PATCH 9/9] zonk
---
.../decentralized/management/ai_dashboard.dm | 39 ++++++++++++++++---
.../ai/decentralized/projects/_ai_project.dm | 12 +++++-
tgui/packages/tgui/interfaces/AiDashboard.js | 36 +++++++++++++----
3 files changed, 72 insertions(+), 15 deletions(-)
diff --git a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
index 6ae593588e78..c4bc7f35aad9 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/management/ai_dashboard.dm
@@ -1,7 +1,10 @@
/datum/ai_dashboard
var/mob/living/silicon/ai/owner
- var/available_projects
+ var/available_projects
+
+ var/cpu_usage
+ var/ram_usage
var/completed_upgrades
@@ -11,8 +14,11 @@
if(!istype(new_owner))
qdel(src)
owner = new_owner
+ available_projects = list()
completed_upgrades = list()
running_upgrades = list()
+ cpu_usage = list()
+ ram_usage = list()
for(var/path in subtypesof(/datum/ai_project))
available_projects += new path()
@@ -44,15 +50,26 @@
return
var/list/data = list()
- data["current_cpu"] = GLOB.ai_os.cpu_assigned[owner]
- data["current_ram"] = GLOB.ai_os.ram_assigned[owner]
+ data["current_cpu"] = GLOB.ai_os.cpu_assigned[owner] ? GLOB.ai_os.cpu_assigned[owner] : 0
+ data["current_ram"] = GLOB.ai_os.ram_assigned[owner] ? GLOB.ai_os.ram_assigned[owner] : 0
+
+ var/total_cpu_used = 0
+ for(var/I in cpu_usage)
+ total_cpu_used += cpu_usage[I]
+
+ var/total_ram_used = 0
+ for(var/I in ram_usage)
+ total_ram_used += ram_usage[I]
+
+ data["used_cpu"] = total_cpu_used
+ data["used_ram"] = total_ram_used
data["max_cpu"] = GLOB.ai_os.total_cpu
data["max_ram"] = GLOB.ai_os.total_ram
data["available_projects"] = list()
- var/turf/current_turf = get_step(src, 0)
+ var/turf/current_turf = get_turf(owner)
data["integrity"] = owner.health
@@ -63,7 +80,8 @@
data["temperature"] = env.return_temperature()
for(var/datum/ai_project/AP as anything in available_projects)
- data["available_projects"] += list(list("name" = AP.name, "description" = AP.description, "ram_required" = AP.ram_required, "available" = AP.available(), "research_requirements" = AP.research_requirements))
+ data["available_projects"] += list(list("name" = AP.name, "description" = AP.description, "ram_required" = AP.ram_required, "available" = AP.available(), "research_cost" = AP.research_cost, "research_progress" = AP.research_progress,
+ "assigned_cpu" = cpu_usage[AP.name] ? cpu_usage[AP.name] : 0, "research_requirements" = AP.research_requirements))
data["completed_projects"] = list()
@@ -79,4 +97,13 @@
return
switch(action)
-
+ if("haha")
+ return
+
+
+
+/datum/ai_dashboard/proc/has_completed_projects(project_name)
+ for(var/datum/ai_project/P as anything in completed_upgrades)
+ if(P.name == project_name)
+ return TRUE
+ return FALSE
diff --git a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm
index 19f2dbad6e60..d3a107853ccd 100644
--- a/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm
+++ b/code/modules/mob/living/silicon/ai/decentralized/projects/_ai_project.dm
@@ -4,9 +4,19 @@ GLOBAL_LIST_EMPTY(ai_projects)
/datum/ai_project
var/name = "DEBUG"
var/description = "DEBUG"
- var/research_requirements
+ var/research_progress = 0
+ var/research_cost = 0
var/ram_required = 0
var/running = FALSE
+ //Text for available()
+ var/research_requirements
/datum/ai_project/proc/available()
return TRUE
+
+/datum/ai_project/test_project
+ name = "Test Project"
+ description = "I'm a test! How quirky"
+ research_cost = 2
+ ram_required = 1
+ research_requirements = "None"
diff --git a/tgui/packages/tgui/interfaces/AiDashboard.js b/tgui/packages/tgui/interfaces/AiDashboard.js
index 206cd3e0232f..311ddfabeea8 100644
--- a/tgui/packages/tgui/interfaces/AiDashboard.js
+++ b/tgui/packages/tgui/interfaces/AiDashboard.js
@@ -1,6 +1,6 @@
import { Fragment } from 'inferno';
import { useBackend, useLocalState } from '../backend';
-import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls } from '../components';
+import { Box, Button, Tabs, ProgressBar, Section, Divider, LabeledControls, NumberInput } from '../components';
import { Window } from '../layouts';
export const AiDashboard = (props, context) => {
@@ -24,12 +24,11 @@ export const AiDashboard = (props, context) => {
average: [25, 50],
bad: [0, 25]
}}
-
value={(data.integrity + 100) * 0.5}
maxValue={100}>{(data.integrity + 100) * 0.5}%
System Integrity
-
+
{data.location_name}
@@ -51,7 +50,7 @@ export const AiDashboard = (props, context) => {
value={data.temperature}
maxValue={750}>{data.temperature}K
- Current Uplink Temperature
+ Uplink Temperature
@@ -63,9 +62,9 @@ export const AiDashboard = (props, context) => {
average: [250, 750],
bad: [750, Infinity]
}}
- value={data.temperature}
+ value={data.current_cpu}
- maxValue={750}>{data.temperature}K
+ maxValue={data.max_cpu}>{data.current_cpu ? data.current_cpu : 0} THz
Utilized CPU Power
@@ -75,9 +74,9 @@ export const AiDashboard = (props, context) => {
average: [250, 750],
bad: [750, Infinity]
}}
- value={data.temperature}
+ value={data.current_ram}
- maxValue={750}>{data.temperature}K
+ maxValue={data.max_ram}>{data.current_ram ? data.current_ram : 0} TB
Utilized RAM Capacity
@@ -101,6 +100,27 @@ export const AiDashboard = (props, context) => {
Cloud Resources
+ {tab === 1 && (
+
+ {data.available_projects && data.available_projects.map(project => (
+
+ Assigned CPU:
+
+ THz
+
+ )}>
+ Research Cost: {project.research_cost} THz
+ RAM Requiremnt: {project.ram_required} TB
+ Research Requirements: {project.research_requirements}
+
+ {project.description}
+
+
+
+ ))}
+
+ )}
{tab === 3 && (