106 lines
3.0 KiB
TypeScript
106 lines
3.0 KiB
TypeScript
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,
|
|
})),
|
|
);
|
|
}
|