From 3df2aee04c204d270ef84b69aa853d9b0f7a8857 Mon Sep 17 00:00:00 2001 From: legonzaur Date: Sun, 26 May 2024 15:02:04 +0200 Subject: [PATCH] Feat : remove old netcode --- app.vue | 146 +++++++-------- netcode.old/Card.ts | 64 ------- netcode.old/Effect.ts | 95 ---------- netcode.old/Game.ts | 52 ------ netcode.old/GameObject.ts | 3 - netcode.old/Lobby.ts | 25 --- netcode.old/Player.ts | 55 ------ netcode.old/Team.ts | 29 --- netcode.old/Turn.ts | 50 ----- netcode.old/index.ts | 375 -------------------------------------- netcode/index.ts | 1 - pages/index.vue | 11 +- public/favicon.ico | Bin 4286 -> 129 bytes 13 files changed, 81 insertions(+), 825 deletions(-) delete mode 100644 netcode.old/Card.ts delete mode 100644 netcode.old/Effect.ts delete mode 100644 netcode.old/Game.ts delete mode 100644 netcode.old/GameObject.ts delete mode 100644 netcode.old/Lobby.ts delete mode 100644 netcode.old/Player.ts delete mode 100644 netcode.old/Team.ts delete mode 100644 netcode.old/Turn.ts delete mode 100644 netcode.old/index.ts diff --git a/app.vue b/app.vue index 4086e2f..5a0b3b3 100644 --- a/app.vue +++ b/app.vue @@ -1,98 +1,98 @@ diff --git a/netcode.old/Card.ts b/netcode.old/Card.ts deleted file mode 100644 index 7bd1007..0000000 --- a/netcode.old/Card.ts +++ /dev/null @@ -1,64 +0,0 @@ -import type { GameObjectRegister } from "." -import type { Effect } from "./Effect" -import type { GameObjectNetcode } from "./GameObject" -import type { Turn } from "./Turn" - -enum CardRole { - PERSONAL = "personal", - MARKET = "market", - FIRE_GEM = "fire_gem" -} - -export enum CardType { - HERO = "hero", - HERO_ABILITY = "hero_ability", - CURRENCY = "currency", - WEAPON = "weapon", - CHAMPION = "champion", - ACTION = "action", - ITEM = "item" -} - -enum CardFaction { - BASE = "base", - - BLUE = "blue", - RED = "red", - GREEN = "green", - YELLOW = "yellow" -} - -export interface CardNetcode extends GameObjectNetcode { - card_id: number - sprite: string - name: string - cost?: number - role: CardRole - card_type: CardType - faction: CardFaction - effects: Array - defense?: number - guard?: boolean -} - -export type Card = Omit & { - effects: Array - health_as_champion?: number -} -export function create_card(input: CardNetcode, register: GameObjectRegister) { - const card = new Proxy(input, { - get(target: CardNetcode, prop, reciever) { - if (prop == "effects") { - return target.effects.map((e) => register.effects.get(e)) - } - if (prop == "health_as_champion") { - return Array.from(register.turns.values()).find(e => e.champions_health.has(card.uuid))?.champions_health.get(card.uuid) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Card - return card -} diff --git a/netcode.old/Effect.ts b/netcode.old/Effect.ts deleted file mode 100644 index dd10f04..0000000 --- a/netcode.old/Effect.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { GameObjectRegister } from "." -import { CardType, type Card } from "./Card" -import type { GameObjectNetcode } from "./GameObject" - -export enum CardEffects { - GOLD = "gold", - DAMAGE = "damage", - HEAL = "heal", - PREPARE = "prepare", - STUN = "stun", - SACRIFICE = "sacrifice", - DRAW = "draw", - DRAW_AND_DISCARD = "draw_and_discard", - MAKE_DISCARD = "make_discard", - RESTACK_DISCARDED_CHAMPION = "restack_discarded_champion", - RESTACK_DISCARDED_CARD = "restack_discarded_card", - STACK_NEXT_ACTION_BOUGHT = "stack_next_action_bought", - STACK_NEXT_CARD_BOUGHT = "stack_next_card_bought", - PLAY_NEXT_CARD_BOUGHT = "play_next_card_bought" -} - -export enum EffectTimes { - PER_CHAMPION = "per_champion", - PER_OTHER_CHAMPION = "per_other_champion", - PER_OTHER_GUARD = "per_other_guard", - PER_CARD_OF_SAME_FACTION = "per_card_of_same_faction", - PER_OTHER_CARD_OF_SAME_FACTION = "per_other_card_of_same_faction" -} - -export enum EffectType { - CHAMPION_ACTION = "champion_action", - SUICIDE = "suicide", - FACTION_COMBO = "faction_combo" -} - -export interface EffectNetcode extends GameObjectNetcode { - effect: CardEffects - amount: number - sub_effects: Array - mutex: Array - card: string - effect_type?: EffectType - times?: EffectTimes -} - -export type Effect = Omit & { - sub_effects: { [key: string]: Effect } - mutex: { [key: string]: Effect } - card: Card - usable: boolean -} - -export function create_effect(input: EffectNetcode, register: GameObjectRegister) { - const effect = - new Proxy(input, { - get(target: EffectNetcode, prop, reciever) { - if (prop == "sub_effects") { - return Object.fromEntries(Object.entries(register.effects).filter(([i, v]) => i in target.sub_effects)) - } - if (prop == "mutex") { - return Object.fromEntries(Object.entries(register.effects).filter(([i, v]) => i in target.mutex)) - } - if (prop == "usable") { - // ugly bastard - if (!register.self) { return false } - - let cardLocked = register.self.value?.turn?.cards_locked - if (!cardLocked) { return false } - let cardList = Object.values(cardLocked) - const card = cardList.find(c => c.effects.map(e => e.uuid).includes(effect.uuid)) - if (!card) { return false } - - if (target.effect_type === EffectType.FACTION_COMBO) { - if (!cardList.some(c => c !== card && c.faction === card.faction)) { return false } - } - if (target.times === EffectTimes.PER_OTHER_CARD_OF_SAME_FACTION) { - if (!cardList.some(c => c !== card && c.faction === card.faction)) { return false } - } else if (target.times === EffectTimes.PER_OTHER_CHAMPION) { - if (!cardList.some(c => c !== card && c.card_type === CardType.CHAMPION)) { return false } - } else if (target.times === EffectTimes.PER_OTHER_GUARD) { - if (!cardList.some(c => c !== card && c.guard)) { return false } - } - return true - } - if (prop == "card") { - return register.cards.get(target.card) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Effect - return effect -} diff --git a/netcode.old/Game.ts b/netcode.old/Game.ts deleted file mode 100644 index d7c268c..0000000 --- a/netcode.old/Game.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { type GameObjectRegister } from "." -import { type Team } from "./Team" -import { type GameObjectNetcode } from "./GameObject" -import type { Card } from "./Card" -import type { Player } from "./Player" - -export interface GameNetcode extends GameObjectNetcode { - market_stack: Array - market: Array - gem_stack: Array - started: boolean - current_turn: string - players: Array - losers: Array - ended: boolean - owner: string -} - - -export type Game = Omit & { - market_stack: Array - market: Array - gem_stack: Array - current_turn: Team - players: Array -} -export function create_game(input: GameNetcode, register: GameObjectRegister) { - return new Proxy(input, { - get(target: GameNetcode, prop, reciever) { - if (prop == "market_stack") { - return target.market_stack.map(e => register.cards.get(e)) - } - if (prop == "market") { - // console.log(target) - return target.market.map(e => register.cards.get(e)) - } - if (prop == "gem_stack") { - return target.gem_stack.map(e => register.cards.get(e)) - } - if (prop == "current_turn") { - return register.teams.get(input.current_turn) - } - if (prop == "players") { - return target.players.map(e => register.players.get(e)) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Game -} \ No newline at end of file diff --git a/netcode.old/GameObject.ts b/netcode.old/GameObject.ts deleted file mode 100644 index 346d9f3..0000000 --- a/netcode.old/GameObject.ts +++ /dev/null @@ -1,3 +0,0 @@ -export type GameObjectNetcode = { - uuid: string -} \ No newline at end of file diff --git a/netcode.old/Lobby.ts b/netcode.old/Lobby.ts deleted file mode 100644 index 1d7748d..0000000 --- a/netcode.old/Lobby.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { type GameObjectRegister } from "." -import { type GameObjectNetcode } from "./GameObject" -import type { Game } from "./Game" - -export interface LobbyNetcode extends GameObjectNetcode { - games: Array -} - - -export type Lobby = Omit & { - games: Array -} -export function create_lobby(input: LobbyNetcode, register: GameObjectRegister) { - return new Proxy(input, { - get(target: LobbyNetcode, prop, reciever) { - if (prop == "games") { - return target.games.map(e => register.games.get(e)) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Lobby -} \ No newline at end of file diff --git a/netcode.old/Player.ts b/netcode.old/Player.ts deleted file mode 100644 index 7a946a8..0000000 --- a/netcode.old/Player.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { type GameObjectRegister } from "." -import type { Card } from "./Card" -import type { GameObjectNetcode } from "./GameObject" -import { type Team } from "./Team" -import { type Turn } from "./Turn" -export interface PlayerNetcode extends GameObjectNetcode { - stack_pile: Array - discard_pile: Array - hand: Array - board: Array - team: string - username: string - turn: string - discord_id?: string - image?: string - ready: boolean -} - - -export type Player = Omit & { - stack_pile: Array - discard_pile: Array - hand: Array - board: Array - team: Team | undefined - turn: Turn | undefined -} -export function create_player(input: PlayerNetcode, register: GameObjectRegister) { - return new Proxy(input, { - get(target: PlayerNetcode, prop, reciever) { - if (prop == "stack_pile") { - return target.stack_pile.map(e => register.cards.get(e)) - } - if (prop == "discard_pile") { - return target.discard_pile.map(e => register.cards.get(e)) - } - if (prop == "hand") { - return target.hand.map(e => register.cards.get(e)) - } - if (prop == "board") { - return target.board.map(e => register.cards.get(e)) - } - if (prop == "team") { - return register.teams.get(target.team) - } - if (prop == "turn") { - return register.turns.get(target.turn) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Player -} diff --git a/netcode.old/Team.ts b/netcode.old/Team.ts deleted file mode 100644 index 1a289da..0000000 --- a/netcode.old/Team.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { type GameObjectRegister } from "." -import type { GameObjectNetcode } from "./GameObject" -import { type Player } from "./Player" - -export interface TeamNetcode extends GameObjectNetcode { - health: number - color: string - name: string -} - -export type Team = TeamNetcode & { - players: Array -} - -export function create_team(input: TeamNetcode, register: GameObjectRegister) { - const team = new Proxy(input, { - get(target: TeamNetcode, prop, reciever) { - if (prop == "players") { - return Object.values(register.players).filter((p) => p.team == team) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Team - - return team -} diff --git a/netcode.old/Turn.ts b/netcode.old/Turn.ts deleted file mode 100644 index 3a7a026..0000000 --- a/netcode.old/Turn.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { registerRuntimeCompiler } from "vue" -import { type GameObjectRegister } from "." -import type { Card } from "./Card" -import { type Effect, CardEffects } from "./Effect" -import type { GameObjectNetcode } from "./GameObject" -export interface TurnNetcode extends GameObjectNetcode { - cards_locked: Array - effects_availables: Array - champions_health: { [key: string]: string } - discard_markers: number - discard_marker_card: string - fuck_u_markers: number - damage_reserve: number - gold_reserve: number -} - - -export type Turn = Omit & { - cards_locked: { [key: string]: Card } - effects_availables: Array - champions_health: Map - discard_marker_card: Card -} -export function create_turn(input: TurnNetcode, register: GameObjectRegister) { - const turn = new Proxy(input, { - get(target: TurnNetcode, prop, reciever) { - if (prop == "cards_locked") { - return Object.fromEntries(target.cards_locked.map(e => [e, register.cards.get(e)])) - } - if (prop == "effects_availables") { - return target.effects_availables.map(e => register.effects.get(e)) - } - if (prop == "champions_health") { - const healths = new Map() - for (const c in target.champions_health) { - healths.set(register.cards.get(c)?.uuid, target.champions_health[c]) - } - return healths - } - if(prop == "discard_marker_card"){ - return register.cards.get(target.discard_marker_card) - } - return Reflect.get(target, prop, reciever); - }, - set(target, prop, val, receiver) { - return Reflect.set(target, prop, val, receiver); - } - }) as Turn - return turn -} diff --git a/netcode.old/index.ts b/netcode.old/index.ts deleted file mode 100644 index 6c0d55b..0000000 --- a/netcode.old/index.ts +++ /dev/null @@ -1,375 +0,0 @@ -import { type Card, create_card, type CardNetcode } from "./Card"; -import { - type Effect, - create_effect, - type EffectNetcode, - EffectType, - CardEffects, -} from "./Effect"; -import { type Game, create_game, type GameNetcode } from "./Game"; -import type { GameObjectNetcode } from "./GameObject"; -import { type Player, create_player, type PlayerNetcode } from "./Player"; -import { type Team, create_team, type TeamNetcode } from "./Team"; -import { type Turn, create_turn } from "./Turn"; -import { type Lobby, create_lobby, type LobbyNetcode } from "./Lobby"; - -import { type Ref } from "vue"; - -let socket: WebSocket; - -export class GameObjectRegister { - readonly effects: Map; - readonly cards: Map; - readonly teams: Map; - readonly players: Map; - readonly turns: Map; - readonly games: Map; - - context: "lobby" | "login" | "pregame" | "game" | "rules" = "login"; - private readonly objects: Map; - current_game: Ref; - lobby: Ref; - self: Ref; - zoomKeyPressed: Ref - hoveredCard: Ref - - clientMouseX: Ref - clientMouseY: Ref - discordId: Ref - constructor() { - this.effects = reactive(new Map()); - this.cards = reactive(new Map()); - this.teams = reactive(new Map()); - this.players = reactive(new Map()); - this.turns = reactive(new Map()); - this.games = reactive(new Map()); - - this.objects = reactive(new Map()); - this.current_game = ref(null); - this.lobby = ref(null); - this.self = ref(null); - this.zoomKeyPressed = ref(false); - this.hoveredCard = ref() - this.clientMouseX = ref(0) - this.clientMouseY = ref(0) - this.discordId = ref("") - } - - update_object(obj: GameObjectNetcode) { - // console.log(obj); - // console.log(obj.uuid); - // console.log(this.objects.get(obj.uuid)); - Object.assign(this.objects.get(obj.uuid) as GameNetcode, obj); - if (unref(this.current_game)?.uuid === obj.uuid) { - triggerRef(this.current_game); - } else if (unref(this.lobby)?.uuid === obj.uuid) { - triggerRef(this.lobby); - } else if (unref(this.self)?.uuid === obj.uuid) { - triggerRef(this.self); - } else if (unref(this.self)?.turn?.uuid === obj.uuid) { - triggerRef(this.self); - } - } - - createObject = { - effect: (data: EffectNetcode) => { - const effect = create_effect(data, this); - this.effects.set(data.uuid, effect); - this.objects.set(data.uuid, data); - }, - card: (data: CardNetcode) => { - const card = create_card(data, this); - this.cards.set(data.uuid, card); - this.objects.set(data.uuid, card); - }, - player: (data: PlayerNetcode) => { - const player = create_player(data, this); - this.players.set(data.uuid, player); - this.objects.set(data.uuid, player); - }, - team: (data: TeamNetcode) => { - const team = create_team(data, this); - this.teams.set(data.uuid, team); - this.objects.set(data.uuid, team); - }, - game: (data: GameNetcode) => { - const game = create_game(data, this); - this.games.set(data.uuid, game); - this.objects.set(data.uuid, game); - }, - turn: (data: any) => { - const turn = create_turn(data, this); - this.turns.set(data.uuid, turn); - this.objects.set(data.uuid, turn); - }, - lobby: (data: LobbyNetcode) => { - this.lobby.value = create_lobby(data, this); - this.objects.set(data.uuid, this.lobby.value); - }, - } as { [id: string]: (data: any) => any }; - - setSelf = (uuid: string) => { - this.self.value = this.players.get(uuid) ?? null; - }; - - setDiscordId = (username: string) => { - this.discordId.value = username - } - setCurrentGame = (uuid: string) => { - this.current_game.value = this.games.get(uuid) ?? null; - }; -} - -const goStore = reactive(new GameObjectRegister()); - -export const setup_websocket = () => - new Promise((resolve, reject) => { - if (socket) { - return resolve(); - } - const config = useRuntimeConfig(); - const heron_session = useCookie("heron_session"); - socket = new WebSocket(config.public.websocketEndpoint); - - socket.onopen = function (e) { - if (socket.readyState == 1) { - resolve(); - } - - console.log("[open] Connection established"); - }; - - socket.onclose = function (event) { - if (event.wasClean) { - console.warn( - `[close] Connection closed cleanly, code=${event.code} reason=${event.reason}` - ); - } else { - // e.g. server process killed or network down - // event.code is usually 1006 in this case - console.error("[close] Connection died"); - } - }; - - socket.onerror = function (error) { - console.error(error); - }; - - socket.onmessage = function (event) { - const data = JSON.parse(event.data); - - if (data.type == "create" && data.data_type == "object") { - if (!(data.data.object_type in goStore.createObject)) { - throw new Error( - `Object ${data.data.object_type} couldn't be created` - ); - } - goStore.createObject[data.data.object_type](data.data); - } else if (data.type == "update" && data.data_type == "object") { - goStore.update_object(data.data); - } else if (data.type === "context") { - goStore.context = data.data; - // console.log(data.data); - } else if (data.type === "set") { - if (data.data_type == "self") { - goStore.setSelf(data.data); - } else if (data.data_type == "current_game") { - goStore.setCurrentGame(data.data); - } else if (data.data_type == "session_cookie") { - heron_session.value = data.data; - } else if (data.data_type == "self_discord_id") { - goStore.setDiscordId(data.data) - } - } else { - // console.log(data.type, data.data_type, data.data); - } - }; - }); - -export async function heron_cookie_login(cookie: string) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "cookie_login", - data_type: "cookie", - data: cookie, - }) - ); -} - -export async function oauth2_register_discord(code: string) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "discord_login", - data_type: "code", - data: code, - }) - ); -} - -export async function register(username: string) { - await setup_websocket(); - - socket.send( - JSON.stringify({ - type: "register", - data_type: "username", - data: username, - }) - ); -} - -export async function login(username: string) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "login", - data_type: "username", - data: username, - }) - ); -} - -export async function setReady(value: boolean) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "ready", - data_type: "ready_state", - data: value, - }) - ); -} - -export async function buy(card: Card) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "buy", - data: card.uuid, - }) - ); -} - -export async function endTurn() { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "end_turn", - data: true, - }) - ); -} - -export function playAllCards(cards: Card[]) { - cards.forEach((c: any) => { - playCard(c); - }); -} - -export async function playCard(card: Card) { - // console.log(card.uuid); - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "play_card", - data: card.uuid, - }) - ); -} - -export async function lockCard(card: Card) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "lock_card", - data: card.uuid, - }) - ); -} - -export async function useEffect( - effect: Effect, - target?: Effect | Card | Player | Team -) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "use_effect", - data: { effect_id: effect.uuid, target: target?.uuid }, - }) - ); -} - -export async function discard(card: Card) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "discard", - data: card.uuid, - }) - ); -} -h; -export async function heal() { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "heal", - data: 1, - }) - ); -} - -export async function damage_team(target: Team) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "damage_team", - data: target.uuid, - }) - ); -} - -export async function damage_champion(target: Card) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "action", - data_type: "damage_champion", - data: target.uuid, - }) - ); -} - -export async function netcode_create_game() { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "create", - data_type: "game", - data: "bite", - }) - ); -} - -export async function join_game(game_uuid: string) { - await setup_websocket(); - socket.send( - JSON.stringify({ - type: "join", - data_type: "game", - data: game_uuid, - }) - ); -} -export default goStore; diff --git a/netcode/index.ts b/netcode/index.ts index 263e09b..d9723db 100644 --- a/netcode/index.ts +++ b/netcode/index.ts @@ -5,7 +5,6 @@ export function setupWebsocket(): Promise { return resolve(socket); } const config = useRuntimeConfig(); - const heron_session = useCookie("heron_session"); socket = new WebSocket(config.public.websocketEndpoint); socket.onopen = function (e) { diff --git a/pages/index.vue b/pages/index.vue index 703ec20..94f5876 100644 --- a/pages/index.vue +++ b/pages/index.vue @@ -1,8 +1,13 @@