Skip to content

Commit

Permalink
feat: Configure power settings on ship systems.
Browse files Browse the repository at this point in the history
  • Loading branch information
alexanderson1993 committed Jan 28, 2023
1 parent 2d74f20 commit 186ca25
Show file tree
Hide file tree
Showing 7 changed files with 162 additions and 10 deletions.
3 changes: 0 additions & 3 deletions client/src/pages/Config/ShipSystems/Efficiency.tsx

This file was deleted.

114 changes: 113 additions & 1 deletion client/src/pages/Config/ShipSystems/Power.tsx
Original file line number Diff line number Diff line change
@@ -1,3 +1,115 @@
import {q} from "@client/context/AppContext";
import Input from "@thorium/ui/Input";
import {useContext, useReducer} from "react";
import {Navigate, useParams} from "react-router-dom";
import {ShipPluginIdContext} from "../Ships/ShipSystemOverrideContext";
import {OverrideResetButton} from "./OverrideResetButton";

export function Power() {
return null;
const [rekey, setRekey] = useReducer(() => Math.random(), Math.random());

const {pluginId, systemId, shipId} = useParams() as {
pluginId: string;
systemId: string;
shipId: string;
};
const key = `${systemId}${rekey}`;
const shipPluginId = useContext(ShipPluginIdContext);

const [system] = q.plugin.systems.get.useNetRequest({
pluginId,
systemId,
shipId,
shipPluginId,
});

if (!system) return <Navigate to={`/config/${pluginId}/systems`} />;

return (
<fieldset key={key} className="flex-1 overflow-y-auto">
<div className="flex flex-wrap">
<div className="flex-1 pr-4">
<div className="pb-4 flex">
<Input
labelHidden={false}
label="Required Power"
helperText="The minimum amount of power required to make this system operate in MegaWatts."
type="text"
inputMode="numeric"
pattern="[0-9]*"
defaultValue={system.requiredPower}
onBlur={(e: any) => {
if (isNaN(Number(e.target.value))) return;
q.plugin.systems.update.netSend({
pluginId,
systemId: systemId,
shipId,
shipPluginId,
requiredPower: Number(e.target.value),
});
}}
/>
<OverrideResetButton
property="requiredPower"
setRekey={setRekey}
className="mt-6"
/>
</div>

<div className="pb-4 flex">
<Input
labelHidden={false}
label="Default Power"
helperText="The normal amount of power this system will request in MegaWatts."
type="text"
inputMode="numeric"
pattern="[0-9]*"
defaultValue={system.defaultPower}
onBlur={(e: any) => {
if (isNaN(Number(e.target.value))) return;
q.plugin.systems.update.netSend({
pluginId,
systemId: systemId,
shipId,
shipPluginId,
defaultPower: Number(e.target.value),
});
}}
/>
<OverrideResetButton
property="defaultPower"
setRekey={setRekey}
className="mt-6"
/>
</div>
<div className="pb-4 flex">
<Input
labelHidden={false}
label="Max Safe Power"
helperText="The maximum recommended amount of power for this system in MegaWatts. Any additional power consumption will cause the system to sustain damage."
type="text"
inputMode="numeric"
pattern="[0-9]*"
defaultValue={system.maxSafePower}
onBlur={(e: any) => {
if (isNaN(Number(e.target.value))) return;
q.plugin.systems.update.netSend({
pluginId,
systemId: systemId,
shipId,
shipPluginId,
maxSafePower: Number(e.target.value),
});
}}
/>
<OverrideResetButton
property="maxSafePower"
setRekey={setRekey}
className="mt-6"
/>
</div>
</div>
</div>
</fieldset>
);
}
1 change: 0 additions & 1 deletion client/src/pages/Config/ShipSystems/SettingsList.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,5 @@ const links = {
basic: "Basic",
system: "System",
power: "Power",
efficiency: "Efficiency",
heat: "Heat",
};
13 changes: 13 additions & 0 deletions client/src/pages/Config/data/systems/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,9 @@ export const systems = t.router({
name: z.string().optional(),
description: z.string().optional(),
tags: z.string().array().optional(),
requiredPower: z.number().optional(),
defaultPower: z.number().optional(),
maxSafePower: z.number().optional(),
})
)
.send(async ({ctx, input}) => {
Expand Down Expand Up @@ -135,6 +138,16 @@ export const systems = t.router({
shipId: input.shipId,
});
}

if (typeof input.requiredPower === "number") {
shipSystem.requiredPower = input.requiredPower;
}
if (typeof input.defaultPower === "number") {
shipSystem.defaultPower = input.defaultPower;
}
if (typeof input.maxSafePower === "number") {
shipSystem.maxSafePower = input.maxSafePower;
}
pubsub.publish.plugin.systems.all({pluginId: input.pluginId});
pubsub.publish.plugin.systems.get({
pluginId: input.pluginId,
Expand Down
18 changes: 17 additions & 1 deletion server/src/classes/Plugins/ShipSystems/BaseSystem.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import {generateIncrementedName} from "server/src/utils/generateIncrementedName"
import {Aspect} from "../Aspect";
import BasePlugin from "..";
import {ShipSystemTypes, ShipSystemFlags} from "./shipSystemTypes";
import {MegaWatt} from "@server/utils/unitTypes";

/**
* The base class to use when creating system plugins
Expand All @@ -21,7 +22,18 @@ export default class BaseShipSystemPlugin extends Aspect {
* for this system
*/
assets: {};
allowMultiple: boolean = false;
allowMultiple: boolean;

///////////
// Power //
///////////
/** The minimum amount of power required to make this system operate */
requiredPower: MegaWatt;
/** The normal amount of power this system will request */
defaultPower: MegaWatt;
/** The threshold of power usage for safely using this system */
maxSafePower: MegaWatt;

constructor(params: Partial<BaseShipSystemPlugin>, plugin: BasePlugin) {
const name = generateIncrementedName(
params.name || `New ${params.type}`,
Expand All @@ -35,5 +47,9 @@ export default class BaseShipSystemPlugin extends Aspect {
this.assets = params.assets || {
soundEffects: [],
};
this.allowMultiple = params.allowMultiple ?? false;
this.requiredPower = params.requiredPower || 5;
this.defaultPower = params.defaultPower || 10;
this.maxSafePower = params.maxSafePower || 20;
}
}
3 changes: 1 addition & 2 deletions server/src/components/efficiency.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,5 @@ import {Component} from "./utils";
export class EfficiencyComponent extends Component {
static id = "efficiency" as const;

/** TODO April 27 2022 */
value: number = 0;
efficiency: number = 1;
}
20 changes: 18 additions & 2 deletions server/src/components/power.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
import {KiloWatt, MegaWatt} from "@server/utils/unitTypes";
import {Component} from "./utils";

export class PowerComponent extends Component {
static id = "power" as const;

/** TODO April 27 2022 - Implement this */
value: number = 0;
/** The minimum amount of power required to make this system operate */
requiredPower: MegaWatt = 5;

/** The normal amount of power this system will request */
defaultPower: MegaWatt = 10;

/** The threshold of power usage for safely using this system */
maxSafePower: MegaWatt = 20;

/** The current power provided to this system, calculated every frame */
currentPower: MegaWatt = 10;

/** How much power the system is currently drawing, calculated every frame */
powerDraw: MegaWatt = 0;

/** How much power is currently being requested. Could be more than the maxSafePower */
requestedPower: MegaWatt = 10;
}

0 comments on commit 186ca25

Please sign in to comment.