1
0
mirror of https://github.com/tobspr/shapez.io.git synced 2025-06-13 13:04:03 +00:00
tobspr_shapez.io/src/js/game/building_codes.js

84 lines
2.2 KiB
JavaScript
Raw Normal View History

2020-08-10 13:02:14 +00:00
/* typehints:start */
2020-09-17 17:27:21 +00:00
import { MetaBuilding, MetaBuildingVariant } from "./meta_building";
import { AtlasSprite } from "../core/sprites";
import { Vector } from "../core/vector";
2020-08-10 13:02:14 +00:00
/* typehints:end */
/**
* @typedef {{
* metaClass: typeof MetaBuilding,
* metaInstance?: MetaBuilding,
2020-09-17 17:27:21 +00:00
* variant: typeof MetaBuildingVariant,
* rotationVariant?: number,
* tileSize?: Vector,
* sprite?: AtlasSprite,
* blueprintSprite?: AtlasSprite,
* silhouetteColor?: string
* }} BuildingVariantIdentifier
*/
/**
* Stores a lookup table for all building variants (for better performance)
* @type {Object<number, BuildingVariantIdentifier>}
*/
export const gBuildingVariants = {
// Set later
};
/**
2020-08-10 13:02:14 +00:00
* Registers a new variant
2020-09-17 17:27:21 +00:00
* @param {number | string} id
2020-08-10 13:02:14 +00:00
* @param {typeof MetaBuilding} meta
2020-09-17 17:27:21 +00:00
* @param {typeof MetaBuildingVariant} variant
2020-08-10 13:02:14 +00:00
* @param {number} rotationVariant
*/
2020-09-17 17:27:21 +00:00
export function registerBuildingVariant(id, meta, variant, rotationVariant = 0) {
assert(!gBuildingVariants[id], "Duplicate id: " + id);
gBuildingVariants[id] = {
metaClass: meta,
variant,
rotationVariant,
// @ts-ignore
tileSize: new meta().getDimensions(variant),
};
}
/**
*
2020-09-17 17:27:21 +00:00
* @param {number | string} code
* @returns {BuildingVariantIdentifier}
*/
export function getBuildingDataFromCode(code) {
assert(gBuildingVariants[code], "Invalid building code: " + code);
return gBuildingVariants[code];
}
/**
* Finds the code for a given variant
* @param {MetaBuilding} metaBuilding
2020-09-17 17:27:21 +00:00
* @param {typeof MetaBuildingVariant} variant
* @param {number} rotationVariant
*/
export function getCodeFromBuildingData(metaBuilding, variant, rotationVariant) {
for (const key in gBuildingVariants) {
const data = gBuildingVariants[key];
if (
data.metaInstance.getId() === metaBuilding.getId() &&
data.variant === variant &&
data.rotationVariant === rotationVariant
) {
return +key;
}
}
assertAlways(
false,
2020-09-17 17:27:21 +00:00
"Building not found by data: " +
metaBuilding.getId() +
" / " +
variant.getId() +
" / " +
rotationVariant
);
return 0;
}