Data centres: multi-storey shell, racks and pods, cooling, fire safety, power
Deploy web Studio / deploy (push) Successful in 1m4s

datacentre.rhai (palette groups Data centre, Cooling, Fire safety, Power):

- dc_building: multi-storey shell (storeys of storey_h), walls in pieces,
  slabs, roof with parapet, louvres, front door and loading dock; levels
  cut it open storey by storey
- raised_floor; rack_row and dc_pod (cabinets by U, width, depth,
  equipment, fill, doors, LEDs; in-row coolers; cold / hot aisle
  containment with vent tiles, roof, end doors, ceiling duct, airflow);
  dc_cage for colocation
- crah, chiller (air-cooled, dry, adiabatic), cooling_tower, pipe_run
- smoke_detectors (grid + coverage), fire_pipe (VESDA, sprinkler, gas),
  gas_bank (Novec 1230, FM-200, Inergen sized for its halls), fire_device
  (panels, call points, abort switches, beacons, extinguishers)
- power_cab (UPS, battery, PDU, switchgear, RPP), busway, cable_tray,
  transformer
- tooltips sum IT load, kW/m2, cooling redundancy per storey, UPS load,
  battery runtime, plant cooling and agent quantity (warning when short)

Engine and stdlib:

- part_hidden(o) in house.rhai: parts on closed storeys inside a
  dc_building are not drawn (they only made sort cycles under the slab
  above); house parts, furniture and people use it. Existing examples
  render byte-identical.
- overhead services sort in their own "ceiling" layer with tight boxes
- sort records which sprites each broken cycle involved; isokit check
  names them (Rendered.cycle_at)

examples/datacentre (three storeys and a roof plant), Data centre demo in
the web Studio, tests, SCRIPTING/README/ROADMAP, MCP instructions.
This commit is contained in:
grabowski committed 2026-10-27 17:08:39 +07:00
1 parent c8becc2e59
commit 2810477f1b
22 files changed
+2281 -18

No files matched your search

+200
View File
@@ -318,6 +318,66 @@ walk = "#555c6b"
kerbf = "#7d8494"
apron = "#4a4840"
# data centre
dccab = "#262b34"
dccabt = "#3a414d"
dcsrv = "#5b6678"
dcstor = "#6f7f96"
dcgpu = "#414b5c"
dcnet = "#2f7396"
dcpatch = "#c9ced6"
dcslot = "#2a3039"
dcinrow = "#aab4c2"
dcrf = "#9aa3b0"
dcrf2 = "#7f93ad"
dcrf3 = "#a69e90"
dcrfs = "#5a616d"
dcperf = "#5f86b8"
dccold = "#8fcaff"
dchot = "#ff8a5a"
dcalu = "#b9c2ce"
dcglass = "#8fc8ff"
dcglassh = "#ffb08a"
dccrah = "#c4ccd6"
dcups = "#b8c0cb"
dcbatt = "#3a414d"
dcpdu = "#5d6f8a"
dcswg = "#8a96a6"
dcbus = "#9ea4ad"
dctap = "#c46a24"
dctray = "#8e98a6"
dcfibre = "#e3b62b"
dcbasket = "#a7b0bc"
dccable = "#1b1f26"
dcfibrec = "#f0d060"
dccablec = "#3f78c0"
dcdet = "#e9edf2"
dcdeth = "#f2e2b6"
dcvesda = "#e0574a"
dcfirel = "#e0574a"
dcgaspipe = "#aab3be"
dcpanel = "#c03c35"
dcyel = "#e0b030"
dcwhite = "#f2f4f7"
dcgreen = "#3f9a5a"
dcscreen = "#58d0e0"
dctower = "#9fb0c2"
dctowert = "#7e8fa2"
dcpipeg = "#3f9a5a"
dcpipeg2 = "#2c7344"
dcpipev = "#8a5fc0"
dccoil = "#6f8193"
dcpad = "#8fa58a"
dcband = "#6d7480"
dcvoid = "#1a1e25"
dcleg = "#7a828e"
dcmeshp = "#9aa6b5"
dcpdu0 = "#b8413a"
dcrear = "#1e2229"
dcbay = "#15181d"
dcdoor = "#30363f"
dcbrk = "#2b2f37"
dcpanelb = "#9aa4b2"
[palette.light]
sky1 = "#a9d4fb"
sky2 = "#e8f4ff"
@@ -626,6 +686,66 @@ walk = "#d9d6cf"
kerbf = "#a5a9b1"
apron = "#b9ad98"
# data centre
dccab = "#3b424e"
dccabt = "#5a6371"
dcsrv = "#7d899b"
dcstor = "#94a3b8"
dcgpu = "#5d6878"
dcnet = "#3f8fb5"
dcpatch = "#eef1f5"
dcslot = "#454c58"
dcinrow = "#dde2e8"
dcrf = "#d3d8df"
dcrf2 = "#b6c6da"
dcrf3 = "#d8d0c2"
dcrfs = "#8d95a2"
dcperf = "#8eb0da"
dccold = "#3f86e0"
dchot = "#e0582a"
dcalu = "#a3adbb"
dcglass = "#5aa6e6"
dcglassh = "#f08a5a"
dccrah = "#eef1f4"
dcups = "#e3e7ec"
dcbatt = "#5d6573"
dcpdu = "#7f93ad"
dcswg = "#b2bcc8"
dcbus = "#c3c8cf"
dctap = "#dd7f2f"
dctray = "#aeb7c3"
dcfibre = "#e8c22e"
dcbasket = "#c3cad3"
dccable = "#2a2f38"
dcfibrec = "#f5dc70"
dccablec = "#4f8fd8"
dcdet = "#ffffff"
dcdeth = "#f7ecc8"
dcvesda = "#d24a3c"
dcfirel = "#d0453f"
dcgaspipe = "#9aa3ad"
dcpanel = "#d0453f"
dcyel = "#e8c22e"
dcwhite = "#ffffff"
dcgreen = "#2fae68"
dcscreen = "#2aa8bf"
dctower = "#c8d3df"
dctowert = "#a9b6c4"
dcpipeg = "#2fae68"
dcpipeg2 = "#23864f"
dcpipev = "#9b6fd8"
dccoil = "#8fa1b4"
dcpad = "#a9c0a2"
dcband = "#9aa1ab"
dcvoid = "#3a404b"
dcleg = "#a3abb6"
dcmeshp = "#b9c4d2"
dcpdu0 = "#c9473a"
dcrear = "#2f353f"
dcbay = "#22262d"
dcdoor = "#4a525f"
dcbrk = "#3a404b"
dcpanelb = "#c3cad3"
[materials]
warn = "#e0412f"
suit = "suit"
@@ -903,6 +1023,56 @@ f-carpet = "fcarpet"
f-stone = "fstone"
f-conc = "conc"
# data centre
dccab = "dccab"
dccabt = "dccabt"
dcsrv = "dcsrv"
dcstor = "dcstor"
dcgpu = "dcgpu"
dcnet = "dcnet"
dcpatch = "dcpatch"
dcslot = "dcslot"
dcinrow = "dcinrow"
dcrf = "dcrf"
dcrf2 = "dcrf2"
dcrf3 = "dcrf3"
dcrfs = "dcrfs"
dcalu = "dcalu"
dccrah = "dccrah"
dcups = "dcups"
dcbatt = "dcbatt"
dcpdu = "dcpdu"
dcswg = "dcswg"
dcbus = "dcbus"
dctap = "dctap"
dctray = "dctray"
dcfibre = "dcfibre"
dcbasket = "dcbasket"
dccable = "dccable"
dcfibrec = "dcfibrec"
dccablec = "dccablec"
dcvesda = "dcvesda"
dcgaspipe = "dcgaspipe"
dcpanel = "dcpanel"
dcyel = "dcyel"
dcwhite = "dcwhite"
dcgreen = "dcgreen"
dctower = "dctower"
dctowert = "dctowert"
dcpipeg = "dcpipeg"
dcpipeg2 = "dcpipeg2"
dcpipev = "dcpipev"
dccoil = "dccoil"
dcpad = "dcpad"
dcband = "dcband"
dcvoid = "dcvoid"
dcleg = "dcleg"
dcpdu0 = "dcpdu0"
dcrear = "dcrear"
dcbay = "dcbay"
dcdoor = "dcdoor"
dcbrk = "dcbrk"
dcpanelb = "dcpanelb"
[rules]
".iso-ground .iso-dirt" = "stroke: var(--iso-edge); stroke-width: .4"
".iso-svg .iso-grid" = "fill: none; stroke: var(--iso-grid); stroke-width: .5"
@@ -1029,3 +1199,33 @@ f-conc = "conc"
".iso-svg .iso-hobr" = "fill: none; stroke: #6a707b; stroke-width: .3"
".iso-svg .iso-metal" = "fill: var(--iso-steel); stroke: none"
".iso-svg .iso-keyb" = "fill: #2b2f37; stroke: none"
# data centre
".iso-svg .iso-dctile" = "fill: none; stroke: var(--iso-edge); stroke-width: .2; opacity: .3"
".iso-svg .iso-dcperf" = "fill: var(--iso-dcperf); stroke: none; opacity: .85"
".iso-svg .iso-dcglass, .iso-svg .iso-dcglass.iso-t" = "fill-opacity: .2; --b: var(--iso-dcglass); stroke-opacity: .55"
".iso-svg .iso-dcglassh, .iso-svg .iso-dcglassh.iso-t" = "fill-opacity: .2; --b: var(--iso-dcglassh); stroke-opacity: .55"
".iso-svg .iso-dcglassd" = "fill: var(--iso-dcglass); fill-opacity: .14; stroke: none"
".iso-svg .iso-dcmesh" = "fill: #000; fill-opacity: .3; stroke: none"
".iso-svg .iso-dcmeshp, .iso-svg .iso-dcmeshp.iso-t" = "fill-opacity: .25; --b: var(--iso-dcmeshp); stroke-opacity: .45"
".iso-svg .iso-dcmeshd, .iso-svg .iso-dcmeshd.iso-t" = "fill-opacity: .45; --b: var(--iso-dcmeshp); stroke-opacity: .6"
".iso-svg .iso-dcframe" = "fill: none; stroke: var(--iso-dcalu); stroke-width: .3"
".iso-svg path.iso-dcsrv, .iso-svg path.iso-dcstor, .iso-svg path.iso-dcgpu, .iso-svg path.iso-dcnet, .iso-svg path.iso-dcpatch, .iso-svg path.iso-dcslot, .iso-svg path.iso-dcbay, .iso-svg path.iso-dcrear, .iso-svg path.iso-dcpdu0, .iso-svg path.iso-dcvoid, .iso-svg path.iso-dcleg, .iso-svg path.iso-dcband, .iso-svg path.iso-dcbrk, .iso-svg path.iso-dcdoor" = "stroke: none"
".iso-svg .iso-dcstrip" = "fill: var(--iso-led-g); stroke: none; opacity: .9"
".iso-svg .iso-dcscr" = "fill: var(--iso-dcscreen); stroke: none"
".iso-svg .iso-dccov" = "fill: var(--iso-dchot); fill-opacity: .025; stroke: var(--iso-dchot); stroke-width: .22; stroke-dasharray: 1.2 2.2; opacity: .45; pointer-events: none"
".iso-svg .iso-dcdetd" = "fill: var(--iso-dcdet); stroke: var(--iso-edge); stroke-width: .12"
".iso-svg .iso-dcdethd" = "fill: var(--iso-dcdeth); stroke: var(--iso-edge); stroke-width: .12"
".iso-svg .iso-dcvesl" = "fill: none; stroke: var(--iso-dcvesda); stroke-width: .5; stroke-linecap: round"
".iso-svg .iso-dcsprl" = "fill: none; stroke: var(--iso-dcfirel); stroke-width: .8; stroke-linecap: round"
".iso-svg .iso-dcgasl" = "fill: none; stroke: var(--iso-dcgaspipe); stroke-width: .9; stroke-linecap: round"
".iso-svg .iso-dchole" = "fill: var(--iso-dcwhite); stroke: var(--iso-dcvesda); stroke-width: .2"
".iso-svg .iso-dcspr" = "fill: var(--iso-dcfirel); stroke: none"
".iso-svg .iso-dcsprh" = "fill: var(--iso-dcyel); stroke: none"
".iso-svg .iso-dcdled" = "fill: var(--iso-led-r); stroke: none"
".iso-svg .iso-dcflash" = "animation: iso-dcflash 4s linear infinite"
"@keyframes iso-dcflash" = "0%, 86%, 100% { opacity: .3 } 90% { opacity: 1 }"
".iso-svg .iso-dcblink" = "animation: iso-blink 1.9s ease-in-out infinite"
".iso-svg .iso-dcair, .iso-svg .iso-dcheat" = "transform-box: fill-box; transform-origin: center; animation: iso-dcrise 3s ease-out infinite; opacity: 0; pointer-events: none; stroke: none"
".iso-svg .iso-dcair" = "fill: var(--iso-dccold)"
".iso-svg .iso-dcheat" = "fill: var(--iso-dchot)"
"@keyframes iso-dcrise" = "0% { transform: translate(0, 0) scale(.5); opacity: 0 } 25% { opacity: .6 } 100% { transform: translate(0, -7px) scale(1.3); opacity: 0 }"