@civ-clone/core-science
Version:
The basics of having the concept of research. Includes `Advance`s and associated `Registry`s and the `PlayerResearch` class to manage a `Player`s research projects and progress towards it.
34 lines (26 loc) • 879 B
text/typescript
import {
EntityRegistry,
IEntityRegistry,
} from '@civ-clone/core-registry/EntityRegistry';
import Player from '@civ-clone/core-player/Player';
import PlayerResearch from './PlayerResearch';
interface IPlayerResearchRegistry extends IEntityRegistry<PlayerResearch> {
getByPlayer(player: Player): PlayerResearch;
}
export class PlayerResearchRegistry
extends EntityRegistry<PlayerResearch>
implements IPlayerResearchRegistry
{
constructor() {
super(PlayerResearch);
}
getByPlayer(player: Player): PlayerResearch {
const playerResearch: PlayerResearch[] = this.getBy('player', player);
if (playerResearch.length !== 1) {
throw new TypeError('Wrong number of results for player.');
}
return playerResearch[0];
}
}
export const instance: PlayerResearchRegistry = new PlayerResearchRegistry();
export default PlayerResearchRegistry;