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 @@
diff --git a/public/favicon.ico b/public/favicon.ico
index 18993ad..871e29b 100644
Binary files a/public/favicon.ico and b/public/favicon.ico differ