Add material type definitions
This commit is contained in:
parent
4457368636
commit
dd27634f0c
2 changed files with 61 additions and 0 deletions
38
src/__tests__/materials.test.ts
Normal file
38
src/__tests__/materials.test.ts
Normal file
|
|
@ -0,0 +1,38 @@
|
||||||
|
import { describe, expect, test } from "bun:test";
|
||||||
|
import {
|
||||||
|
BEHAVIOR_GAS,
|
||||||
|
BEHAVIOR_LIQUID,
|
||||||
|
BEHAVIOR_POWDER,
|
||||||
|
BEHAVIOR_SOLID,
|
||||||
|
type Material,
|
||||||
|
} from "../materials/types";
|
||||||
|
|
||||||
|
describe("material types", () => {
|
||||||
|
test("behavior type constants are distinct integers 0-3", () => {
|
||||||
|
const behaviors = [
|
||||||
|
BEHAVIOR_POWDER,
|
||||||
|
BEHAVIOR_LIQUID,
|
||||||
|
BEHAVIOR_GAS,
|
||||||
|
BEHAVIOR_SOLID,
|
||||||
|
];
|
||||||
|
expect(new Set(behaviors).size).toBe(4);
|
||||||
|
for (const b of behaviors) {
|
||||||
|
expect(b).toBeGreaterThanOrEqual(0);
|
||||||
|
expect(b).toBeLessThanOrEqual(3);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
test("Material interface has required fields", () => {
|
||||||
|
const sand: Material = {
|
||||||
|
id: 1,
|
||||||
|
name: "sand",
|
||||||
|
behavior: BEHAVIOR_POWDER,
|
||||||
|
density: 1.5,
|
||||||
|
color: [0.76, 0.7, 0.5, 1.0],
|
||||||
|
hardness: 0.1,
|
||||||
|
angleOfRepose: 34,
|
||||||
|
};
|
||||||
|
expect(sand.behavior).toBe(BEHAVIOR_POWDER);
|
||||||
|
expect(sand.density).toBe(1.5);
|
||||||
|
});
|
||||||
|
});
|
||||||
23
src/materials/types.ts
Normal file
23
src/materials/types.ts
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
export const BEHAVIOR_POWDER = 0;
|
||||||
|
export const BEHAVIOR_LIQUID = 1;
|
||||||
|
export const BEHAVIOR_GAS = 2;
|
||||||
|
export const BEHAVIOR_SOLID = 3;
|
||||||
|
|
||||||
|
export type BehaviorType =
|
||||||
|
| typeof BEHAVIOR_POWDER
|
||||||
|
| typeof BEHAVIOR_LIQUID
|
||||||
|
| typeof BEHAVIOR_GAS
|
||||||
|
| typeof BEHAVIOR_SOLID;
|
||||||
|
|
||||||
|
// RGBA color, each component 0-1
|
||||||
|
export type Color4 = [number, number, number, number];
|
||||||
|
|
||||||
|
export interface Material {
|
||||||
|
id: number; // 0-255, index into lookup texture
|
||||||
|
name: string;
|
||||||
|
behavior: BehaviorType;
|
||||||
|
density: number; // relative weight, determines displacement order
|
||||||
|
color: Color4;
|
||||||
|
hardness: number; // 0-1, resistance to ant digging / degradation
|
||||||
|
angleOfRepose: number; // degrees, used in tier 2 gravity
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue