mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
New compatibility! This uses OpenComputer's Floppy Disk API, allowing mods to create new loot disks and add them to the tables (this took me a while; I love this system so much, it's my baby ❤️).
This commit is contained in:
parent
148a0ab035
commit
25863311bd
@ -1,13 +1,30 @@
|
|||||||
package com.hbm.handler;
|
package com.hbm.handler;
|
||||||
|
|
||||||
|
import com.hbm.blocks.ModBlocks;
|
||||||
|
import com.hbm.inventory.RecipesCommon;
|
||||||
import com.hbm.inventory.fluid.FluidType;
|
import com.hbm.inventory.fluid.FluidType;
|
||||||
import com.hbm.inventory.fluid.Fluids;
|
import com.hbm.inventory.fluid.Fluids;
|
||||||
|
import com.hbm.lib.RefStrings;
|
||||||
|
import com.hbm.main.MainRegistry;
|
||||||
|
import cpw.mods.fml.common.Loader;
|
||||||
import cpw.mods.fml.common.Optional;
|
import cpw.mods.fml.common.Optional;
|
||||||
|
import li.cil.oc.api.Items;
|
||||||
|
import li.cil.oc.api.fs.FileSystem;
|
||||||
import li.cil.oc.api.machine.Arguments;
|
import li.cil.oc.api.machine.Arguments;
|
||||||
import li.cil.oc.api.machine.Context;
|
import li.cil.oc.api.machine.Context;
|
||||||
import li.cil.oc.api.network.*;
|
import li.cil.oc.api.network.*;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
import net.minecraftforge.common.util.ForgeDirection;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
|
import static com.hbm.main.CraftingManager.addShapelessAuto;
|
||||||
|
import static li.cil.oc.api.FileSystem.asReadOnly;
|
||||||
|
import static li.cil.oc.api.FileSystem.fromClass;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General handler for OpenComputers compatibility.
|
* General handler for OpenComputers compatibility.
|
||||||
@ -15,13 +32,29 @@ import net.minecraftforge.common.util.ForgeDirection;
|
|||||||
*/
|
*/
|
||||||
public class CompatHandler {
|
public class CompatHandler {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for converting a steam type to an integer (compression levels).
|
||||||
|
* @param type Steam type.
|
||||||
|
* @return Object[] array containing an int with the "compression level"
|
||||||
|
*/
|
||||||
public static Object[] steamTypeToInt(FluidType type) {
|
public static Object[] steamTypeToInt(FluidType type) {
|
||||||
if(type == Fluids.STEAM) {return new Object[] {0};}
|
switch(type.getID()) {
|
||||||
else if(type == Fluids.HOTSTEAM) {return new Object[] {1};}
|
default:
|
||||||
else if(type == Fluids.SUPERHOTSTEAM) {return new Object[] {2};}
|
return new Object[] {0};
|
||||||
return new Object[] {3};
|
case(4): // Fluids.HOTSTEAM
|
||||||
|
return new Object[] {1};
|
||||||
|
case(5): // Fluids.SUPERHOTSTEAM
|
||||||
|
return new Object[] {2};
|
||||||
|
case(6): // Fluids.ULTRAHOTSTEAM
|
||||||
|
return new Object[] {3};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for converting a compression level to a steam type.
|
||||||
|
* @param arg Steam compression level.
|
||||||
|
* @return FluidType of the steam type based on the compression level.
|
||||||
|
*/
|
||||||
public static FluidType intToSteamType(int arg) {
|
public static FluidType intToSteamType(int arg) {
|
||||||
switch(arg) {
|
switch(arg) {
|
||||||
default:
|
default:
|
||||||
@ -35,6 +68,132 @@ public class CompatHandler {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows for easy creation of read-only filesystems. Primarily for floppy disks.
|
||||||
|
* (Though maybe reading directly from VOTV drives as filesystems could be implemented. :3)
|
||||||
|
**/
|
||||||
|
private static class ReadOnlyFileSystem implements Callable<FileSystem> {
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
|
||||||
|
ReadOnlyFileSystem(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Optional.Method(modid = "OpenComputers")
|
||||||
|
public li.cil.oc.api.fs.FileSystem call() throws Exception {
|
||||||
|
return asReadOnly(fromClass(MainRegistry.class, RefStrings.MODID, "disks/" + FloppyDisk.sanitizeName(name)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Floppy disk class.
|
||||||
|
public static class FloppyDisk {
|
||||||
|
// Specifies the callable ReadOnlyFileSystem to allow OC to access the floppy.
|
||||||
|
public final ReadOnlyFileSystem fs;
|
||||||
|
// Specifies the color of the floppy disk (0-16 colors defined by OC).
|
||||||
|
public final Byte color;
|
||||||
|
// Set after loading the disk; allows for adding a recipe to the item.
|
||||||
|
public ItemStack item;
|
||||||
|
|
||||||
|
FloppyDisk(String name, int color) {
|
||||||
|
this.fs = new ReadOnlyFileSystem(FloppyDisk.sanitizeName(name));
|
||||||
|
this.color = (byte) color;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disk names will be sanitized before the FileSystem is created.
|
||||||
|
// This only affects the location/directory, not the display name.
|
||||||
|
// (Prevents filesystems from breaking/crashing due to having file separators, wildcards, etc.
|
||||||
|
public static String sanitizeName(String input) {
|
||||||
|
return input.toLowerCase().replaceAll("\\W", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple enum for mapping OC color ordinals to a nicer format for adding new disks.
|
||||||
|
*/
|
||||||
|
public enum OCColors {
|
||||||
|
BLACK, //0x444444
|
||||||
|
RED, //0xB3312C
|
||||||
|
GREEN, //0x339911
|
||||||
|
BROWN, //0x51301A
|
||||||
|
BLUE, //0x6666FF
|
||||||
|
PURPLE, //0x7B2FBE
|
||||||
|
CYAN, //0x66FFFF
|
||||||
|
LIGHTGRAY, //0xABABAB
|
||||||
|
GRAY, //0x666666
|
||||||
|
PINK, //0xD88198
|
||||||
|
LIME, //0x66FF66
|
||||||
|
YELLOW, //0xFFFF66
|
||||||
|
LIGHTBLUE, //0xAAAAFF
|
||||||
|
MAGENTA, //0xC354CD
|
||||||
|
ORANGE, //0xEB8844
|
||||||
|
WHITE //0xF0F0F0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where all disks are stored with their name and `FloppyDisk` class.
|
||||||
|
public static HashMap<String, FloppyDisk> disks = new HashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Called in the FML PostLoad stage, after the OC API loads.
|
||||||
|
* <br>
|
||||||
|
* Loads various parts of OC compatibility.
|
||||||
|
*/
|
||||||
|
public static void init() {
|
||||||
|
if(Loader.isModLoaded("OpenComputers")) {
|
||||||
|
/*
|
||||||
|
For anyone wanting to add their own floppy disks,
|
||||||
|
read the README found in assets.hbm.disks.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Idea/Code by instantnootles
|
||||||
|
disks.put("PWRangler", new FloppyDisk("PWRangler", OCColors.CYAN.ordinal()));
|
||||||
|
|
||||||
|
// begin registering disks
|
||||||
|
Logger logger = LogManager.getLogger("HBM");
|
||||||
|
logger.info("Loading OpenComputers disks...");
|
||||||
|
if(disks.size() == 0) {
|
||||||
|
logger.info("No disks registered; see com.hbm.handler.CompatHandler.disks");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
disks.forEach((s, disk) -> {
|
||||||
|
|
||||||
|
// Test if the disk path even exists.
|
||||||
|
FileSystem fs = fromClass(MainRegistry.class, RefStrings.MODID, "disks/" + disk.fs.name);
|
||||||
|
|
||||||
|
if (fs == null) { // Disk path does NOT exist, and it should not be loaded.
|
||||||
|
|
||||||
|
logger.error("Error loading disk: " + s + " at /assets/" + RefStrings.MODID + "/disks/" + disk.fs.name);
|
||||||
|
logger.error("This is likely due to the path to the disk being non-existent.");
|
||||||
|
|
||||||
|
} else { // Disk path DOES exist, and it should be loaded.
|
||||||
|
|
||||||
|
disk.item = Items.registerFloppy(s, disk.color, disk.fs); // The big part, actually registering the floppies!
|
||||||
|
logger.info("Registered disk: " + s + " at /assets/" + RefStrings.MODID + "/disks/" + disk.fs.name);
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
logger.info("OpenComputers disks registered.");
|
||||||
|
|
||||||
|
// OC disk recipes!
|
||||||
|
List<ItemStack> floppyDisks = new RecipesCommon.OreDictStack("oc:floppy").toStacks();
|
||||||
|
|
||||||
|
if(floppyDisks.size() > 0) { //check that floppy disks even exist in oredict.
|
||||||
|
|
||||||
|
// Recipes must be initialized here, since if they were initialized in `CraftingManager` then the disk item would not be created yet.
|
||||||
|
addShapelessAuto(disks.get("PWRangler").item, new Object[] {"oc:floppy", new ItemStack(ModBlocks.pwr_casing)});
|
||||||
|
|
||||||
|
logger.info("OpenComputers disk recipe added for PWRangler.");
|
||||||
|
} else {
|
||||||
|
logger.info("OpenComputers floppy disk oredict not found, recipes cannot be loaded!");
|
||||||
|
}
|
||||||
|
|
||||||
|
// boom, OC disks loaded
|
||||||
|
logger.info("OpenComputers disks loaded.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Null component name, default to this if broken to avoid NullPointerExceptions.
|
||||||
public static final String nullComponent = "ntm_null";
|
public static final String nullComponent = "ntm_null";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -878,6 +878,9 @@ public class MainRegistry {
|
|||||||
|
|
||||||
BlockMotherOfAllOres.init();
|
BlockMotherOfAllOres.init();
|
||||||
|
|
||||||
|
// Load compatibility for OC.
|
||||||
|
CompatHandler.init();
|
||||||
|
|
||||||
//expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck)
|
//expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck)
|
||||||
World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75);
|
World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75);
|
||||||
|
|
||||||
|
|||||||
13
src/main/resources/assets/hbm/disks/README.md
Normal file
13
src/main/resources/assets/hbm/disks/README.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# OpenComputers Floppy Disks
|
||||||
|
|
||||||
|
This directory is where the contents of floppy disks registered by `com.hbm.handler.CompatHandler` reside.
|
||||||
|
|
||||||
|
New floppy disks can be added by:
|
||||||
|
1. Adding a line inside the `init()` function in the `CompatHandler` class to add the floppy disk to the list of disks to register
|
||||||
|
(actually registering the disks is done automatically by the handler.)
|
||||||
|
2. Adding the Lua (Preferably 5.3) files to the directory path based on the name you chose for your floppy disk.
|
||||||
|
<br>Note: the names of drives are "sanitized", meaning the directory path will be the name you selected but all lowercase and stripped of any non-word character.
|
||||||
|
(A-Z, a-z, 0-9, _)
|
||||||
|
3. Add a recipe to the disk at the end of the `init()` function in the `CompatHandler` class, though this step is not required.
|
||||||
|
|
||||||
|
After those steps are complete, a new floppy disk should be registered into OC with a recipe (if added).
|
||||||
@ -0,0 +1,274 @@
|
|||||||
|
local component = require "component"
|
||||||
|
local event = require "event"
|
||||||
|
local gpu = component.gpu
|
||||||
|
local call = component.invoke
|
||||||
|
|
||||||
|
colorGradient = {0x00FF00, 0x6BEE00, 0x95DB00, 0xB0C800, 0xC5B400, 0xD79F00, 0xE68700, 0xF46900, 0xFC4700, 0xFF0000}
|
||||||
|
coreHeatESTOP = true
|
||||||
|
coolantLossESTOP = true
|
||||||
|
|
||||||
|
runSig = true
|
||||||
|
|
||||||
|
coldCoolantLevel = 0
|
||||||
|
coldCoolantOutflow = 0
|
||||||
|
prevCoolantFlow = 0
|
||||||
|
|
||||||
|
hotCoolantLevel = 0
|
||||||
|
hotCoolantOutflow = 0
|
||||||
|
prevHotCoolantFlow = 0
|
||||||
|
|
||||||
|
gpu.fill(1,1,160,160," ")
|
||||||
|
|
||||||
|
-- Button Bullshit
|
||||||
|
function newButton(x, y, width, height, colorUp, colorDown, func)
|
||||||
|
local button = {xpos = 0, ypos = 0, width = 0, height = 0, colorUp = 0, colorDown = 0, func = nil}
|
||||||
|
button.xpos = x
|
||||||
|
button.ypos = y
|
||||||
|
button.width = width
|
||||||
|
button.height = height
|
||||||
|
button.colorUp = colorUp
|
||||||
|
button.colorDown = colorDown
|
||||||
|
button.func = func
|
||||||
|
return button
|
||||||
|
end
|
||||||
|
|
||||||
|
function drawButton(button, color)
|
||||||
|
component.gpu.setBackground(color)
|
||||||
|
component.gpu.fill(button.xpos, button.ypos, button.width, button.height, " ")
|
||||||
|
component.gpu.setBackground(0x000000)
|
||||||
|
end
|
||||||
|
|
||||||
|
pressedButton = nil
|
||||||
|
function buttonPress(_, _, x, y, _, _)
|
||||||
|
for _, b in pairs(buttons) do
|
||||||
|
if((x>=b.xpos) and (x<(b.xpos+b.width)) and (y>=b.ypos) and (y<(b.ypos+b.height)) ) then
|
||||||
|
drawButton(b, b.colorDown)
|
||||||
|
pressedButton = b
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function buttonRelease(_, _, x, y, _, _)
|
||||||
|
drawButton(pressedButton, pressedButton.colorUp)
|
||||||
|
pressedButton.func()
|
||||||
|
pressedButton = nil
|
||||||
|
end
|
||||||
|
--Button bullshit ends
|
||||||
|
|
||||||
|
buttons = {}
|
||||||
|
|
||||||
|
buttons[1] = newButton(61, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+1) end)
|
||||||
|
buttons[2] = newButton(68, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+5) end)
|
||||||
|
buttons[3] = newButton(75, 6, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")+10) end)
|
||||||
|
|
||||||
|
buttons[4] = newButton(61, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-1) end)
|
||||||
|
buttons[5] = newButton(68, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-5) end)
|
||||||
|
buttons[6] = newButton(75, 9, 6, 2, 0xFFFFFF, 0xAAAAAA, function() component.proxy(pwrController).setLevel(call(pwrController, "getLevel")-10) end)
|
||||||
|
|
||||||
|
buttons[7] = newButton(82, 6, 11, 5, 0xFF0000, 0xAA0000, function() component.proxy(pwrController).setLevel(100) end)
|
||||||
|
buttons[8] = newButton(94, 6, 12, 2, 0x00FF00, 0x00AA00, function() coreHeatESTOP = not coreHeatESTOP if coreHeatESTOP == true then buttons[8].colorUp = 0x00FF00 buttons[8].colorDown = 0x00AA00 else buttons[8].colorUp = 0xFF0000 buttons[8].colorDown = 0xAA0000 end end)
|
||||||
|
buttons[9] = newButton(94, 9, 12, 2, 0x00FF00, 0x00AA00, function() coolantLossESTOP = not coolantLossESTOP if coolantLossESTOP == true then buttons[9].colorUp = 0x00FF00 buttons[9].colorDown = 0x00AA00 else buttons[9].colorUp = 0xFF0000 buttons[9].colorDown = 0xAA0000 end end)
|
||||||
|
|
||||||
|
buttons[10] = newButton(107, 8, 5, 3, 0xFF0000, 0xAA0000, function() runSig = false end)
|
||||||
|
|
||||||
|
for address, _ in component.list("ntm_pwr_control") do
|
||||||
|
pwrController = address
|
||||||
|
end
|
||||||
|
|
||||||
|
gpu.setForeground(0xAAAAAA)
|
||||||
|
|
||||||
|
--Control rods
|
||||||
|
gpu.fill(60,4,54,8,"█")
|
||||||
|
|
||||||
|
--Outlet
|
||||||
|
gpu.fill(91,13,16,8,"█")
|
||||||
|
|
||||||
|
--Inlet
|
||||||
|
gpu.fill(91,30,16,8,"█")
|
||||||
|
|
||||||
|
gpu.set(61,13," █████████████████████")
|
||||||
|
gpu.set(61,14," █ █ █ █ █ █ █ █ █ █")
|
||||||
|
gpu.set(61,15," █ █ █▄█▄█▄█▄█▄█ █ █")
|
||||||
|
gpu.set(61,16," ▄█████▀█▀█▀█▀█▀█████▄")
|
||||||
|
gpu.set(61,17," ▄███▀█ █ █ █ █ █ █ █▀███▄")
|
||||||
|
gpu.set(61,18," ▄██ █ █ █ █ █ █ █ █ █ █ ██▄")
|
||||||
|
gpu.set(61,19," ██ ██")
|
||||||
|
gpu.set(61,20,"██▀ █████████████████████ ▀██")
|
||||||
|
gpu.set(61,21,"██ █████████████████████ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄")
|
||||||
|
gpu.set(61,22,"██ █ █ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀")
|
||||||
|
gpu.set(61,23,"██ █████████████████████ → → → → → → → → → →")
|
||||||
|
gpu.set(61,24,"██ █ █ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄")
|
||||||
|
gpu.set(61,25,"██ █████████████████████ ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀")
|
||||||
|
gpu.set(61,26,"██ █ █ ██")
|
||||||
|
gpu.set(61,27,"██ █████████████████████ ██")
|
||||||
|
gpu.set(61,28,"██ █ █ ██")
|
||||||
|
gpu.set(61,29,"██ █████████████████████ ██")
|
||||||
|
gpu.set(61,30,"██ █ █ ██")
|
||||||
|
gpu.set(61,31,"██ █████████████████████ ██")
|
||||||
|
gpu.set(61,32,"██ ██")
|
||||||
|
gpu.set(61,33,"██ ██")
|
||||||
|
gpu.set(61,34,"██ ██")
|
||||||
|
gpu.set(61,35,"██ ██")
|
||||||
|
gpu.set(61,36,"██ ██")
|
||||||
|
gpu.set(61,37,"██ ██")
|
||||||
|
gpu.set(61,38,"██ ██▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄")
|
||||||
|
gpu.set(61,39,"██ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀")
|
||||||
|
gpu.set(61,40,"██ ← ← ← ← ← ← ← ← ← ←")
|
||||||
|
gpu.set(61,41,"██ ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄")
|
||||||
|
gpu.set(61,42,"██ ██▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀")
|
||||||
|
gpu.set(61,43,"██▄ ▄██")
|
||||||
|
gpu.set(61,44," ██ ██")
|
||||||
|
gpu.set(61,45," ▀██ ██▀")
|
||||||
|
gpu.set(61,46," ▀██▄▄ ▄▄██▀")
|
||||||
|
gpu.set(61,47," ▀▀███▄▄▄▄▄▄▄▄▄▄▄███▀▀")
|
||||||
|
gpu.set(61,48," ▀▀▀▀▀▀▀▀▀▀▀▀")
|
||||||
|
|
||||||
|
gpu.setBackground(0xAAAAAA)
|
||||||
|
gpu.setForeground(0x000000)
|
||||||
|
|
||||||
|
gpu.set(70,4,"CONTROL RODS")
|
||||||
|
gpu.set(61,5,"INS+1 INS+5 INS+10")
|
||||||
|
gpu.set(61,8,"RET+1 RET+5 RET+10")
|
||||||
|
|
||||||
|
gpu.set(85,5,"ESTOP")
|
||||||
|
gpu.set(107,5,"LEVEL")
|
||||||
|
gpu.set(107,7,"QUIT")
|
||||||
|
|
||||||
|
gpu.set(94,5,"OVHEAT ESTOP")
|
||||||
|
gpu.set(94,8,"NOCOOL ESTOP")
|
||||||
|
|
||||||
|
gpu.set(95,13,"OUTFLOW")
|
||||||
|
gpu.set(92,14,"BUFFER")
|
||||||
|
gpu.set(99,14,"HOTΔ")
|
||||||
|
|
||||||
|
gpu.set(95,30,"INFLOW")
|
||||||
|
gpu.set(92,31,"BUFFER")
|
||||||
|
gpu.set(99,31,"COOLΔ")
|
||||||
|
|
||||||
|
gpu.set(69,20,"REACTOR CORE")
|
||||||
|
gpu.set(71,21,"CORE HEAT:")
|
||||||
|
gpu.set(71,23,"HULL HEAT:")
|
||||||
|
gpu.set(71,25,"CORE FLUX:")
|
||||||
|
gpu.set(68,27,"COLD HEATEX LVL:")
|
||||||
|
gpu.set(69,29,"HOT HEATEX LVL:")
|
||||||
|
gpu.setBackground(0x000000)
|
||||||
|
|
||||||
|
gpu.setForeground(0xFFFFFF)
|
||||||
|
gpu.fill(107,6,5,1,"█")
|
||||||
|
|
||||||
|
--Outflow Buffer
|
||||||
|
gpu.fill(92,15,6,5,"█")
|
||||||
|
|
||||||
|
--CoolDelta
|
||||||
|
gpu.fill(99,15,7,1,"█")
|
||||||
|
|
||||||
|
--HotDelta
|
||||||
|
|
||||||
|
gpu.set(66,19,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃")
|
||||||
|
gpu.fill(66,22,19,1,"█")
|
||||||
|
gpu.fill(66,24,19,1,"█")
|
||||||
|
gpu.fill(66,26,19,1,"█")
|
||||||
|
gpu.fill(66,28,19,1,"█")
|
||||||
|
gpu.fill(66,30,19,1,"█")
|
||||||
|
gpu.set(66,32,"┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃")
|
||||||
|
gpu.setForeground(0xAAAAAA)
|
||||||
|
|
||||||
|
gpu.setForeground(0x000000)
|
||||||
|
gpu.setBackground(0xFFFFFF)
|
||||||
|
gpu.set(83,22,"TU")
|
||||||
|
gpu.set(83,24,"TU")
|
||||||
|
gpu.setForeground(0xFFFFFF)
|
||||||
|
gpu.setBackground(0x000000)
|
||||||
|
|
||||||
|
|
||||||
|
event.listen("touch", buttonPress)
|
||||||
|
event.listen("drop", buttonRelease)
|
||||||
|
|
||||||
|
while (runSig == true) do
|
||||||
|
rodLevel = call(pwrController, "getLevel")
|
||||||
|
|
||||||
|
coreHeat, _ = call(pwrController, "getHeat")
|
||||||
|
coreHeat = coreHeat//1000000
|
||||||
|
|
||||||
|
for _, b in pairs(buttons) do
|
||||||
|
drawButton(b, b.colorUp)
|
||||||
|
end
|
||||||
|
|
||||||
|
for j=rodLevel//10,10 do
|
||||||
|
gpu.fill(64+(j*2), 33, 1, 10, " ")
|
||||||
|
end
|
||||||
|
|
||||||
|
for j=1,rodLevel//10 do
|
||||||
|
gpu.fill(64+(j*2), 33, 1, 10, "┃")
|
||||||
|
end
|
||||||
|
|
||||||
|
gpu.fill(64+(math.ceil(rodLevel/10)*2), 33, 1, math.fmod(rodLevel,10), "┃")
|
||||||
|
|
||||||
|
for j=0,20,2 do
|
||||||
|
gpu.setForeground(colorGradient[coreHeat+1])
|
||||||
|
gpu.fill(65+j, 33, 1, 9, "█")
|
||||||
|
gpu.setForeground(0xAAAAAA)
|
||||||
|
end
|
||||||
|
|
||||||
|
gpu.setBackground(0xFFFFFF)
|
||||||
|
|
||||||
|
gpu.setForeground(0xFFFFFF)
|
||||||
|
gpu.fill(66,22,19,1,"█")
|
||||||
|
gpu.fill(66,24,19,1,"█")
|
||||||
|
gpu.fill(66,26,19,1,"█")
|
||||||
|
gpu.fill(66,28,19,1,"█")
|
||||||
|
gpu.fill(66,30,19,1,"█")
|
||||||
|
|
||||||
|
gpu.fill(92,15,6,5,"█")
|
||||||
|
gpu.fill(92,32,6,5,"█")
|
||||||
|
|
||||||
|
gpu.fill(99,15,7,1,"█")
|
||||||
|
gpu.fill(99,32,7,1,"█")
|
||||||
|
|
||||||
|
prevCoolantFlow = coldCoolantLevel
|
||||||
|
prevHotCoolantFlow = hotCoolantLevel
|
||||||
|
|
||||||
|
fullCoreHeat, fullHullHeat = call(pwrController, "getHeat")
|
||||||
|
coldCoolantLevel, _, hotCoolantLevel, _ = call(pwrController, "getCoolantInfo")
|
||||||
|
|
||||||
|
coldCoolantOutflow = coldCoolantLevel - prevCoolantFlow
|
||||||
|
hotCoolantOutflow = hotCoolantLevel - prevHotCoolantFlow
|
||||||
|
|
||||||
|
gpu.setForeground(0xFF0099)
|
||||||
|
gpu.fill(92,15+(5-hotCoolantLevel//25600),6,hotCoolantLevel//25600, "█")
|
||||||
|
gpu.setForeground(0x000000)
|
||||||
|
|
||||||
|
gpu.setForeground(0x00FFFF)
|
||||||
|
gpu.fill(92,32+(5-coldCoolantLevel//25600),6,coldCoolantLevel//25600, "█")
|
||||||
|
gpu.setForeground(0x000000)
|
||||||
|
|
||||||
|
gpu.set(66,22,tostring(fullCoreHeat))
|
||||||
|
gpu.set(66,24,tostring(fullHullHeat))
|
||||||
|
gpu.set(66,26,tostring(call(pwrController, "getFlux")))
|
||||||
|
gpu.set(66,28,tostring(coldCoolantLevel))
|
||||||
|
gpu.set(66,30,tostring(hotCoolantLevel))
|
||||||
|
|
||||||
|
gpu.set(99,15,tostring(hotCoolantOutflow))
|
||||||
|
gpu.set(99,32,tostring(coldCoolantOutflow))
|
||||||
|
|
||||||
|
gpu.set(107,6," ")
|
||||||
|
gpu.set(107,6,tostring(call(pwrController, "getLevel")))
|
||||||
|
|
||||||
|
gpu.setBackground(0x000000)
|
||||||
|
gpu.setForeground(0xFFFFFF)
|
||||||
|
|
||||||
|
if (coreHeatESTOP == true) and (fullCoreHeat) > 9000000 then
|
||||||
|
component.proxy(pwrController).setLevel(100)
|
||||||
|
end
|
||||||
|
|
||||||
|
if (coolantLossESTOP == true) and (coldCoolantLevel) < 10000 then
|
||||||
|
component.proxy(pwrController).setLevel(100)
|
||||||
|
end
|
||||||
|
|
||||||
|
os.sleep(0.25)
|
||||||
|
end
|
||||||
|
|
||||||
|
event.ignore("touch", buttonPress)
|
||||||
|
event.ignore("drop", buttonRelease)
|
||||||
|
|
||||||
|
gpu.fill(1,1,160,160," ")
|
||||||
Loading…
x
Reference in New Issue
Block a user