Mirroar/hivemind

View on GitHub
src/player-intel-manager.ts

Summary

Maintainability
A
0 mins
Test Coverage
import PlayerIntel from './player-intel';
import hivemind from './hivemind';

export default class PlayerIntelManager {
    intelCache: Record<string, PlayerIntel> = {};

    /**
     * Factory method for player intel objects.
     *
     * @param {string} userName
     *   The user for whom to get intel.
     *
     * @return {PlayerIntel}
     *   The requested PlayerIntel object.
     */
    get(userName: string): PlayerIntel {
        if (!hivemind.segmentMemory.isReady()) throw new Error('Memory is not ready to generate player intel for user "' + userName + '".');

        if (!this.intelCache[userName]) {
            this.intelCache[userName] = new PlayerIntel(userName);
        }

        return this.intelCache[userName];
    }

    getAll(): PlayerIntel[] {
        if (!hivemind.segmentMemory.isReady()) throw new Error('Memory is not ready to generate player intel.');

        const result = [];
        hivemind.segmentMemory.each('u-intel:', key => {
            const userName = key.slice(8);
            const intel = this.get(userName);

            result.push(intel);
        });

        return result;
    }

    updateOwnedRoom(userName: string, roomName: string) {
        const playerIntel = this.get(userName);

        playerIntel.updateOwnedRoom(roomName);
    }

    updateClaimedRoom(userName: string, roomName: string) {
        const playerIntel = this.get(userName);

        playerIntel.updateRemote(roomName);
    }

    updateCreepSighting(userName: string, roomName: string, creeps: Creep[]) {
        const playerIntel = this.get(userName);

        playerIntel.updateCreeps(creeps);
    }
}