Skip to content

Commit

Permalink
fix(command): filter hit messages (fixes #82)
Browse files Browse the repository at this point in the history
  • Loading branch information
ssube committed May 29, 2021
1 parent 13858ea commit 28c239b
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 21 deletions.
25 changes: 20 additions & 5 deletions src/script/common/ActorStep.ts
Expand Up @@ -3,7 +3,7 @@ import { InvalidArgumentError, isNil, mustExist } from '@apextoaster/js-utils';
import { Actor, ActorType, isActor } from '../../model/entity/Actor';
import { isItem } from '../../model/entity/Item';
import { isRoom } from '../../model/entity/Room';
import { ScriptContext, ScriptTarget } from '../../service/script';
import { ScriptContext, ScriptTarget, ShowMessageVolume } from '../../service/script';
import {
SLOT_HIT,
SLOT_USE,
Expand Down Expand Up @@ -117,17 +117,26 @@ export async function ActorStepHit(this: Actor, context: ScriptContext): Promise
const target = indexEntity(results, command.index, isActor);

if (isNil(target)) {
await context.focus.show('actor.step.hit.type', { command });
await context.focus.show('actor.step.hit.type', { command }, {
source: this,
volume: ShowMessageVolume.SELF,
});
return;
}

if (this === target) {
await context.focus.show('actor.step.hit.self', { command });
await context.focus.show('actor.step.hit.self', { command }, {
source: this,
volume: ShowMessageVolume.SELF,
});
return;
}

if (this.items.length === 0) {
await context.focus.show('actor.step.hit.item', { target });
await context.focus.show('actor.step.hit.item', { target }, {
source: this,
volume: ShowMessageVolume.SELF,
});
return;
}

Expand Down Expand Up @@ -244,7 +253,13 @@ export async function ActorStepMove(this: Actor, context: ScriptContext): Promis
}

// move the actor and focus
await context.focus.show('actor.step.move.portal', { actor: this, portal: targetPortal });
await context.focus.show('actor.step.move.portal', {
actor: this,
portal: targetPortal,
}, {
source: this,
volume: ShowMessageVolume.SELF,
});
await context.transfer.moveActor({
moving: this,
source: currentRoom.meta.id,
Expand Down
13 changes: 12 additions & 1 deletion src/service/script/index.ts
Expand Up @@ -11,6 +11,17 @@ import { SearchParams } from '../../util/state';
import { Immutable, ScriptData } from '../../util/types';
import { RandomGenerator } from '../random';

export enum ShowMessageVolume {
SELF = 'self', // narrowest scope
ROOM = 'room',
WORLD = 'world',
}

export interface ShowSource {
source: WorldEntity;
volume: ShowMessageVolume;
}

export interface ScriptFocus {
/**
* Set the currently-focused room.
Expand All @@ -25,7 +36,7 @@ export interface ScriptFocus {
/**
* Display a message from an entity.
*/
show(msg: string, context?: LocaleContext): Promise<void>;
show(msg: string, context?: LocaleContext, source?: ShowSource): Promise<void>;
}

export interface TransferParams<TEntity extends WorldEntity> {
Expand Down
15 changes: 1 addition & 14 deletions src/util/state/FocusResolver.ts
Expand Up @@ -2,13 +2,11 @@ import { doesExist, InvalidArgumentError, mustExist } from '@apextoaster/js-util
import { BaseOptions } from 'noicejs';

import { findRoom, searchState } from '.';
import { WorldEntity } from '../../model/entity';
import { Actor, ACTOR_TYPE, isActor } from '../../model/entity/Actor';
import { ITEM_TYPE } from '../../model/entity/Item';
import { isRoom, Room, ROOM_TYPE } from '../../model/entity/Room';
import { State } from '../../model/State';
import { LocaleContext } from '../../service/locale';
import { ScriptFocus } from '../../service/script';
import { ScriptFocus, ShowMessageVolume, ShowSource } from '../../service/script';

export type FocusChangeRoom = (room: Room) => Promise<void>;
export type FocusChangeActor = (actor: Actor) => Promise<void>;
Expand All @@ -25,17 +23,6 @@ interface StateFocusResolverOptions extends BaseOptions {
state?: State;
}

export enum ShowMessageVolume {
SELF = 'self', // narrowest scope
ROOM = 'room',
WORLD = 'world',
}

interface ShowSource {
source: WorldEntity;
volume: ShowMessageVolume;
}

/**
* Manages the `focus` field within world state, along with filtering output based on the current focus.
*/
Expand Down
3 changes: 2 additions & 1 deletion test/util/state/TestFocus.ts
Expand Up @@ -8,7 +8,8 @@ import { ITEM_TYPE } from '../../../src/model/entity/Item';
import { ROOM_TYPE } from '../../../src/model/entity/Room';
import { State } from '../../../src/model/State';
import { LocalModule } from '../../../src/module/LocalModule';
import { ShowMessageVolume, StateFocusResolver } from '../../../src/util/state/FocusResolver';
import { ShowMessageVolume } from '../../../src/service/script';
import { StateFocusResolver } from '../../../src/util/state/FocusResolver';

const TEST_STATE: State = {
focus: {
Expand Down

0 comments on commit 28c239b

Please sign in to comment.