Compare commits
2 Commits
80867d6ccf
...
16db8ee0be
Author | SHA1 | Date | |
---|---|---|---|
16db8ee0be | |||
6f1c3b3070 |
@ -4,6 +4,27 @@ import type { VillageState } from "./village";
|
|||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
'townhall': {
|
||||||
|
name: 'Town Hall',
|
||||||
|
cost: (level: number) => {
|
||||||
|
return {
|
||||||
|
wood: level * 10,
|
||||||
|
stone: level * 10,
|
||||||
|
iron: level * 10,
|
||||||
|
food: 0,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
behavior: {
|
||||||
|
storage: (_V: VillageState, _self: Building) => {
|
||||||
|
return {
|
||||||
|
'wood': 100,
|
||||||
|
'stone': 100,
|
||||||
|
'iron': 100,
|
||||||
|
'food': 100,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
'woodcutter': {
|
'woodcutter': {
|
||||||
name: 'Woodcutter',
|
name: 'Woodcutter',
|
||||||
cost: (level: number) => {
|
cost: (level: number) => {
|
||||||
@ -19,9 +40,13 @@ export default {
|
|||||||
const prod = getEmptyResources();
|
const prod = getEmptyResources();
|
||||||
const outputPerMinute = 5 * (self.level * self.level);
|
const outputPerMinute = 5 * (self.level * self.level);
|
||||||
prod.wood = outputPerMinute;
|
prod.wood = outputPerMinute;
|
||||||
|
|
||||||
|
const intakePerMinute = Math.ceil(self.level / 5);
|
||||||
|
prod.food = -intakePerMinute;
|
||||||
|
|
||||||
return prod;
|
return prod;
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
'mine': {
|
'mine': {
|
||||||
name: 'Mine',
|
name: 'Mine',
|
||||||
@ -38,9 +63,13 @@ export default {
|
|||||||
const prod = getEmptyResources();
|
const prod = getEmptyResources();
|
||||||
const outputPerMinute = 5 * (self.level * self.level);
|
const outputPerMinute = 5 * (self.level * self.level);
|
||||||
prod.iron = outputPerMinute;
|
prod.iron = outputPerMinute;
|
||||||
|
|
||||||
|
const intakePerMinute = Math.ceil(self.level / 5);
|
||||||
|
prod.food = -intakePerMinute;
|
||||||
|
|
||||||
return prod;
|
return prod;
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
'pit': {
|
'pit': {
|
||||||
name: 'Pit',
|
name: 'Pit',
|
||||||
@ -57,9 +86,32 @@ export default {
|
|||||||
const prod = getEmptyResources();
|
const prod = getEmptyResources();
|
||||||
const outputPerMinute = 5 * (self.level * self.level);
|
const outputPerMinute = 5 * (self.level * self.level);
|
||||||
prod.stone = outputPerMinute;
|
prod.stone = outputPerMinute;
|
||||||
|
|
||||||
|
const intakePerMinute = Math.ceil(self.level / 5);
|
||||||
|
prod.food = -intakePerMinute;
|
||||||
|
|
||||||
return prod;
|
return prod;
|
||||||
}
|
},
|
||||||
}
|
},
|
||||||
|
},
|
||||||
|
'field': {
|
||||||
|
name: 'Field',
|
||||||
|
cost: (level: number) => {
|
||||||
|
return {
|
||||||
|
wood: level * 10,
|
||||||
|
stone: level * 10,
|
||||||
|
iron: level * 10,
|
||||||
|
food: 0,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
behavior: {
|
||||||
|
production: (V: VillageState, self: Building) => {
|
||||||
|
const prod = getEmptyResources();
|
||||||
|
const outputPerMinute = 5 * (self.level * self.level);
|
||||||
|
prod.food = outputPerMinute;
|
||||||
|
return prod;
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'warehouse': {
|
'warehouse': {
|
||||||
name: 'Warehouse',
|
name: 'Warehouse',
|
||||||
@ -80,8 +132,8 @@ export default {
|
|||||||
'stone': capacity,
|
'stone': capacity,
|
||||||
'iron': capacity,
|
'iron': capacity,
|
||||||
'food': 0,
|
'food': 0,
|
||||||
}
|
};
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
'granary': {
|
'granary': {
|
||||||
@ -103,8 +155,8 @@ export default {
|
|||||||
'stone': 0,
|
'stone': 0,
|
||||||
'iron': 0,
|
'iron': 0,
|
||||||
'food': capacity,
|
'food': capacity,
|
||||||
}
|
};
|
||||||
}
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
13
src/create.ts
Normal file
13
src/create.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import type { Building, BuildingSource } from "./types";
|
||||||
|
|
||||||
|
|
||||||
|
let uid = 0;
|
||||||
|
|
||||||
|
|
||||||
|
export function createBuilding(building: BuildingSource): Building {
|
||||||
|
return {
|
||||||
|
...building,
|
||||||
|
level: 1,
|
||||||
|
id: uid++,
|
||||||
|
};
|
||||||
|
}
|
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
|
|
||||||
function build(type: string) {
|
function build(type: string) {
|
||||||
if (moves.createBuilding(type)) {
|
if (moves.build(type)) {
|
||||||
close();
|
close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
import buildings from "../buildings";
|
import buildings from "../buildings";
|
||||||
|
import { createBuilding } from "../create";
|
||||||
import type { VillageState } from "../village";
|
import type { VillageState } from "../village";
|
||||||
|
|
||||||
|
|
||||||
let uid = 0;
|
export default function build(V: VillageState, buildingType: keyof typeof buildings) {
|
||||||
|
|
||||||
|
|
||||||
export default function createBuilding(V: VillageState, buildingType: keyof typeof buildings) {
|
|
||||||
const building = buildings[buildingType];
|
const building = buildings[buildingType];
|
||||||
const cost = building.cost(1);
|
const cost = building.cost(1);
|
||||||
|
|
||||||
@ -23,12 +21,7 @@ export default function createBuilding(V: VillageState, buildingType: keyof type
|
|||||||
V.resources.iron -= cost.iron;
|
V.resources.iron -= cost.iron;
|
||||||
V.resources.food -= cost.food;
|
V.resources.food -= cost.food;
|
||||||
|
|
||||||
const newBuilding = {
|
V.buildings.push(createBuilding(building));
|
||||||
...building,
|
|
||||||
level: 1,
|
|
||||||
id: uid++,
|
|
||||||
};
|
|
||||||
V.buildings.push(newBuilding);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
import { produce } from 'immer';
|
import { produce } from 'immer';
|
||||||
|
|
||||||
import village, { type VillageState } from '../village';
|
import village, { type VillageState } from '../village';
|
||||||
import createBuilding from './createBuilding';
|
import build from './build';
|
||||||
import upgradeBuilding from './upgradeBuilding';
|
import upgradeBuilding from './upgradeBuilding';
|
||||||
|
|
||||||
|
|
||||||
@ -28,6 +28,6 @@ export function makeMove(move: (...args: any[]) => boolean) {
|
|||||||
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
createBuilding: makeMove(createBuilding),
|
build: makeMove(build),
|
||||||
upgradeBuilding: makeMove(upgradeBuilding),
|
upgradeBuilding: makeMove(upgradeBuilding),
|
||||||
};
|
};
|
||||||
|
@ -11,7 +11,6 @@ export type Production = Cost;
|
|||||||
|
|
||||||
export interface BuildingSource {
|
export interface BuildingSource {
|
||||||
name: string;
|
name: string;
|
||||||
level: number;
|
|
||||||
cost: (level: number) => Cost;
|
cost: (level: number) => Cost;
|
||||||
behavior: {
|
behavior: {
|
||||||
production?: Function;
|
production?: Function;
|
||||||
@ -22,4 +21,5 @@ export interface BuildingSource {
|
|||||||
|
|
||||||
export interface Building extends BuildingSource {
|
export interface Building extends BuildingSource {
|
||||||
id: number;
|
id: number;
|
||||||
|
level: number;
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
|
|
||||||
import buildings from "./buildings";
|
import buildings from "./buildings";
|
||||||
|
import { createBuilding } from "./create";
|
||||||
import type { Building } from "./types";
|
import type { Building } from "./types";
|
||||||
|
|
||||||
|
|
||||||
@ -14,30 +16,20 @@ export interface VillageState {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
let uid = 0;
|
|
||||||
|
|
||||||
const village = writable<VillageState>({
|
const village = writable<VillageState>({
|
||||||
buildings: [
|
buildings: [
|
||||||
{ ...buildings.woodcutter, level: 1, id: uid++ },
|
createBuilding(buildings.townhall),
|
||||||
{ ...buildings.woodcutter, level: 1, id: uid++ },
|
createBuilding(buildings.woodcutter),
|
||||||
{ ...buildings.woodcutter, level: 1, id: uid++ },
|
createBuilding(buildings.pit),
|
||||||
{ ...buildings.woodcutter, level: 1, id: uid++ },
|
createBuilding(buildings.mine),
|
||||||
{ ...buildings.mine, level: 1, id: uid++ },
|
createBuilding(buildings.field),
|
||||||
{ ...buildings.mine, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.mine, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.mine, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.pit, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.pit, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.pit, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.pit, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.warehouse, level: 1, id: uid++ },
|
|
||||||
{ ...buildings.granary, level: 1, id: uid++ },
|
|
||||||
],
|
],
|
||||||
resources: {
|
resources: {
|
||||||
wood: 100,
|
wood: 60,
|
||||||
stone: 100,
|
stone: 60,
|
||||||
iron: 100,
|
iron: 60,
|
||||||
food: 0,
|
food: 50,
|
||||||
culture: 0,
|
culture: 0,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user