emoji icons show above players (just fire emoji for now)

This commit is contained in:
evanpelle
2024-10-04 13:46:07 -07:00
parent e795b22220
commit f4a074a3fb
4 changed files with 38 additions and 21 deletions
+13 -1
View File
@@ -1,4 +1,4 @@
import {Cell, Game, Player, PlayerType} from "../../../core/game/Game"
import {AllPlayers, Cell, Game, Player, PlayerType} from "../../../core/game/Game"
import {PseudoRandom} from "../../../core/PseudoRandom"
import {calculateBoundingBox} from "../../../core/Util"
import {Theme} from "../../../core/configuration/Config"
@@ -188,6 +188,18 @@ export class NameLayer implements Layer {
);
}
if (myPlayer != null) {
const emojis = render.player.outgoingEmojis().filter(e => e.recipient == AllPlayers || e.recipient == myPlayer)
if (emojis.length > 0) {
context.font = `${render.fontSize * 4}px ${this.theme.font()}`;
context.fillStyle = this.theme.playerInfoColor(render.player.id()).toHex();
context.textAlign = 'center';
context.textBaseline = 'middle';
context.fillText(emojis[0].emoji, nameCenterX, nameCenterY + render.fontSize / 2);
}
}
context.textRendering = "optimizeSpeed";
context.font = `${render.fontSize}px ${this.theme.font()}`;
+7 -5
View File
@@ -226,11 +226,13 @@ export class RadialMenu implements Layer {
if (tile.hasOwner()) {
const target = tile.owner() == myPlayer ? AllPlayers : (tile.owner() as Player)
this.activateMenuElement(Slot.Emoji, "#ebe250", emojiIcon, () => {
this.eventBus.emit(
new SendEmojiIntentEvent(target, Emoji.Fire)
)
})
if (myPlayer.canSendEmoji(target)) {
this.activateMenuElement(Slot.Emoji, "#ebe250", emojiIcon, () => {
this.eventBus.emit(
new SendEmojiIntentEvent(target, Emoji.Fire)
)
})
}
}
if (tile.owner() != myPlayer && tile.isLand() && myPlayer.sharesBorderWith(other)) {
+14 -13
View File
@@ -1,3 +1,4 @@
import {PlayerInfo} from "../game/Game";
import {DefaultConfig} from "./DefaultConfig";
export const devConfig = new class extends DefaultConfig {
@@ -5,14 +6,14 @@ export const devConfig = new class extends DefaultConfig {
return 95
}
numSpawnPhaseTurns(): number {
return 80
return 40
}
gameCreationRate(): number {
return 2 * 1000
}
lobbyLifetime(): number {
return 2 * 1000
}
// gameCreationRate(): number {
// return 2 * 1000
// }
// lobbyLifetime(): number {
// return 2 * 1000
// }
turnIntervalMs(): number {
return 100
}
@@ -29,12 +30,12 @@ export const devConfig = new class extends DefaultConfig {
// return 1
// }
// startTroops(playerInfo: PlayerInfo): number {
// if (playerInfo.isBot) {
// return 5000
// }
// return 5000
// }
startTroops(playerInfo: PlayerInfo): number {
// if (playerInfo.isBot) {
// return 5000
// }
return 50000
}
// troopAdditionRate(player: Player): number {
// if (player.isBot()) {
+4 -2
View File
@@ -219,10 +219,12 @@ export class PlayerImpl implements MutablePlayer {
}
outgoingEmojis(): EmojiMessage[] {
return null
return this.outgoingEmojis_
.filter(e => this.gs.ticks() - e.createdAt < this.gs.config().emojiMessageDuration())
.sort((a, b) => b.createdAt - a.createdAt)
}
canSendEmoji(recipient: Player | null): boolean {
canSendEmoji(recipient: Player | typeof AllPlayers): boolean {
const prevMsgs = this.outgoingEmojis_.filter(msg => msg.recipient == recipient)
for (const msg of prevMsgs) {
if (this.gs.ticks() - msg.createdAt < this.gs.config().emojiMessageCooldown()) {