From ecc82a9dce5835ae43da91e27ae89bad02bf5f27 Mon Sep 17 00:00:00 2001 From: Dustlint Date: Tue, 17 Mar 2026 16:01:33 +0100 Subject: [PATCH] visitor list --- .../food-pantry/food-pantry.component.html | 0 .../food-pantry/food-pantry.component.spec.ts | 0 .../food-pantry/food-pantry.component.ts | 8 +++---- .../inventory/inventory.component.html | 0 .../inventory/inventory.component.spec.ts | 0 .../inventory/inventory.component.ts | 2 +- .../visitor-list/visitor-list.component.html | 14 +++++++++++ .../visitor-list.component.spec.ts | 23 +++++++++++++++++++ .../visitor-list/visitor-list.component.ts | 17 ++++++++++++++ .../interactions/interactions.component.html | 20 ++++++++++++++-- .../interactions/interactions.component.ts | 20 ++++++++++++---- src/app/types/translations/english.ts | 4 +++- src/app/types/translations/translation.ts | 2 ++ 13 files changed, 98 insertions(+), 12 deletions(-) rename src/app/components/{ => interaction-menus}/food-pantry/food-pantry.component.html (100%) rename src/app/components/{ => interaction-menus}/food-pantry/food-pantry.component.spec.ts (100%) rename src/app/components/{ => interaction-menus}/food-pantry/food-pantry.component.ts (72%) rename src/app/components/{ => interaction-menus}/inventory/inventory.component.html (100%) rename src/app/components/{ => interaction-menus}/inventory/inventory.component.spec.ts (100%) rename src/app/components/{ => interaction-menus}/inventory/inventory.component.ts (85%) create mode 100644 src/app/components/interaction-menus/visitor-list/visitor-list.component.html create mode 100644 src/app/components/interaction-menus/visitor-list/visitor-list.component.spec.ts create mode 100644 src/app/components/interaction-menus/visitor-list/visitor-list.component.ts diff --git a/src/app/components/food-pantry/food-pantry.component.html b/src/app/components/interaction-menus/food-pantry/food-pantry.component.html similarity index 100% rename from src/app/components/food-pantry/food-pantry.component.html rename to src/app/components/interaction-menus/food-pantry/food-pantry.component.html diff --git a/src/app/components/food-pantry/food-pantry.component.spec.ts b/src/app/components/interaction-menus/food-pantry/food-pantry.component.spec.ts similarity index 100% rename from src/app/components/food-pantry/food-pantry.component.spec.ts rename to src/app/components/interaction-menus/food-pantry/food-pantry.component.spec.ts diff --git a/src/app/components/food-pantry/food-pantry.component.ts b/src/app/components/interaction-menus/food-pantry/food-pantry.component.ts similarity index 72% rename from src/app/components/food-pantry/food-pantry.component.ts rename to src/app/components/interaction-menus/food-pantry/food-pantry.component.ts index 64d122e..9f1491a 100644 --- a/src/app/components/food-pantry/food-pantry.component.ts +++ b/src/app/components/interaction-menus/food-pantry/food-pantry.component.ts @@ -1,8 +1,8 @@ import { Component, inject, input, InputSignal, output, OutputEmitterRef, Signal } from '@angular/core'; -import { ButtonComponent } from "../ui-elements/button/button.component"; -import { Food } from '../../types/food'; -import { FoodStore } from '../../api/food.store'; -import { GridComponent } from "../grid/grid.component"; +import { ButtonComponent } from "../../ui-elements/button/button.component"; +import { Food } from '../../../types/food'; +import { FoodStore } from '../../../api/food.store'; +import { GridComponent } from "../../grid/grid.component"; @Component({ selector: 'ff-food-pantry', diff --git a/src/app/components/inventory/inventory.component.html b/src/app/components/interaction-menus/inventory/inventory.component.html similarity index 100% rename from src/app/components/inventory/inventory.component.html rename to src/app/components/interaction-menus/inventory/inventory.component.html diff --git a/src/app/components/inventory/inventory.component.spec.ts b/src/app/components/interaction-menus/inventory/inventory.component.spec.ts similarity index 100% rename from src/app/components/inventory/inventory.component.spec.ts rename to src/app/components/interaction-menus/inventory/inventory.component.spec.ts diff --git a/src/app/components/inventory/inventory.component.ts b/src/app/components/interaction-menus/inventory/inventory.component.ts similarity index 85% rename from src/app/components/inventory/inventory.component.ts rename to src/app/components/interaction-menus/inventory/inventory.component.ts index 667636f..cd51d27 100644 --- a/src/app/components/inventory/inventory.component.ts +++ b/src/app/components/interaction-menus/inventory/inventory.component.ts @@ -1,5 +1,5 @@ import { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core'; -import { ButtonComponent } from "../ui-elements/button/button.component"; +import { ButtonComponent } from "../../ui-elements/button/button.component"; @Component({ selector: 'ff-inventory', diff --git a/src/app/components/interaction-menus/visitor-list/visitor-list.component.html b/src/app/components/interaction-menus/visitor-list/visitor-list.component.html new file mode 100644 index 0000000..0f30ebd --- /dev/null +++ b/src/app/components/interaction-menus/visitor-list/visitor-list.component.html @@ -0,0 +1,14 @@ +@if (isVisible()) { +
+
+
+

visitor List works!

+ X +
+
+
+} diff --git a/src/app/components/interaction-menus/visitor-list/visitor-list.component.spec.ts b/src/app/components/interaction-menus/visitor-list/visitor-list.component.spec.ts new file mode 100644 index 0000000..19a2fda --- /dev/null +++ b/src/app/components/interaction-menus/visitor-list/visitor-list.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { VisitorListComponent } from './visitor-list.component'; + +describe('InventoryComponent', () => { + let component: VisitorListComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [VisitorListComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(VisitorListComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/components/interaction-menus/visitor-list/visitor-list.component.ts b/src/app/components/interaction-menus/visitor-list/visitor-list.component.ts new file mode 100644 index 0000000..2d59fff --- /dev/null +++ b/src/app/components/interaction-menus/visitor-list/visitor-list.component.ts @@ -0,0 +1,17 @@ +import { Component, input, InputSignal, output, OutputEmitterRef } from '@angular/core'; +import { ButtonComponent } from "../../ui-elements/button/button.component"; +import { Chibi } from '../../../types/chibi/chibi'; + +@Component({ + selector: 'ff-visitor-list', + imports: [ButtonComponent], + templateUrl: './visitor-list.component.html', +}) +export class VisitorListComponent { + public readonly isVisible: InputSignal = input.required(); + public readonly host: InputSignal = input.required(); + public readonly visitors: InputSignal = input.required(); + public readonly onClose: OutputEmitterRef = output(); + public readonly onItemChosen: OutputEmitterRef = output(); + +} diff --git a/src/app/pages/interactions/interactions.component.html b/src/app/pages/interactions/interactions.component.html index 8770187..8f65de9 100644 --- a/src/app/pages/interactions/interactions.component.html +++ b/src/app/pages/interactions/interactions.component.html @@ -25,6 +25,13 @@ (onClose)="closeMenu()" > + +
{{ lang.game.actions.giveItem @@ -32,9 +39,18 @@ {{ lang.game.actions.feed }} - {{ - lang.game.actions.wakeUp + {{ + lang.game.actions.inviteVisitor }} + @if (isAwake()) { + {{ + lang.game.actions.wakeUp + }} + } @else { + {{ + lang.game.actions.putToSleep + }} + }
diff --git a/src/app/pages/interactions/interactions.component.ts b/src/app/pages/interactions/interactions.component.ts index 30fabd7..047d2d2 100644 --- a/src/app/pages/interactions/interactions.component.ts +++ b/src/app/pages/interactions/interactions.component.ts @@ -4,8 +4,8 @@ import { ERouteKey } from '../../types/route-key'; import { Chibi, ChibiId } from '../../types/chibi/chibi'; import { InteractionCanvasComponent } from "../../components/interaction-canvas/interaction-canvas.component"; import { ChibiStore } from '../../api/chibi.store'; -import { FoodPantryComponent } from "../../components/food-pantry/food-pantry.component"; -import { InventoryComponent } from "../../components/inventory/inventory.component"; +import { FoodPantryComponent } from "../../components/interaction-menus/food-pantry/food-pantry.component"; +import { InventoryComponent } from "../../components/interaction-menus/inventory/inventory.component"; import { ButtonComponent } from "../../components/ui-elements/button/button.component"; import { EChibiInteraction } from '../../types/chibi/chibi-interaction'; import { IBrain } from '../../logic/chibi-behaviour/brain'; @@ -15,18 +15,22 @@ import { Food } from '../../types/food'; import { interval, Subscribable, Subscription } from 'rxjs'; import { RandomService } from '../../logic/random.service'; import { ChibiInteraction } from '../../logic/chibi-behaviour/brains/aperio.brain'; +import { isState, STATES } from '../../types/chibi/chibi-state'; +import { EChibiStateName } from '../../types/chibi/chibi-state-name'; +import { VisitorListComponent } from "../../components/interaction-menus/visitor-list/visitor-list.component"; enum EInteractionMenuState { Neutral, Pantry, - Inventory + Inventory, + VisitorList } const THINKING_INTERVAL: number = 2000; @Component({ selector: 'ff-interactions', - imports: [HeaderComponent, InteractionCanvasComponent, FoodPantryComponent, InventoryComponent, ButtonComponent], + imports: [HeaderComponent, InteractionCanvasComponent, FoodPantryComponent, InventoryComponent, ButtonComponent, VisitorListComponent], templateUrl: './interactions.component.html', }) export class InteractionsComponent extends TranslateableComponent implements OnDestroy { @@ -65,6 +69,10 @@ export class InteractionsComponent extends TranslateableComponent implements OnD this.sub.unsubscribe(); } + public isAwake(): boolean { + return isState(STATES[this.chibi().state], EChibiStateName.Awake); + } + public interact(interaction: EChibiInteraction, item?: Food): void { console.log(`${interaction} ${this.chibi().name} and item ${item}`); this.brain.resolveInteraction({ name: interaction, payload: item } as ChibiInteraction); @@ -78,6 +86,10 @@ export class InteractionsComponent extends TranslateableComponent implements OnD this.interactionMenuState.set(EInteractionMenuState.Inventory); } + public openVisitorList(): void { + this.interactionMenuState.set(EInteractionMenuState.VisitorList); + } + public closeMenu(): void { this.interactionMenuState.set(EInteractionMenuState.Neutral); } diff --git a/src/app/types/translations/english.ts b/src/app/types/translations/english.ts index d3b263b..9c8ef1e 100644 --- a/src/app/types/translations/english.ts +++ b/src/app/types/translations/english.ts @@ -16,8 +16,10 @@ export const ENG_TRANSLATIONS: Translation = { inventory: {}, actions: { wakeUp: 'Wake up!', + putToSleep: 'Put to Sleep', feed: 'Feed', - giveItem: 'Give Item' + giveItem: 'Give Item', + inviteVisitor: 'Invite Friend' } } } \ No newline at end of file diff --git a/src/app/types/translations/translation.ts b/src/app/types/translations/translation.ts index f0379bc..a5910e6 100644 --- a/src/app/types/translations/translation.ts +++ b/src/app/types/translations/translation.ts @@ -18,8 +18,10 @@ export type Translation = { inventory: {}, actions: { wakeUp: string; + putToSleep: string; feed: string; giveItem: string; + inviteVisitor: string; } } }