From 91ead5f0a8902bb934b9a76f43c5818c69f26639 Mon Sep 17 00:00:00 2001 From: Isaac Thoman <49598528+IsaacThoman@users.noreply.github.com> Date: Wed, 22 Jan 2025 16:13:42 -0500 Subject: [PATCH] square corners, better registering/unregistering --- src/app/game/game.component.ts | 6 ++-- src/app/pages/index.page.ts | 22 +++++++++++++- src/app/ui/browse.component.ts | 35 +++++++++++++--------- src/app/ui/menu.component.ts | 50 ++++++++++++++++++++------------ src/app/ui/settings.component.ts | 41 ++++++++++++++++---------- 5 files changed, 102 insertions(+), 52 deletions(-) diff --git a/src/app/game/game.component.ts b/src/app/game/game.component.ts index 3c86e38..8c8a126 100644 --- a/src/app/game/game.component.ts +++ b/src/app/game/game.component.ts @@ -17,9 +17,11 @@ export class GameComponent implements AfterViewInit { this.game = new Game(this.rendererContainer.nativeElement); this.game.start(); - // Listen to pointer lock changes document.addEventListener('pointerlockchange', () => { - this.pointerLockChange.emit(document.pointerLockElement === document.body); + const isLocked = document.pointerLockElement === document.body; + this.pointerLockChange.emit(isLocked); + + //document.body.requestPointerLock(); }); } } diff --git a/src/app/pages/index.page.ts b/src/app/pages/index.page.ts index 44c8c45..ee2f6c0 100644 --- a/src/app/pages/index.page.ts +++ b/src/app/pages/index.page.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component, HostListener } from '@angular/core'; import { GameComponent } from '../game/game.component.ts'; import { MenuComponent } from '../ui/menu.component.ts'; @@ -15,7 +15,27 @@ import { MenuComponent } from '../ui/menu.component.ts'; export default class HomeComponent { showMenu = false; + // Add to class + @HostListener('document:keydown', ['$event']) + handleKeyboardEvent(event: KeyboardEvent) { + // Escape key shows menu + if (event.key === 'Escape') { + this.showMenu = true; + document.exitPointerLock(); + } + + // WASD locks pointer if menu is visible + if (['w', 'a', 's', 'd'].includes(event.key.toLowerCase()) && this.showMenu) { + this.showMenu = false; + document.body.requestPointerLock(); + } + } + + // Update pointer lock handler onPointerLockChange(isLocked: boolean) { this.showMenu = !isLocked; + if (!isLocked) { + document.exitPointerLock(); + } } } diff --git a/src/app/ui/browse.component.ts b/src/app/ui/browse.component.ts index d891d36..9a9c121 100644 --- a/src/app/ui/browse.component.ts +++ b/src/app/ui/browse.component.ts @@ -6,21 +6,28 @@ import { CommonModule } from '@angular/common'; standalone: true, imports: [CommonModule], template: ` -
-

Browse Servers

-
-
- Server 1 -
- -
-
- `, +
+

internet (for possum)

+
+
+ possum world +
+
+ possum world 2 +
+ +
+
+ `, styles: [` - .server-item { - @apply p-2 bg-gray-700/50 rounded-md text-gray-200 mb-2; - } - `], + .server-item { + @apply p-2 bg-gray-700/50 text-gray-200 mb-2; + } + .btn-menu { + @apply w-full text-left px-4 py-2 text-gray-100 hover:bg-gray-700/50 transition-colors mb-2; + border-radius: 0; + } + `], }) export class BrowseComponent { @Output() diff --git a/src/app/ui/menu.component.ts b/src/app/ui/menu.component.ts index 25ab658..1702b7a 100644 --- a/src/app/ui/menu.component.ts +++ b/src/app/ui/menu.component.ts @@ -8,27 +8,38 @@ import { BrowseComponent } from './browse.component.ts'; standalone: true, imports: [CommonModule, SettingsComponent, BrowseComponent], template: ` -
-
-
- - - -
+
+
+
+ + + +
- - -
-
- `, + + +
+
+ `, styles: [` - .btn-menu { - @apply w-full text-left px-4 py-2 text-gray-100 hover:bg-gray-700/50 rounded-md transition-colors mb-2; - } - `], + :host { + @apply contents; + } + .fixed { + @apply overflow-hidden; + } + .btn-menu { + @apply w-full text-left px-4 py-2 text-gray-100 hover:bg-gray-700/50 transition-colors mb-2; + border-radius: 0; + } + `], }) export class MenuComponent { @Input() @@ -47,6 +58,7 @@ export class MenuComponent { navigate(page: 'settings' | 'browse' | 'play') { if (page === 'play') { this.close.emit(); + document.body.requestPointerLock(); return; } this.activePage = page; diff --git a/src/app/ui/settings.component.ts b/src/app/ui/settings.component.ts index b46542e..3afa126 100644 --- a/src/app/ui/settings.component.ts +++ b/src/app/ui/settings.component.ts @@ -8,23 +8,32 @@ import { SettingsManager } from '../../client/core/SettingsManager.ts'; standalone: true, imports: [CommonModule, FormsModule], template: ` -
-

Settings

-
-
- - -
- -
-
- `, +
+

Settings

+
+
+ +
+ + + {{ settings.sense | number:'1.1-1' }} + +
+
+ +
+
+ `, styles: [` - .setting-item { - @apply flex justify-between items-center mb-4 text-gray-200; - } - `], + .setting-item { + @apply flex justify-between items-center mb-4 text-gray-200; + } + .btn-menu { + @apply w-full text-left px-4 py-2 text-gray-100 hover:bg-gray-700/50 transition-colors mb-2; + border-radius: 0; + } + `], }) export class SettingsComponent { @Output()