tech-tycoon-server/src/state/item.ts

214 lines
4 KiB
TypeScript

import type { Company } from "./company.js";
import type { ConnectorType } from "./connector.js";
import type { SocketType } from "./cpu.js";
import type { MemoryType } from "./memory.js";
import type { DiscType, DiskType, IStorage } from "./storage.js";
import type { INet } from "./types.js";
enum ItemType {
SCREWDRIVER,
CPU,
GRAPHIC_CARD,
RAM_MODULE,
DISK,
DISC,
TAPE,
VHS,
DISKETTE,
CASE,
PSU,
MOTHERBOARD,
FAN,
CPU_COOLER,
GPU_COOLER,
NETWORK_CARD,
SOUND_CARD,
NETWORK_SWITCH,
WIFI_AP,
ROUTER,
MODEM,
MONITOR,
KEYBOARD,
MOUSE,
JOYSTICK,
HEADPHONES,
DAC,
MICROPHONE,
CAMERA,
PHONE,
LAPTOP,
COMPUTER,
SECURITY_KEY,
}
enum FormFactorType {
M_ATX,
ATX,
E_ATX,
}
interface IItem {
type: ItemType;
name: string;
durability: number;
manufacturer?: Company | "Player";
availability?: number;
rarity?: number;
price?: number;
canFitInComputerCase?: boolean;
canFitInLaptopCase?: boolean;
canFitInMobileCase?: boolean;
}
interface IConnectedDevice extends IItem {
connector: ConnectorType;
}
interface IScrewdriver extends IItem {
quality: number;
}
interface ICPUCore {
originalClockSpeed: number;
clockSpeed: number;
threads: number;
cacheL1?: number;
cacheL2?: number;
}
interface ICPU extends IItem {
cores: ICPUCore[];
cacheL3?: number;
cacheL4?: number;
gpu?: IGPU;
npu?: INPU;
tdp: number;
process: number;
socket: SocketType;
}
interface IGPU extends IItem {
originalClockSpeed: number;
clockSpeed: number;
coreCount: number;
shadingUnitCount: number;
tmuCount: number;
ropCount: number;
tensorCoreCount: number;
rtCoreCount: number;
cacheL0?: number;
cacheL1?: number;
cacheL2?: number;
cacheL3?: number;
tops: number;
pixelRate: number;
textureRate: number;
fp16flops: number;
fp32flops: number;
fp64flops: number;
features: IGPUFeatures;
process: number;
}
interface INPU extends IItem {
tops: number;
}
interface IGPUFeatures {
directxVersion?: number;
openglVersion?: number;
openclVersion?: number;
vulkanVersion?: number;
cudaVersion?: number;
shaderModel?: number;
}
interface IGraphicsCard extends IConnectedDevice {
gpu: IGPU;
memory: IGraphicsCardMemory;
tdp: number;
}
interface IGraphicsCardMemory {
type: MemoryType;
originalClockSpeed: number;
clockSpeed: number;
busWidth: number;
bandwidth: number;
capacity: number;
}
interface IRAMModule extends IItem {
memoryType: MemoryType;
originalClockSpeed: number;
clockSpeed: number;
capacity: number;
tdp: number;
}
interface IDisk extends IConnectedDevice {
diskType: DiskType;
bandwidth: number;
capacity: number;
tdp: number;
storage: IStorage;
}
interface IDisc extends IItem {
discType: DiscType;
bandwidth: number;
capacity: number;
storage: IStorage;
}
interface ICase extends IItem {
formFactor: FormFactorType;
width: number;
height: number;
depth: number;
installedDevices: IItem[];
}
interface IPSU extends IItem {
formFactor: FormFactorType;
width: number;
height: number;
depth: number;
wattage: number;
connectors: ConnectorType[];
}
interface IMotherboard extends IItem {
formFactor: FormFactorType;
connectors: ConnectorType[];
socket: SocketType;
socketCount: number;
memoryType: MemoryType;
memorySlots: number;
installedCPUs: ICPU[];
installedRAMs: IRAMModule[];
installedDevices: IConnectedDevice[];
}
interface IModem extends IItem {
bandwidth: number;
net: INet;
}
export {
ItemType,
FormFactorType,
type IItem,
type IConnectedDevice,
type IScrewdriver,
type ICPU,
type IGPU,
type IGraphicsCard,
type IRAMModule,
type IDisk,
type IDisc,
type ICase,
type IPSU,
type IMotherboard,
type IModem,
};