From df28ee169f038cf2129bc9cfb912c0d83d3c4dfc Mon Sep 17 00:00:00 2001 From: evanpelle Date: Fri, 4 Oct 2024 20:17:27 -0700 Subject: [PATCH] send emojis working! --- src/client/Transport.ts | 4 ++-- src/client/graphics/layers/RadialMenu.ts | 4 ++-- src/core/Schemas.ts | 11 +++++++---- src/core/execution/EmojiExecution.ts | 4 ++-- src/core/game/Game.ts | 13 ++----------- src/core/game/PlayerImpl.ts | 4 ++-- 6 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/client/Transport.ts b/src/client/Transport.ts index 190b7020f..52b10d971 100644 --- a/src/client/Transport.ts +++ b/src/client/Transport.ts @@ -1,5 +1,5 @@ import {EventBus, GameEvent} from "../core/EventBus" -import {AllianceRequest, AllPlayers, Cell, Emoji, Player, PlayerID, PlayerType} from "../core/game/Game" +import {AllianceRequest, AllPlayers, Cell, Player, PlayerID, PlayerType} from "../core/game/Game" import {ClientID, ClientIntentMessageSchema, ClientJoinMessageSchema, ClientLeaveMessageSchema, GameID, Intent, ServerMessage, ServerMessageSchema} from "../core/Schemas" @@ -51,7 +51,7 @@ export class SendTargetPlayerIntentEvent implements GameEvent { } export class SendEmojiIntentEvent implements GameEvent { - constructor(public readonly recipient: Player | typeof AllPlayers, public readonly emoji: Emoji) { } + constructor(public readonly recipient: Player | typeof AllPlayers, public readonly emoji: string) { } } export class Transport { diff --git a/src/client/graphics/layers/RadialMenu.ts b/src/client/graphics/layers/RadialMenu.ts index 1f066416d..c165d64c4 100644 --- a/src/client/graphics/layers/RadialMenu.ts +++ b/src/client/graphics/layers/RadialMenu.ts @@ -1,5 +1,5 @@ import {EventBus} from "../../../core/EventBus"; -import {AllPlayers, Cell, Emoji, Game, Player, PlayerID} from "../../../core/game/Game"; +import {AllPlayers, Cell, Game, Player} from "../../../core/game/Game"; import {ClientID} from "../../../core/Schemas"; import {and, bfs, dist, manhattanDist, manhattanDistWrapped, sourceDstOceanShore} from "../../../core/Util"; import {ContextMenuEvent, MouseUpEvent} from "../../InputHandler"; @@ -89,7 +89,7 @@ export class RadialMenu implements Layer { if (emojiElement.classList.contains('emoji-button')) { const emoji = emojiElement.textContent; this.hideEmojiTable() - this.eventBus.emit(new SendEmojiIntentEvent(recipient, Emoji.Heart)) + this.eventBus.emit(new SendEmojiIntentEvent(recipient, emoji)) } }); } else { diff --git a/src/core/Schemas.ts b/src/core/Schemas.ts index 4de8c1c25..7495d0ff6 100644 --- a/src/core/Schemas.ts +++ b/src/core/Schemas.ts @@ -1,5 +1,5 @@ import {z} from 'zod'; -import {Emoji, PlayerType} from './game/Game'; +import {PlayerType} from './game/Game'; export type GameID = string export type ClientID = string @@ -38,8 +38,6 @@ export type ClientJoinMessage = z.infer export type ClientLeaveMessage = z.infer const PlayerTypeSchema = z.nativeEnum(PlayerType); -const EmojiSchema = z.nativeEnum(Emoji); - // TODO: create Cell schema @@ -121,7 +119,12 @@ export const EmojiIntentSchema = BaseIntentSchema.extend({ type: z.literal('emoji'), sender: z.string(), recipient: z.string(), - emoji: EmojiSchema, + emoji: z.string().refine( + (val) => /^\p{Emoji}$/u.test(val), + { + message: "Must be a single emoji" + } + ) }) const IntentSchema = z.union([ diff --git a/src/core/execution/EmojiExecution.ts b/src/core/execution/EmojiExecution.ts index f526fb76b..fa6b2e385 100644 --- a/src/core/execution/EmojiExecution.ts +++ b/src/core/execution/EmojiExecution.ts @@ -1,4 +1,4 @@ -import {AllPlayers, Emoji, Execution, MutableGame, MutablePlayer, PlayerID} from "../game/Game"; +import {AllPlayers, Execution, MutableGame, MutablePlayer, PlayerID} from "../game/Game"; export class EmojiExecution implements Execution { @@ -10,7 +10,7 @@ export class EmojiExecution implements Execution { constructor( private senderID: PlayerID, private recipientID: PlayerID | typeof AllPlayers, - private emoji: Emoji + private emoji: string ) { } diff --git a/src/core/game/Game.ts b/src/core/game/Game.ts index 6b83630c0..a37ee73fb 100644 --- a/src/core/game/Game.ts +++ b/src/core/game/Game.ts @@ -8,22 +8,13 @@ import {BreakAllianceExecution} from "../execution/alliance/BreakAllianceExecuti export type PlayerID = string export type Tick = number -export enum Emoji { - ThumbsUp = "👍", - ThumbsDown = "👎", - Smile = "😊", - Sad = "😢", - Heart = "❤️", - Fire = "🔥", -} - export const AllPlayers = "AllPlayers" as const; export class EmojiMessage { constructor( public readonly sender: Player, public readonly recipient: Player | typeof AllPlayers, - public readonly emoji: Emoji, + public readonly emoji: string, public readonly createdAt: Tick ) { } } @@ -201,7 +192,7 @@ export interface MutablePlayer extends Player { targets(): MutablePlayer[] transitiveTargets(): MutablePlayer[] // Null means send to all Players - sendEmoji(recipient: Player | typeof AllPlayers, emoji: Emoji): void + sendEmoji(recipient: Player | typeof AllPlayers, emoji: string): void } export interface Game { diff --git a/src/core/game/PlayerImpl.ts b/src/core/game/PlayerImpl.ts index 7ffb4c17d..dfea968f7 100644 --- a/src/core/game/PlayerImpl.ts +++ b/src/core/game/PlayerImpl.ts @@ -1,4 +1,4 @@ -import {MutablePlayer, Tile, PlayerInfo, PlayerID, PlayerType, Player, TerraNullius, Cell, MutableGame, Execution, AllianceRequest, MutableAllianceRequest, MutableAlliance, Alliance, Tick, TargetPlayerEvent, Emoji, EmojiMessage, EmojiMessageEvent, AllPlayers} from "./Game"; +import {MutablePlayer, Tile, PlayerInfo, PlayerID, PlayerType, Player, TerraNullius, Cell, Execution, AllianceRequest, MutableAllianceRequest, MutableAlliance, Alliance, Tick, TargetPlayerEvent, EmojiMessage, EmojiMessageEvent, AllPlayers} from "./Game"; import {ClientID} from "../Schemas"; import {simpleHash} from "../Util"; import {CellString, GameImpl} from "./GameImpl"; @@ -209,7 +209,7 @@ export class PlayerImpl implements MutablePlayer { return [...new Set(ts)] } - sendEmoji(recipient: Player | typeof AllPlayers, emoji: Emoji): void { + sendEmoji(recipient: Player | typeof AllPlayers, emoji: string): void { if (recipient == this) { throw Error(`Cannot send emoji to oneself: ${this}`) }