Initial commit

This commit is contained in:
JB
2026-01-14 20:21:44 -05:00
commit e9865d3ee8
237 changed files with 15121 additions and 0 deletions

View File

@@ -0,0 +1,105 @@
import { ActivityType, type TypeIDQuantity } from './shared-types';
import type { Type } from './type';
import { getType } from './type';
import { dataSets, loadModels } from './loadModels';
export interface Activity {
time: number;
}
export interface ManufacturingActivity extends Activity {
time: number;
materials: { [type_id: string]: TypeIDQuantity };
products: { [type_id: string]: TypeIDQuantity };
}
export interface InventionActivity extends Activity {
time: number;
materials: { [type_id: string]: TypeIDQuantity };
products: { [type_id: string]: TypeIDQuantity };
skills: { [skill_type_id: string]: number }; // skill_type_id : level
}
export interface TypeQuantity {
type: Type;
quantity: number;
}
export interface Blueprint {
readonly blueprint_type_id: number;
readonly max_production_limit: number;
readonly activities: {
[ActivityType.MANUFACTURING]?: ManufacturingActivity;
[ActivityType.RESEARCH_MATERIAL]?: Activity;
[ActivityType.RESEARCH_TIME]?: Activity;
[ActivityType.COPYING]?: Activity;
[ActivityType.INVENTION]?: InventionActivity;
};
}
export function getBlueprint(blueprint_type_id: number) {
if (!dataSets.loaded) loadModels();
const data = dataSets.blueprints[String(blueprint_type_id)];
if (!data) throw new Error(`Blueprint Type ID ${blueprint_type_id} not found in reference data`);
return data;
}
export function getManufacturingMaterials(blueprint: Blueprint) {
const manufacturing = blueprint.activities[ActivityType.MANUFACTURING];
if (!manufacturing) return [];
return Promise.all(
Object.entries(manufacturing.materials).map(([type_id, { quantity }]) => ({
type: getType(parseInt(type_id)),
quantity,
})),
);
}
export function getManufacturingProducts(blueprint: Blueprint) {
const manufacturing = blueprint.activities[ActivityType.MANUFACTURING];
if (!manufacturing) return [];
return Promise.all(
Object.entries(manufacturing.products).map(([type_id, { quantity }]) => ({
type: getType(parseInt(type_id)),
quantity,
})),
);
}
export function getInventionMaterials(blueprint: Blueprint) {
const invention = blueprint.activities[ActivityType.INVENTION];
if (!invention) return [];
return Promise.all(
Object.entries(invention.materials).map(([type_id, { quantity }]) => ({
type: getType(parseInt(type_id)),
quantity,
})),
);
}
export function getInventionProducts(blueprint: Blueprint) {
const invention = blueprint.activities[ActivityType.INVENTION];
if (!invention) return [];
return Promise.all(
Object.entries(invention.products).map(([type_id, { quantity }]) => ({
type: getType(parseInt(type_id)),
quantity,
})),
);
}
export function getInventionSkills(blueprint: Blueprint) {
const invention = blueprint.activities[ActivityType.INVENTION];
if (!invention) return [];
return Promise.all(
Object.entries(invention.skills).map(([skill_type_id, level]) => ({
type: getType(parseInt(skill_type_id)),
level,
})),
);
}