From d5824c11c44499b146efa5e8ea406d73b88fdfe5 Mon Sep 17 00:00:00 2001 From: makluganteng Date: Sat, 6 Apr 2024 19:37:15 +0700 Subject: [PATCH 1/6] current contract progress --- dojo-starter/src/lib.cairo | 17 ++ dojo-starter/src/models/game.cairo | 16 ++ dojo-starter/src/models/moves_pokemon.cairo | 40 +++++ dojo-starter/src/models/player.cairo | 15 ++ dojo-starter/src/models/pokemon.cairo | 20 +++ dojo-starter/src/models/side_effect.cairo | 33 ++++ dojo-starter/src/models/types.cairo | 32 ++++ dojo-starter/src/systems/actions.cairo | 37 ++-- dojo-starter/src/systems/battleSystem.cairo | 21 +++ .../src/systems/game_id_generate.cairo | 17 ++ dojo-starter/src/systems/lobby.cairo | 92 ++++++++++ dojo-starter/src/systems/utils.cairo | 6 + dojo-starter/src/types/game.cairo | 158 ++++++++++++++++++ dojo-starter/src/utils/hash.cairo | 91 ++++++++++ dojo-starter/src/utils/timestamp.cairo | 16 ++ 15 files changed, 595 insertions(+), 16 deletions(-) create mode 100644 dojo-starter/src/models/game.cairo create mode 100644 dojo-starter/src/models/moves_pokemon.cairo create mode 100644 dojo-starter/src/models/player.cairo create mode 100644 dojo-starter/src/models/pokemon.cairo create mode 100644 dojo-starter/src/models/side_effect.cairo create mode 100644 dojo-starter/src/models/types.cairo create mode 100644 dojo-starter/src/systems/battleSystem.cairo create mode 100644 dojo-starter/src/systems/game_id_generate.cairo create mode 100644 dojo-starter/src/systems/lobby.cairo create mode 100644 dojo-starter/src/systems/utils.cairo create mode 100644 dojo-starter/src/types/game.cairo create mode 100644 dojo-starter/src/utils/hash.cairo create mode 100644 dojo-starter/src/utils/timestamp.cairo diff --git a/dojo-starter/src/lib.cairo b/dojo-starter/src/lib.cairo index deb6ae1..eb4fc7c 100644 --- a/dojo-starter/src/lib.cairo +++ b/dojo-starter/src/lib.cairo @@ -1,12 +1,29 @@ mod systems { mod actions; + mod game_id_generate; + mod utils; + mod lobby; +} + +mod types { + mod game; } mod models { mod moves; mod position; + mod pokemon; + mod side_effect; + mod types; + mod game; + mod player; } mod tests { mod test_world; } + +mod utils { + mod timestamp; + mod hash; +} diff --git a/dojo-starter/src/models/game.cairo b/dojo-starter/src/models/game.cairo new file mode 100644 index 0000000..f4d6230 --- /dev/null +++ b/dojo-starter/src/models/game.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; + +#[derive(Model, Copy, Drop, Serde)] +struct Game { + #[key] + game_id: u128, + player_a: ContractAddress, + player_b: ContractAddress, + message: felt252, + state: u8, + round_number: u8, + winner: u8, + // timestamps in unix epoch + timestamp_start: u64, + timestamp_end: u64, +} diff --git a/dojo-starter/src/models/moves_pokemon.cairo b/dojo-starter/src/models/moves_pokemon.cairo new file mode 100644 index 0000000..fba8e87 --- /dev/null +++ b/dojo-starter/src/models/moves_pokemon.cairo @@ -0,0 +1,40 @@ +use starknet::ContractAddress; + +#[derive(Model, Drop, Serde)] +struct Moves { + #[key] + pokemon_id: u8, + moves: MovesAttack + type: TypeAttack + damage: u8 +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum MovesAttack { + Ember, + LeafCut, + WaterGun, +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum TypeAttack { + Special, + Physical +} + +trait MovesTrait{ + fn get_attack(self MovesAttack) -> felt252 +} + + + +impl MovesAttackIntoFelt252 of Into { + fn into(self: MovesAttack) -> felt252 { + match self { + MovesAttack::Ember => 0, + MovesAttack::LeafCut => 1, + MovesAttack::WaterGun => 2 + } + } +} + diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo new file mode 100644 index 0000000..c06a614 --- /dev/null +++ b/dojo-starter/src/models/player.cairo @@ -0,0 +1,15 @@ +use starknet::ContractAddress; + + +#[derive(Model, Copy, Drop, Serde)] +struct Player { + #[key] + address: ContractAddress, + name: felt252, + profile_pic: u8, + total_duels: u16, + total_wins: u16, + total_losses: u16, + timestamp: u64, // Unix time, 1st registered +} + diff --git a/dojo-starter/src/models/pokemon.cairo b/dojo-starter/src/models/pokemon.cairo new file mode 100644 index 0000000..07f4da8 --- /dev/null +++ b/dojo-starter/src/models/pokemon.cairo @@ -0,0 +1,20 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::PokemonTypes, side_effect::SideEffectType}; + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Pokemon { + #[key] + pokemon_id: u8, + health: u8, + pokemon_type: PokemonTypes, + pokemon_side_effect: SideEffectType, +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum PokemonGen1 { + Charmander, + Bulbasaur, + Squirtle +} + diff --git a/dojo-starter/src/models/side_effect.cairo b/dojo-starter/src/models/side_effect.cairo new file mode 100644 index 0000000..05fb8cd --- /dev/null +++ b/dojo-starter/src/models/side_effect.cairo @@ -0,0 +1,33 @@ +use starknet::ContractAddress; + +#[derive(Model, Drop, Serde)] +struct SideEffects { + #[key] + player_address: ContractAddress, + pokemon_id: u8 +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum SideEffectType { + Burn, + Paralyzed, + Frozen, + Sleep, + Poison, + Confusion, + Flinch +} + +impl SideEffectTypeIntoFelt252 of Into { + fn into(self: SideEffectType) -> felt252 { + match self { + SideEffectType::Burn => 0, + SideEffectType::Paralyzed => 1, + SideEffectType::Frozen => 2, + SideEffectType::Sleep => 3, + SideEffectType::Poison => 4, + SideEffectType::Confusion => 5, + SideEffectType::Flinch => 6 + } + } +} diff --git a/dojo-starter/src/models/types.cairo b/dojo-starter/src/models/types.cairo new file mode 100644 index 0000000..14a1694 --- /dev/null +++ b/dojo-starter/src/models/types.cairo @@ -0,0 +1,32 @@ +use starknet::ContractAddress; + +//this will be the pokemon types +#[derive(Model, Drop, Serde)] +struct PokemonTypes { + #[key] + pokemon_id: u8, + pokemon_type: Type +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum Type { + Fire, + Water, + Grass, + Wind, + Dark, + Light +} + +impl TypeIntoFelt252 of Into { + fn into(self: Type) -> felt252 { + match self { + Type::Fire => 0, + Type::Water => 1, + Type::Grass => 2, + Type::Wind => 3, + Type::Dark => 4, + Type::Light => 5 + } + } +} diff --git a/dojo-starter/src/systems/actions.cairo b/dojo-starter/src/systems/actions.cairo index ed29140..1814866 100644 --- a/dojo-starter/src/systems/actions.cairo +++ b/dojo-starter/src/systems/actions.cairo @@ -16,20 +16,20 @@ mod actions { use starknet::{ContractAddress, get_caller_address}; use dojo_starter::models::{position::{Position, Vec2}, moves::{Moves, Direction}}; - // // declaring custom event struct - // #[event] - // #[derive(Drop, starknet::Event)] - // enum Event { - // Moved: Moved, - // } + // declaring custom event struct + #[event] + #[derive(Drop, starknet::Event)] + enum Event { + Moved: Moved, + } - // // declaring custom event struct - // #[derive(starknet::Event, Model, Copy, Drop, Serde)] - // struct Moved { - // #[key] - // player: ContractAddress, - // direction: Direction - // } + // declaring custom event struct + #[derive(starknet::Event, Model, Copy, Drop, Serde)] + struct Moved { + #[key] + player: ContractAddress, + direction: Direction + } // impl: implement functions specified in trait #[abi(embed_v0)] @@ -39,6 +39,8 @@ mod actions { let player = get_caller_address(); // Retrieve the player's current position from the world. let position = get!(world, player, (Position)); + // Retrieve the player's move data, e.g., how many moves they have left. + let moves = get!(world, player, (Moves)); // Update the world state with the new data. // 1. Increase the player's remaining moves by 1. @@ -46,7 +48,9 @@ mod actions { set!( world, ( - Moves { player, remaining: 100, last_direction: Direction::None(()) }, + Moves { + player, remaining: moves.remaining + 1, last_direction: Direction::None(()) + }, Position { player, vec: Vec2 { x: position.vec.x + 10, y: position.vec.y + 10 } }, @@ -73,8 +77,9 @@ mod actions { // // Update the world state with the new moves data and position. set!(world, (moves, next)); - // Emit an event to the world to notify about the player's move. - // emit!(world, Moved { player, direction }); + + // Emit an event to the world to notify about the player's move. + emit!(world, Moved { player, direction }); } } } diff --git a/dojo-starter/src/systems/battleSystem.cairo b/dojo-starter/src/systems/battleSystem.cairo new file mode 100644 index 0000000..13505f7 --- /dev/null +++ b/dojo-starter/src/systems/battleSystem.cairo @@ -0,0 +1,21 @@ +// #[dojo::interface] +// trait IBattleSystem { +// fn start(); +// fn battle(); +// } + +// #[dojo::contract] +// mod battleSystem { +// use super::{IBattleSystem}; + +// use starknet::{ContractAddress, get_caller_address}; + +// #[abi(embed_v0)] +// impl BattleSystemImpl of IBattleSystem { +// fn start(world: IWorldDispatcher) { +// //Get the address of the current caller, possibly the player's address. +// let player = get_caller_address(); +// } +// } +// } + diff --git a/dojo-starter/src/systems/game_id_generate.cairo b/dojo-starter/src/systems/game_id_generate.cairo new file mode 100644 index 0000000..04930c8 --- /dev/null +++ b/dojo-starter/src/systems/game_id_generate.cairo @@ -0,0 +1,17 @@ +use starknet::{ContractAddress}; +use dojo_starter::utils::hash::{hash_u128, hash_u128_to_u256, felt_to_u128}; + +// https://github.com/starkware-libs/cairo/blob/main/corelib/src/starknet/info.cairo +use starknet::get_block_info; + +fn make_seed(caller: ContractAddress) -> u128 { + hash_u128(felt_to_u128(caller.into()), _make_block_hash()) +} + +fn _make_block_hash() -> u128 { + // let block_number = get_block_number(); + // let block_timestamp = get_block_timestamp(); + let block_info = get_block_info().unbox(); + hash_u128(block_info.block_number.into(), block_info.block_timestamp.into()) +} + diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo new file mode 100644 index 0000000..01b780b --- /dev/null +++ b/dojo-starter/src/systems/lobby.cairo @@ -0,0 +1,92 @@ +use starknet::{ContractAddress}; + +#[dojo::interface] +trait ILobby { + fn register_player(self: @TContractState, name: felt252); + fn find_battle( + self: @TContractState, + challenger: ContractAddress, + message: felt252, + wager_coin: u8, + wager_value: u256, + expire_seconds: u64 + ) -> u128; +} + +#[dojo::contract] +mod lobby { + use super::{ILobby}; + + use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; + use dojo_starter::models::{pokemon::Pokemon, player::Player, game::Game}; + use dojo_starter::types::game::{GameState}; + use dojo_starter::utils::timestamp::{timestamp}; + use dojo_starter::systems::game_id_generate::{make_seed}; + use dojo_starter::systems::utils::{zero_address}; + + #[abi(embed_v0)] + impl LobbyImpl of ILobby { + fn register_player(self: @ContractState, name: felt252) { + let caller: ContractAddress = starknet::get_caller_address(); + + let mut player: Player = get!(self.world(), caller, Player); + + if (player.timestamp == 0) { + player.timestamp = get_block_timestamp(); + } + + player.name = name; + set!(self.world(), (player)); + return (); + } + + fn find_battle( + self: @TContractState, + challenger: ContractAddress, + message: felt252, + wager_coin: u8, + wager_value: u256, + expire_seconds: u64 + ) -> u128 { + //check if the challenger address is empty + assert(challenger != zero_address(), 'Missing challenged address'); + assert( + expire_seconds == 0 || expire_seconds >= timestamp::from_hours(1), + 'Invalid expire_seconds' + ); + + let caller: ContractAddress = starknet::get_caller_address(); + + let player: Player = get!(self.world(), caller, Player); + assert(player.name != 0, 'Challenger not registered'); + assert(caller != challenger, 'Challenging thyself, you fool!'); + + //create the battle + let game_id: u128 = make_seed(caller); + + // calc expiration + let timestamp_start: u64 = get_block_timestamp(); + let timestamp_end: u64 = if (expire_seconds == 0) { + 0 + } else { + timestamp_start + expire_seconds + }; + + let challenge = Game { + game_id, + player_a: caller, + player_b: challenger, + message, + // progress + state: GameState::Awaiting.into(), + round_number: 0, + winner: 0, + // times + timestamp_start, // chalenge issued + timestamp_end, // expire + }; + + (game_id) + } + } +} diff --git a/dojo-starter/src/systems/utils.cairo b/dojo-starter/src/systems/utils.cairo new file mode 100644 index 0000000..d3c7623 --- /dev/null +++ b/dojo-starter/src/systems/utils.cairo @@ -0,0 +1,6 @@ +use starknet::{ContractAddress}; + +#[inline(always)] +fn zero_address() -> ContractAddress { + (starknet::contract_address_const::<0x0>()) +} \ No newline at end of file diff --git a/dojo-starter/src/types/game.cairo b/dojo-starter/src/types/game.cairo new file mode 100644 index 0000000..75bfa2c --- /dev/null +++ b/dojo-starter/src/types/game.cairo @@ -0,0 +1,158 @@ +use traits::Into; +use debug::PrintTrait; + +#[derive(Copy, Drop, Serde, PartialEq, Introspect)] +enum GameState { + Null, + Awaiting, + Withdrawn, + Refused, + Expired, + InProgress, + Resolved, +} + +mod GAME_STATE { + const NULL: u8 = 0; + const AWAITING: u8 = 1; + const WITHDRAWN: u8 = 2; + const REFUSED: u8 = 3; + const EXPIRED: u8 = 4; + const IN_PROGRESS: u8 = 5; + const RESOLVED: u8 = 6; +} + +trait GameStateTrait { + fn exists(self: GameState) -> bool; + fn canceled(self: GameState) -> bool; + fn ongoing(self: GameState) -> bool; + fn finished(self: GameState) -> bool; +} + +impl GameStateTraitImpl of GameStateTrait { + fn exists(self: GameState) -> bool { + match self { + GameState::Null => false, + GameState::Awaiting => true, + GameState::Withdrawn => true, + GameState::Refused => true, + GameState::Expired => true, + GameState::InProgress => true, + GameState::Resolved => true, + } + } + fn canceled(self: GameState) -> bool { + match self { + GameState::Null => false, + GameState::Awaiting => false, + GameState::Withdrawn => true, + GameState::Refused => true, + GameState::Expired => true, + GameState::InProgress => false, + GameState::Resolved => false, + } + } + fn ongoing(self: GameState) -> bool { + match self { + GameState::Null => false, + GameState::Awaiting => true, + GameState::Withdrawn => false, + GameState::Refused => false, + GameState::Expired => false, + GameState::InProgress => true, + GameState::Resolved => false, + } + } + fn finished(self: GameState) -> bool { + match self { + GameState::Null => false, + GameState::Awaiting => false, + GameState::Withdrawn => false, + GameState::Refused => false, + GameState::Expired => false, + GameState::InProgress => false, + GameState::Resolved => true, + } + } +} + +impl GameStateIntoU8 of Into { + fn into(self: GameState) -> u8 { + match self { + GameState::Null => GAME_STATE::NULL, + GameState::Awaiting => GAME_STATE::AWAITING, + GameState::Withdrawn => GAME_STATE::WITHDRAWN, + GameState::Refused => GAME_STATE::REFUSED, + GameState::Expired => GAME_STATE::EXPIRED, + GameState::InProgress => GAME_STATE::IN_PROGRESS, + GameState::Resolved => GAME_STATE::RESOLVED, + } + } +} + +impl TryU8IntoGameState of TryInto { + fn try_into(self: u8) -> Option { + if self == GameState::NULL { + Option::Some(GameState::Null) + } else if self == GAME_STATE::AWAITING { + Option::Some(GameState::Awaiting) + } else if self == GAME_STATE::WITHDRAWN { + Option::Some(GameState::Withdrawn) + } else if self == GAME_STATE::REFUSED { + Option::Some(GameState::Refused) + } else if self == GAME_STATE::EXPIRED { + Option::Some(GameState::Expired) + } else if self == GAME_STATE::IN_PROGRESS { + Option::Some(GameState::InProgress) + } else if self == GAME_STATE::RESOLVED { + Option::Some(GameState::Resolved) + } else { + Option::None + } + } +} + +impl GameStateIntoFelt252 of Into { + fn into(self: GameState) -> felt252 { + match self { + GameState::Null => 0, + GameState::Awaiting => 'Awaiting', + GameState::Withdrawn => 'Withdrawn', + GameState::Refused => 'Refused', + GameState::Expired => 'Expired', + GameState::InProgress => 'InProgress', + GameState::Resolved => 'Resolved', + } + } +} + +impl TryFelt252IntoGameState of TryInto { + fn try_into(self: felt252) -> Option { + if self == 0 { + Option::Some(GameState::Null) + } else if self == 'Awaiting' { + Option::Some(GameState::Awaiting) + } else if self == 'Withdrawn' { + Option::Some(GameState::Withdrawn) + } else if self == 'Refused' { + Option::Some(GameState::Refused) + } else if self == 'Expired' { + Option::Some(GameState::Expired) + } else if self == 'InProgress' { + Option::Some(GameState::InProgress) + } else if self == 'Resolved' { + Option::Some(GameState::Resolved) + } else { + Option::None + } + } +} + +impl PrintGameState of PrintTrait { + fn print(self: GameState) { + let num: felt252 = self.into(); + num.print(); + // let num: u8 = self.into(); + // num.print(); + } +} diff --git a/dojo-starter/src/utils/hash.cairo b/dojo-starter/src/utils/hash.cairo new file mode 100644 index 0000000..90f9f05 --- /dev/null +++ b/dojo-starter/src/utils/hash.cairo @@ -0,0 +1,91 @@ +use traits::Into; + +// https://github.com/starkware-libs/cairo/blob/main/corelib/src/integer.cairo +// https://github.com/smartcontractkit/chainlink-starknet/blob/develop/contracts/src/utils.cairo +use integer::{u128s_from_felt252, U128sFromFelt252Result}; + +// https://github.com/starkware-libs/cairo/blob/main/corelib/src/pedersen.cairo +// externals usage: +// https://github.com/shramee/starklings-cairo1/blob/main/corelib/src/hash.cairo +extern fn pedersen(a: felt252, b: felt252) -> felt252 implicits(Pedersen) nopanic; + +// +// initially hash based on: +// https://github.com/shramee/cairo-random/blob/main/src/hash.cairo + +fn hash_felt(seed: felt252, offset: felt252) -> felt252 { + pedersen(seed, offset) +} + +fn hash_u128(seed: u128, offset: u128) -> u128 { + let hash = hash_felt(seed.into(), offset.into()); + felt_to_u128(hash) +} + +fn felt_to_u128(value: felt252) -> u128 { + match u128s_from_felt252(value) { + U128sFromFelt252Result::Narrow(x) => x, + U128sFromFelt252Result::Wide((_, x)) => x, + } +} + +// upgrade a u128 hash to u256 +fn hash_u128_to_u256(value: u128) -> u256 { + u256 { low: value, high: hash_u128(value, value) } +} + + +//---------------------------------------- +// Unit tests +// +#[cfg(test)] +mod tests { + use debug::PrintTrait; + use pistols::utils::hash::{felt_to_u128, hash_felt, hash_u128}; + + #[test] + // #[available_gas(20000)] + fn test_felt_to_u128() { + assert( + 0xab9d03074bff6ee2d4dbc374dbf3f846 == felt_to_u128( + 0x7f25249bc3b57d4a9cb82bd75d25579ab9d03074bff6ee2d4dbc374dbf3f846 + ), + '' + ); + } + + #[test] + // #[available_gas(20000)] + fn test_hash_felt() { + let rnd0 = hash_felt(25, 1); + let rnd00 = hash_felt(rnd0, rnd0); + let rnd1 = hash_felt(25, 1); + let rnd12 = hash_felt(25, 2); + let rnd2 = hash_felt(26, 1); + let rnd22 = hash_felt(26, 2); + assert(rnd0 == 0x7f25249bc3b57d4a9cb82bd75d25579ab9d03074bff6ee2d4dbc374dbf3f846, ''); + assert(rnd0 != rnd00, ''); + assert(rnd0 == rnd1, ''); + assert(rnd1 != rnd12, ''); + assert(rnd1 != rnd2, ''); + assert(rnd2 != rnd22, ''); + } + + #[test] + // #[available_gas(20000)] + fn test_hash_u128() { + let rnd0 = hash_u128(25, 1); + let rnd00 = hash_u128(rnd0, rnd0); + let rnd1 = hash_u128(25, 1); + let rnd12 = hash_u128(25, 2); + let rnd2 = hash_u128(26, 1); + let rnd22 = hash_u128(26, 2); + // rnd.print(); + assert(rnd0 == 0xab9d03074bff6ee2d4dbc374dbf3f846, ''); + assert(rnd0 != rnd00, ''); + assert(rnd0 == rnd1, ''); + assert(rnd1 != rnd12, ''); + assert(rnd1 != rnd2, ''); + assert(rnd2 != rnd22, ''); + } +} diff --git a/dojo-starter/src/utils/timestamp.cairo b/dojo-starter/src/utils/timestamp.cairo new file mode 100644 index 0000000..9c064da --- /dev/null +++ b/dojo-starter/src/utils/timestamp.cairo @@ -0,0 +1,16 @@ +//Special thanks from the funDAOmental pistol code :3 + +mod timestamp { + fn from_days(days: u64) -> u64 { + (days * 24 * 60 * 60) + } + fn from_hours(hours: u64) -> u64 { + (hours * 60 * 60) + } + fn from_minutes(minutes: u64) -> u64 { + (minutes * 60) + } + fn from_date(days: u64, hours: u64, minutes: u64) -> u64 { + (from_days(days) + from_hours(hours) + from_minutes(minutes)) + } +} From cf754f8ed5ca73f9170cb0c370e20f8db7ee06ce Mon Sep 17 00:00:00 2001 From: makluganteng Date: Sun, 7 Apr 2024 12:45:00 +0700 Subject: [PATCH 2/6] wip: current progress --- .../dojo_starter_systems_actions_actions.json | 193 +++++ ...ter_systems_battleSystem_battleSystem.json | 115 +++ .../dojo_starter_systems_lobby_lobby.json | 216 ++++++ .../dev/abis/base/dojo_world_world.json | 657 ++++++++++++++++++ .../dojo_starter_models_blobert_blobert.json | 299 ++++++++ .../models/dojo_starter_models_game_game.json | 241 +++++++ .../dojo_starter_models_moves_moves.json | 243 +++++++ .../dojo_starter_models_player_player.json | 257 +++++++ .../dojo_starter_models_pokemon_pokemon.json | 299 ++++++++ ...dojo_starter_models_position_position.json | 227 ++++++ .../dojo_starter_models_round_round.json | 217 ++++++ ...arter_models_side_effect_side_effects.json | 213 ++++++ ...jo_starter_models_types_blobert_types.json | 243 +++++++ ...jo_starter_models_types_pokemon_types.json | 243 +++++++ ...starter_systems_actions_actions_moved.json | 239 +++++++ .../dojo_starter_systems_actions_actions.toml | 9 + ...ter_systems_battleSystem_battleSystem.toml | 9 + .../dojo_starter_systems_lobby_lobby.toml | 9 + .../manifests/dev/base/dojo_base_base.toml | 4 + .../manifests/dev/base/dojo_world_world.toml | 5 + .../dojo_starter_models_blobert_blobert.toml | 25 + .../models/dojo_starter_models_game_game.toml | 50 ++ .../dojo_starter_models_moves_moves.toml | 20 + .../dojo_starter_models_player_player.toml | 70 ++ .../dojo_starter_models_pokemon_pokemon.toml | 25 + ...dojo_starter_models_position_position.toml | 15 + .../dojo_starter_models_round_round.toml | 20 + ...arter_models_side_effect_side_effects.toml | 15 + ...jo_starter_models_types_blobert_types.toml | 15 + ...jo_starter_models_types_pokemon_types.toml | 15 + ...starter_systems_actions_actions_moved.toml | 15 + dojo-starter/src/lib.cairo | 6 +- dojo-starter/src/models/blobert.cairo | 16 + dojo-starter/src/models/player.cairo | 7 + dojo-starter/src/models/pokemon.cairo | 20 - dojo-starter/src/models/round.cairo | 11 + dojo-starter/src/models/types.cairo | 6 +- dojo-starter/src/systems/battleSystem.cairo | 61 +- dojo-starter/src/systems/lobby.cairo | 18 +- dojo-starter/src/types/blobert.cairo | 24 + dojo-starter/src/types/game.cairo | 2 +- dojo-starter/src/types/round.cairo | 90 +++ 42 files changed, 4437 insertions(+), 47 deletions(-) create mode 100644 dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_actions_actions.json create mode 100644 dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_battleSystem_battleSystem.json create mode 100644 dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json create mode 100644 dojo-starter/manifests/dev/abis/base/dojo_world_world.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_game_game.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_moves_moves.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_pokemon_pokemon.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_position_position.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_side_effect_side_effects.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_blobert_types.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_pokemon_types.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_systems_actions_actions_moved.json create mode 100644 dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_actions_actions.toml create mode 100644 dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_battleSystem_battleSystem.toml create mode 100644 dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml create mode 100644 dojo-starter/manifests/dev/base/dojo_base_base.toml create mode 100644 dojo-starter/manifests/dev/base/dojo_world_world.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_game_game.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_moves_moves.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_pokemon_pokemon.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_position_position.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_side_effect_side_effects.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_types_blobert_types.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_types_pokemon_types.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_systems_actions_actions_moved.toml create mode 100644 dojo-starter/src/models/blobert.cairo delete mode 100644 dojo-starter/src/models/pokemon.cairo create mode 100644 dojo-starter/src/models/round.cairo create mode 100644 dojo-starter/src/types/blobert.cairo create mode 100644 dojo-starter/src/types/round.cairo diff --git a/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_actions_actions.json b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_actions_actions.json new file mode 100644 index 0000000..ca59fdb --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_actions_actions.json @@ -0,0 +1,193 @@ +[ + { + "type": "impl", + "name": "DojoResourceProviderImpl", + "interface_name": "dojo::world::IDojoResourceProvider" + }, + { + "type": "interface", + "name": "dojo::world::IDojoResourceProvider", + "items": [ + { + "type": "function", + "name": "dojo_resource", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "WorldProviderImpl", + "interface_name": "dojo::world::IWorldProvider" + }, + { + "type": "struct", + "name": "dojo::world::IWorldDispatcher", + "members": [ + { + "name": "contract_address", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "type": "interface", + "name": "dojo::world::IWorldProvider", + "items": [ + { + "type": "function", + "name": "world", + "inputs": [], + "outputs": [ + { + "type": "dojo::world::IWorldDispatcher" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "ActionsImpl", + "interface_name": "dojo_starter::systems::actions::IActions" + }, + { + "type": "enum", + "name": "dojo_starter::models::moves::Direction", + "variants": [ + { + "name": "None", + "type": "()" + }, + { + "name": "Left", + "type": "()" + }, + { + "name": "Right", + "type": "()" + }, + { + "name": "Up", + "type": "()" + }, + { + "name": "Down", + "type": "()" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::systems::actions::IActions", + "items": [ + { + "type": "function", + "name": "spawn", + "inputs": [], + "outputs": [], + "state_mutability": "view" + }, + { + "type": "function", + "name": "move", + "inputs": [ + { + "name": "direction", + "type": "dojo_starter::models::moves::Direction" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "UpgradableImpl", + "interface_name": "dojo::components::upgradeable::IUpgradeable" + }, + { + "type": "interface", + "name": "dojo::components::upgradeable::IUpgradeable", + "items": [ + { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "new_class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "struct", + "members": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Event", + "kind": "enum", + "variants": [ + { + "name": "Upgraded", + "type": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "nested" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::systems::actions::actions::Moved", + "kind": "struct", + "members": [ + { + "name": "player", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "key" + }, + { + "name": "direction", + "type": "dojo_starter::models::moves::Direction", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::systems::actions::actions::Event", + "kind": "enum", + "variants": [ + { + "name": "UpgradeableEvent", + "type": "dojo::components::upgradeable::upgradeable::Event", + "kind": "nested" + }, + { + "name": "Moved", + "type": "dojo_starter::systems::actions::actions::Moved", + "kind": "nested" + } + ] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_battleSystem_battleSystem.json b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_battleSystem_battleSystem.json new file mode 100644 index 0000000..119ede4 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_battleSystem_battleSystem.json @@ -0,0 +1,115 @@ +[ + { + "type": "impl", + "name": "DojoResourceProviderImpl", + "interface_name": "dojo::world::IDojoResourceProvider" + }, + { + "type": "interface", + "name": "dojo::world::IDojoResourceProvider", + "items": [ + { + "type": "function", + "name": "dojo_resource", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "WorldProviderImpl", + "interface_name": "dojo::world::IWorldProvider" + }, + { + "type": "struct", + "name": "dojo::world::IWorldDispatcher", + "members": [ + { + "name": "contract_address", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "type": "interface", + "name": "dojo::world::IWorldProvider", + "items": [ + { + "type": "function", + "name": "world", + "inputs": [], + "outputs": [ + { + "type": "dojo::world::IWorldDispatcher" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "UpgradableImpl", + "interface_name": "dojo::components::upgradeable::IUpgradeable" + }, + { + "type": "interface", + "name": "dojo::components::upgradeable::IUpgradeable", + "items": [ + { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "new_class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "struct", + "members": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Event", + "kind": "enum", + "variants": [ + { + "name": "Upgraded", + "type": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "nested" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::systems::battleSystem::battleSystem::Event", + "kind": "enum", + "variants": [ + { + "name": "UpgradeableEvent", + "type": "dojo::components::upgradeable::upgradeable::Event", + "kind": "nested" + } + ] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json new file mode 100644 index 0000000..ebb305f --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json @@ -0,0 +1,216 @@ +[ + { + "type": "impl", + "name": "DojoResourceProviderImpl", + "interface_name": "dojo::world::IDojoResourceProvider" + }, + { + "type": "interface", + "name": "dojo::world::IDojoResourceProvider", + "items": [ + { + "type": "function", + "name": "dojo_resource", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "WorldProviderImpl", + "interface_name": "dojo::world::IWorldProvider" + }, + { + "type": "struct", + "name": "dojo::world::IWorldDispatcher", + "members": [ + { + "name": "contract_address", + "type": "core::starknet::contract_address::ContractAddress" + } + ] + }, + { + "type": "interface", + "name": "dojo::world::IWorldProvider", + "items": [ + { + "type": "function", + "name": "world", + "inputs": [], + "outputs": [ + { + "type": "dojo::world::IWorldDispatcher" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "LobbyImpl", + "interface_name": "dojo_starter::systems::lobby::ILobby" + }, + { + "type": "struct", + "name": "core::integer::u256", + "members": [ + { + "name": "low", + "type": "core::integer::u128" + }, + { + "name": "high", + "type": "core::integer::u128" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::systems::lobby::ILobby", + "items": [ + { + "type": "function", + "name": "register_player", + "inputs": [ + { + "name": "name", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "view" + }, + { + "type": "function", + "name": "choose_blobert", + "inputs": [ + { + "name": "blobert_1", + "type": "core::integer::u8" + }, + { + "name": "blobert_2", + "type": "core::integer::u8" + }, + { + "name": "blobert_3", + "type": "core::integer::u8" + }, + { + "name": "blobert_4", + "type": "core::integer::u8" + }, + { + "name": "blobert_5", + "type": "core::integer::u8" + }, + { + "name": "blobert_6", + "type": "core::integer::u8" + } + ], + "outputs": [], + "state_mutability": "view" + }, + { + "type": "function", + "name": "find_battle", + "inputs": [ + { + "name": "challenger", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "message", + "type": "core::felt252" + }, + { + "name": "wager_coin", + "type": "core::integer::u8" + }, + { + "name": "wager_value", + "type": "core::integer::u256" + }, + { + "name": "expire_seconds", + "type": "core::integer::u64" + } + ], + "outputs": [ + { + "type": "core::integer::u128" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "UpgradableImpl", + "interface_name": "dojo::components::upgradeable::IUpgradeable" + }, + { + "type": "interface", + "name": "dojo::components::upgradeable::IUpgradeable", + "items": [ + { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "new_class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "struct", + "members": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::components::upgradeable::upgradeable::Event", + "kind": "enum", + "variants": [ + { + "name": "Upgraded", + "type": "dojo::components::upgradeable::upgradeable::Upgraded", + "kind": "nested" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::systems::lobby::lobby::Event", + "kind": "enum", + "variants": [ + { + "name": "UpgradeableEvent", + "type": "dojo::components::upgradeable::upgradeable::Event", + "kind": "nested" + } + ] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/dojo_world_world.json b/dojo-starter/manifests/dev/abis/base/dojo_world_world.json new file mode 100644 index 0000000..abb75db --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/dojo_world_world.json @@ -0,0 +1,657 @@ +[ + { + "type": "impl", + "name": "World", + "interface_name": "dojo::world::IWorld" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "dojo::resource_metadata::ResourceMetadata", + "members": [ + { + "name": "resource_id", + "type": "core::felt252" + }, + { + "name": "metadata_uri", + "type": "core::array::Span::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "enum", + "name": "core::bool", + "variants": [ + { + "name": "False", + "type": "()" + }, + { + "name": "True", + "type": "()" + } + ] + }, + { + "type": "interface", + "name": "dojo::world::IWorld", + "items": [ + { + "type": "function", + "name": "metadata", + "inputs": [ + { + "name": "resource_id", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "dojo::resource_metadata::ResourceMetadata" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "set_metadata", + "inputs": [ + { + "name": "metadata", + "type": "dojo::resource_metadata::ResourceMetadata" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "model", + "inputs": [ + { + "name": "name", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "(core::starknet::class_hash::ClassHash, core::starknet::contract_address::ContractAddress)" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "register_model", + "inputs": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "deploy_contract", + "inputs": [ + { + "name": "salt", + "type": "core::felt252" + }, + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [ + { + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "state_mutability": "external" + }, + { + "type": "function", + "name": "upgrade_contract", + "inputs": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [ + { + "type": "core::starknet::class_hash::ClassHash" + } + ], + "state_mutability": "external" + }, + { + "type": "function", + "name": "uuid", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "external" + }, + { + "type": "function", + "name": "emit", + "inputs": [ + { + "name": "keys", + "type": "core::array::Array::" + }, + { + "name": "values", + "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "view" + }, + { + "type": "function", + "name": "entity", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "keys", + "type": "core::array::Span::" + }, + { + "name": "layout", + "type": "core::array::Span::" + } + ], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "set_entity", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "keys", + "type": "core::array::Span::" + }, + { + "name": "values", + "type": "core::array::Span::" + }, + { + "name": "layout", + "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "base", + "inputs": [], + "outputs": [ + { + "type": "core::starknet::class_hash::ClassHash" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "delete_entity", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "keys", + "type": "core::array::Span::" + }, + { + "name": "layout", + "type": "core::array::Span::" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "is_owner", + "inputs": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "resource", + "type": "core::felt252" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "grant_owner", + "inputs": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "resource", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "revoke_owner", + "inputs": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "resource", + "type": "core::felt252" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "is_writer", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "system", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [ + { + "type": "core::bool" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "grant_writer", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "system", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + }, + { + "type": "function", + "name": "revoke_writer", + "inputs": [ + { + "name": "model", + "type": "core::felt252" + }, + { + "name": "system", + "type": "core::starknet::contract_address::ContractAddress" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "impl", + "name": "UpgradeableWorld", + "interface_name": "dojo::world::IUpgradeableWorld" + }, + { + "type": "interface", + "name": "dojo::world::IUpgradeableWorld", + "items": [ + { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "new_class_hash", + "type": "core::starknet::class_hash::ClassHash" + } + ], + "outputs": [], + "state_mutability": "external" + } + ] + }, + { + "type": "constructor", + "name": "constructor", + "inputs": [ + { + "name": "contract_base", + "type": "core::starknet::class_hash::ClassHash" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::WorldSpawned", + "kind": "struct", + "members": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + }, + { + "name": "creator", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::ContractDeployed", + "kind": "struct", + "members": [ + { + "name": "salt", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + }, + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::ContractUpgraded", + "kind": "struct", + "members": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + }, + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::WorldUpgraded", + "kind": "struct", + "members": [ + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::MetadataUpdate", + "kind": "struct", + "members": [ + { + "name": "resource", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "uri", + "type": "core::array::Span::", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::ModelRegistered", + "kind": "struct", + "members": [ + { + "name": "name", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + }, + { + "name": "prev_class_hash", + "type": "core::starknet::class_hash::ClassHash", + "kind": "data" + }, + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + }, + { + "name": "prev_address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::StoreSetRecord", + "kind": "struct", + "members": [ + { + "name": "table", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "keys", + "type": "core::array::Span::", + "kind": "data" + }, + { + "name": "values", + "type": "core::array::Span::", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::StoreDelRecord", + "kind": "struct", + "members": [ + { + "name": "table", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "keys", + "type": "core::array::Span::", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::WriterUpdated", + "kind": "struct", + "members": [ + { + "name": "model", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "system", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + }, + { + "name": "value", + "type": "core::bool", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::OwnerUpdated", + "kind": "struct", + "members": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress", + "kind": "data" + }, + { + "name": "resource", + "type": "core::felt252", + "kind": "data" + }, + { + "name": "value", + "type": "core::bool", + "kind": "data" + } + ] + }, + { + "type": "event", + "name": "dojo::world::world::Event", + "kind": "enum", + "variants": [ + { + "name": "WorldSpawned", + "type": "dojo::world::world::WorldSpawned", + "kind": "nested" + }, + { + "name": "ContractDeployed", + "type": "dojo::world::world::ContractDeployed", + "kind": "nested" + }, + { + "name": "ContractUpgraded", + "type": "dojo::world::world::ContractUpgraded", + "kind": "nested" + }, + { + "name": "WorldUpgraded", + "type": "dojo::world::world::WorldUpgraded", + "kind": "nested" + }, + { + "name": "MetadataUpdate", + "type": "dojo::world::world::MetadataUpdate", + "kind": "nested" + }, + { + "name": "ModelRegistered", + "type": "dojo::world::world::ModelRegistered", + "kind": "nested" + }, + { + "name": "StoreSetRecord", + "type": "dojo::world::world::StoreSetRecord", + "kind": "nested" + }, + { + "name": "StoreDelRecord", + "type": "dojo::world::world::StoreDelRecord", + "kind": "nested" + }, + { + "name": "WriterUpdated", + "type": "dojo::world::world::WriterUpdated", + "kind": "nested" + }, + { + "name": "OwnerUpdated", + "type": "dojo::world::world::OwnerUpdated", + "kind": "nested" + } + ] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert.json new file mode 100644 index 0000000..070b920 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert.json @@ -0,0 +1,299 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobertImpl", + "interface_name": "dojo_starter::models::blobert::Iblobert" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::Blobert", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::Iblobert", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::Blobert" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_game_game.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_game_game.json new file mode 100644 index 0000000..1b115b3 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_game_game.json @@ -0,0 +1,241 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "gameImpl", + "interface_name": "dojo_starter::models::game::Igame" + }, + { + "type": "struct", + "name": "dojo_starter::models::game::Game", + "members": [ + { + "name": "game_id", + "type": "core::integer::u128" + }, + { + "name": "player_a", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "player_b", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "message", + "type": "core::felt252" + }, + { + "name": "state", + "type": "core::integer::u8" + }, + { + "name": "round_number", + "type": "core::integer::u8" + }, + { + "name": "winner", + "type": "core::integer::u8" + }, + { + "name": "timestamp_start", + "type": "core::integer::u64" + }, + { + "name": "timestamp_end", + "type": "core::integer::u64" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::game::Igame", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::game::Game" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::game::game::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_moves_moves.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_moves_moves.json new file mode 100644 index 0000000..5e79937 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_moves_moves.json @@ -0,0 +1,243 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "movesImpl", + "interface_name": "dojo_starter::models::moves::Imoves" + }, + { + "type": "enum", + "name": "dojo_starter::models::moves::Direction", + "variants": [ + { + "name": "None", + "type": "()" + }, + { + "name": "Left", + "type": "()" + }, + { + "name": "Right", + "type": "()" + }, + { + "name": "Up", + "type": "()" + }, + { + "name": "Down", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::moves::Moves", + "members": [ + { + "name": "player", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "remaining", + "type": "core::integer::u8" + }, + { + "name": "last_direction", + "type": "dojo_starter::models::moves::Direction" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::moves::Imoves", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::moves::Moves" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::moves::moves::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json new file mode 100644 index 0000000..a872388 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json @@ -0,0 +1,257 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "playerImpl", + "interface_name": "dojo_starter::models::player::Iplayer" + }, + { + "type": "struct", + "name": "dojo_starter::models::player::Player", + "members": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_1", + "type": "core::integer::u8" + }, + { + "name": "blobert_2", + "type": "core::integer::u8" + }, + { + "name": "blobert_3", + "type": "core::integer::u8" + }, + { + "name": "blobert_4", + "type": "core::integer::u8" + }, + { + "name": "blobert_5", + "type": "core::integer::u8" + }, + { + "name": "blobert_6", + "type": "core::integer::u8" + }, + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "profile_pic", + "type": "core::integer::u8" + }, + { + "name": "total_duels", + "type": "core::integer::u16" + }, + { + "name": "total_wins", + "type": "core::integer::u16" + }, + { + "name": "total_losses", + "type": "core::integer::u16" + }, + { + "name": "timestamp", + "type": "core::integer::u64" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::player::Iplayer", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::player::Player" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::player::player::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_pokemon_pokemon.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_pokemon_pokemon.json new file mode 100644 index 0000000..eac188c --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_pokemon_pokemon.json @@ -0,0 +1,299 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "pokemonImpl", + "interface_name": "dojo_starter::models::pokemon::Ipokemon" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::PokemonTypes", + "members": [ + { + "name": "pokemon_id", + "type": "core::integer::u8" + }, + { + "name": "pokemon_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::pokemon::Pokemon", + "members": [ + { + "name": "pokemon_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "pokemon_type", + "type": "dojo_starter::models::types::PokemonTypes" + }, + { + "name": "pokemon_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::pokemon::Ipokemon", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::pokemon::Pokemon" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::pokemon::pokemon::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_position_position.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_position_position.json new file mode 100644 index 0000000..2cf9b23 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_position_position.json @@ -0,0 +1,227 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "positionImpl", + "interface_name": "dojo_starter::models::position::Iposition" + }, + { + "type": "struct", + "name": "dojo_starter::models::position::Vec2", + "members": [ + { + "name": "x", + "type": "core::integer::u32" + }, + { + "name": "y", + "type": "core::integer::u32" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::position::Position", + "members": [ + { + "name": "player", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "vec", + "type": "dojo_starter::models::position::Vec2" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::position::Iposition", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::position::Position" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::position::position::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json new file mode 100644 index 0000000..b3dc1b7 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json @@ -0,0 +1,217 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "roundImpl", + "interface_name": "dojo_starter::models::round::Iround" + }, + { + "type": "struct", + "name": "dojo_starter::models::round::Round", + "members": [ + { + "name": "duel_id", + "type": "core::integer::u128" + }, + { + "name": "round_number", + "type": "core::integer::u8" + }, + { + "name": "state", + "type": "core::integer::u8" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::round::Iround", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::round::Round" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::round::round::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_side_effect_side_effects.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_side_effect_side_effects.json new file mode 100644 index 0000000..129ae86 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_side_effect_side_effects.json @@ -0,0 +1,213 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "side_effectsImpl", + "interface_name": "dojo_starter::models::side_effect::Iside_effects" + }, + { + "type": "struct", + "name": "dojo_starter::models::side_effect::SideEffects", + "members": [ + { + "name": "player_address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "pokemon_id", + "type": "core::integer::u8" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::side_effect::Iside_effects", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::side_effect::SideEffects" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::side_effect::side_effects::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_blobert_types.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_blobert_types.json new file mode 100644 index 0000000..928fac6 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_blobert_types.json @@ -0,0 +1,243 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_typesImpl", + "interface_name": "dojo_starter::models::types::Iblobert_types" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::types::Iblobert_types", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::types::BlobertTypes" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::types::blobert_types::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_pokemon_types.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_pokemon_types.json new file mode 100644 index 0000000..06b25f7 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_types_pokemon_types.json @@ -0,0 +1,243 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "pokemon_typesImpl", + "interface_name": "dojo_starter::models::types::Ipokemon_types" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::PokemonTypes", + "members": [ + { + "name": "pokemon_id", + "type": "core::integer::u8" + }, + { + "name": "pokemon_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::types::Ipokemon_types", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::types::PokemonTypes" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::types::pokemon_types::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_systems_actions_actions_moved.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_systems_actions_actions_moved.json new file mode 100644 index 0000000..24e91f1 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_systems_actions_actions_moved.json @@ -0,0 +1,239 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "movedImpl", + "interface_name": "dojo_starter::systems::actions::actions::Imoved" + }, + { + "type": "enum", + "name": "dojo_starter::models::moves::Direction", + "variants": [ + { + "name": "None", + "type": "()" + }, + { + "name": "Left", + "type": "()" + }, + { + "name": "Right", + "type": "()" + }, + { + "name": "Up", + "type": "()" + }, + { + "name": "Down", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::systems::actions::actions::Moved", + "members": [ + { + "name": "player", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "direction", + "type": "dojo_starter::models::moves::Direction" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::systems::actions::actions::Imoved", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::systems::actions::actions::Moved" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::systems::actions::actions::moved::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_actions_actions.toml b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_actions_actions.toml new file mode 100644 index 0000000..a5a09bf --- /dev/null +++ b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_actions_actions.toml @@ -0,0 +1,9 @@ +kind = "DojoContract" +class_hash = "0x2ba96498480b9870625f788af7ed10381f12cf36e6a6d9beb7285271aa06d0d" +original_class_hash = "0x2ba96498480b9870625f788af7ed10381f12cf36e6a6d9beb7285271aa06d0d" +base_class_hash = "0x0" +abi = "manifests/dev/abis/base/contracts/dojo_starter_systems_actions_actions.json" +reads = [] +writes = [] +computed = [] +name = "dojo_starter::systems::actions::actions" diff --git a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_battleSystem_battleSystem.toml b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_battleSystem_battleSystem.toml new file mode 100644 index 0000000..0407cc5 --- /dev/null +++ b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_battleSystem_battleSystem.toml @@ -0,0 +1,9 @@ +kind = "DojoContract" +class_hash = "0xeb3e8868eb69828b5926ef64e5150a9e4a231b5913c6f20fda53603f832a7" +original_class_hash = "0xeb3e8868eb69828b5926ef64e5150a9e4a231b5913c6f20fda53603f832a7" +base_class_hash = "0x0" +abi = "manifests/dev/abis/base/contracts/dojo_starter_systems_battleSystem_battleSystem.json" +reads = [] +writes = [] +computed = [] +name = "dojo_starter::systems::battleSystem::battleSystem" diff --git a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml new file mode 100644 index 0000000..d21caa5 --- /dev/null +++ b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml @@ -0,0 +1,9 @@ +kind = "DojoContract" +class_hash = "0x9672b333dd7455feee919437528fec38e89c233818f07c0834fe0f2abe1ed0" +original_class_hash = "0x9672b333dd7455feee919437528fec38e89c233818f07c0834fe0f2abe1ed0" +base_class_hash = "0x0" +abi = "manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json" +reads = [] +writes = [] +computed = [] +name = "dojo_starter::systems::lobby::lobby" diff --git a/dojo-starter/manifests/dev/base/dojo_base_base.toml b/dojo-starter/manifests/dev/base/dojo_base_base.toml new file mode 100644 index 0000000..d926bca --- /dev/null +++ b/dojo-starter/manifests/dev/base/dojo_base_base.toml @@ -0,0 +1,4 @@ +kind = "Class" +class_hash = "0x679177a2cb757694ac4f326d01052ff0963eac0bc2a17116a2b87badcdf6f76" +original_class_hash = "0x679177a2cb757694ac4f326d01052ff0963eac0bc2a17116a2b87badcdf6f76" +name = "dojo::base::base" diff --git a/dojo-starter/manifests/dev/base/dojo_world_world.toml b/dojo-starter/manifests/dev/base/dojo_world_world.toml new file mode 100644 index 0000000..a08f22b --- /dev/null +++ b/dojo-starter/manifests/dev/base/dojo_world_world.toml @@ -0,0 +1,5 @@ +kind = "Class" +class_hash = "0x799bc4e9da10bfb3dd88e6f223c9cfbf7745435cd14f5d69675ea448e578cd" +original_class_hash = "0x799bc4e9da10bfb3dd88e6f223c9cfbf7745435cd14f5d69675ea448e578cd" +abi = "manifests/dev/abis/base/dojo_world_world.json" +name = "dojo::world::world" diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert.toml new file mode 100644 index 0000000..e404584 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert.toml @@ -0,0 +1,25 @@ +kind = "DojoModel" +class_hash = "0x70dbcd988d9cb1c4fafbebd5e5addec717dafb4a1c04af19e34590602f42e92" +original_class_hash = "0x70dbcd988d9cb1c4fafbebd5e5addec717dafb4a1c04af19e34590602f42e92" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert.json" +name = "dojo_starter::models::blobert::blobert" + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_game_game.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_game_game.toml new file mode 100644 index 0000000..68f1bde --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_game_game.toml @@ -0,0 +1,50 @@ +kind = "DojoModel" +class_hash = "0x1197965c8b1bc926813a69cbd276cf6b61e4c8d741087d66dd7ed41a34e92cc" +original_class_hash = "0x1197965c8b1bc926813a69cbd276cf6b61e4c8d741087d66dd7ed41a34e92cc" +abi = "manifests/dev/abis/base/models/dojo_starter_models_game_game.json" +name = "dojo_starter::models::game::game" + +[[members]] +name = "game_id" +type = "u128" +key = true + +[[members]] +name = "player_a" +type = "ContractAddress" +key = false + +[[members]] +name = "player_b" +type = "ContractAddress" +key = false + +[[members]] +name = "message" +type = "felt252" +key = false + +[[members]] +name = "state" +type = "u8" +key = false + +[[members]] +name = "round_number" +type = "u8" +key = false + +[[members]] +name = "winner" +type = "u8" +key = false + +[[members]] +name = "timestamp_start" +type = "u64" +key = false + +[[members]] +name = "timestamp_end" +type = "u64" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_moves_moves.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_moves_moves.toml new file mode 100644 index 0000000..f2036a5 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_moves_moves.toml @@ -0,0 +1,20 @@ +kind = "DojoModel" +class_hash = "0x23c28dcfad6be01ca6509fdb35fd2bed6622238397613c60da5d387a43c38d0" +original_class_hash = "0x23c28dcfad6be01ca6509fdb35fd2bed6622238397613c60da5d387a43c38d0" +abi = "manifests/dev/abis/base/models/dojo_starter_models_moves_moves.json" +name = "dojo_starter::models::moves::moves" + +[[members]] +name = "player" +type = "ContractAddress" +key = true + +[[members]] +name = "remaining" +type = "u8" +key = false + +[[members]] +name = "last_direction" +type = "Direction" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml new file mode 100644 index 0000000..3c68751 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml @@ -0,0 +1,70 @@ +kind = "DojoModel" +class_hash = "0x38f481814b978470dacdbcf2f847076426e3427ff8ecc408fbc6c30aa71ff6c" +original_class_hash = "0x38f481814b978470dacdbcf2f847076426e3427ff8ecc408fbc6c30aa71ff6c" +abi = "manifests/dev/abis/base/models/dojo_starter_models_player_player.json" +name = "dojo_starter::models::player::player" + +[[members]] +name = "address" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_1" +type = "u8" +key = false + +[[members]] +name = "blobert_2" +type = "u8" +key = false + +[[members]] +name = "blobert_3" +type = "u8" +key = false + +[[members]] +name = "blobert_4" +type = "u8" +key = false + +[[members]] +name = "blobert_5" +type = "u8" +key = false + +[[members]] +name = "blobert_6" +type = "u8" +key = false + +[[members]] +name = "name" +type = "felt252" +key = false + +[[members]] +name = "profile_pic" +type = "u8" +key = false + +[[members]] +name = "total_duels" +type = "u16" +key = false + +[[members]] +name = "total_wins" +type = "u16" +key = false + +[[members]] +name = "total_losses" +type = "u16" +key = false + +[[members]] +name = "timestamp" +type = "u64" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_pokemon_pokemon.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_pokemon_pokemon.toml new file mode 100644 index 0000000..c86e61d --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_pokemon_pokemon.toml @@ -0,0 +1,25 @@ +kind = "DojoModel" +class_hash = "0x20a891e592d0eab5e6bc184ae80f91628f846ef84882ed1725296a697c25bea" +original_class_hash = "0x20a891e592d0eab5e6bc184ae80f91628f846ef84882ed1725296a697c25bea" +abi = "manifests/dev/abis/base/models/dojo_starter_models_pokemon_pokemon.json" +name = "dojo_starter::models::pokemon::pokemon" + +[[members]] +name = "pokemon_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "pokemon_type" +type = "PokemonTypes" +key = false + +[[members]] +name = "pokemon_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_position_position.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_position_position.toml new file mode 100644 index 0000000..7febc03 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_position_position.toml @@ -0,0 +1,15 @@ +kind = "DojoModel" +class_hash = "0x2e9c42b868b520d54bff1b7f4c9b91f39bb2e2ad1c39d6484fb5d8a95382e01" +original_class_hash = "0x2e9c42b868b520d54bff1b7f4c9b91f39bb2e2ad1c39d6484fb5d8a95382e01" +abi = "manifests/dev/abis/base/models/dojo_starter_models_position_position.json" +name = "dojo_starter::models::position::position" + +[[members]] +name = "player" +type = "ContractAddress" +key = true + +[[members]] +name = "vec" +type = "Vec2" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml new file mode 100644 index 0000000..3a26da5 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml @@ -0,0 +1,20 @@ +kind = "DojoModel" +class_hash = "0x38bb48220575d06edf1fce3194b72eb3854667d2db08a1497200bf38b7b973f" +original_class_hash = "0x38bb48220575d06edf1fce3194b72eb3854667d2db08a1497200bf38b7b973f" +abi = "manifests/dev/abis/base/models/dojo_starter_models_round_round.json" +name = "dojo_starter::models::round::round" + +[[members]] +name = "duel_id" +type = "u128" +key = true + +[[members]] +name = "round_number" +type = "u8" +key = true + +[[members]] +name = "state" +type = "u8" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_side_effect_side_effects.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_side_effect_side_effects.toml new file mode 100644 index 0000000..0740a4b --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_side_effect_side_effects.toml @@ -0,0 +1,15 @@ +kind = "DojoModel" +class_hash = "0x55991fc8622ddddd765410a846d978b5f8cf529fc107f708342f5a0cc117302" +original_class_hash = "0x55991fc8622ddddd765410a846d978b5f8cf529fc107f708342f5a0cc117302" +abi = "manifests/dev/abis/base/models/dojo_starter_models_side_effect_side_effects.json" +name = "dojo_starter::models::side_effect::side_effects" + +[[members]] +name = "player_address" +type = "ContractAddress" +key = true + +[[members]] +name = "pokemon_id" +type = "u8" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_blobert_types.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_blobert_types.toml new file mode 100644 index 0000000..860043a --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_blobert_types.toml @@ -0,0 +1,15 @@ +kind = "DojoModel" +class_hash = "0x226c7cb1d7677c1e28c1c3465def76f5d147d6526511c1621bf1f296d47d0e1" +original_class_hash = "0x226c7cb1d7677c1e28c1c3465def76f5d147d6526511c1621bf1f296d47d0e1" +abi = "manifests/dev/abis/base/models/dojo_starter_models_types_blobert_types.json" +name = "dojo_starter::models::types::blobert_types" + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "blobert_type" +type = "Type" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_pokemon_types.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_pokemon_types.toml new file mode 100644 index 0000000..a46e6c2 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_types_pokemon_types.toml @@ -0,0 +1,15 @@ +kind = "DojoModel" +class_hash = "0x70bf34f5584df2fc7f90cdfdcd5d58dedc0f4ae6769fe59c7193bda1535e6b2" +original_class_hash = "0x70bf34f5584df2fc7f90cdfdcd5d58dedc0f4ae6769fe59c7193bda1535e6b2" +abi = "manifests/dev/abis/base/models/dojo_starter_models_types_pokemon_types.json" +name = "dojo_starter::models::types::pokemon_types" + +[[members]] +name = "pokemon_id" +type = "u8" +key = true + +[[members]] +name = "pokemon_type" +type = "Type" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_systems_actions_actions_moved.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_systems_actions_actions_moved.toml new file mode 100644 index 0000000..0c1aa2b --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_systems_actions_actions_moved.toml @@ -0,0 +1,15 @@ +kind = "DojoModel" +class_hash = "0xf00737ffe57c5c931bfec9a7ea66f76d5eaae12cacca6952dcee0c2e3d8038" +original_class_hash = "0xf00737ffe57c5c931bfec9a7ea66f76d5eaae12cacca6952dcee0c2e3d8038" +abi = "manifests/dev/abis/base/models/dojo_starter_systems_actions_actions_moved.json" +name = "dojo_starter::systems::actions::actions::moved" + +[[members]] +name = "player" +type = "ContractAddress" +key = true + +[[members]] +name = "direction" +type = "Direction" +key = false diff --git a/dojo-starter/src/lib.cairo b/dojo-starter/src/lib.cairo index eb4fc7c..53023ef 100644 --- a/dojo-starter/src/lib.cairo +++ b/dojo-starter/src/lib.cairo @@ -3,20 +3,24 @@ mod systems { mod game_id_generate; mod utils; mod lobby; + mod battleSystem; } mod types { mod game; + mod blobert; + mod round; } mod models { mod moves; mod position; - mod pokemon; + mod blobert; mod side_effect; mod types; mod game; mod player; + mod round; } mod tests { diff --git a/dojo-starter/src/models/blobert.cairo b/dojo-starter/src/models/blobert.cairo new file mode 100644 index 0000000..63f8f13 --- /dev/null +++ b/dojo-starter/src/models/blobert.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert { + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} + + diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo index c06a614..5c94ab5 100644 --- a/dojo-starter/src/models/player.cairo +++ b/dojo-starter/src/models/player.cairo @@ -1,10 +1,17 @@ use starknet::ContractAddress; +use dojo_starter::models::blobert::{Blobert}; #[derive(Model, Copy, Drop, Serde)] struct Player { #[key] address: ContractAddress, + blobert_1: u8, + blobert_2: u8, + blobert_3: u8, + blobert_4: u8, + blobert_5: u8, + blobert_6: u8, name: felt252, profile_pic: u8, total_duels: u16, diff --git a/dojo-starter/src/models/pokemon.cairo b/dojo-starter/src/models/pokemon.cairo deleted file mode 100644 index 07f4da8..0000000 --- a/dojo-starter/src/models/pokemon.cairo +++ /dev/null @@ -1,20 +0,0 @@ -use starknet::ContractAddress; -use dojo_starter::models::{types::PokemonTypes, side_effect::SideEffectType}; - -//this will be the pokemon -#[derive(Model, Drop, Serde)] -struct Pokemon { - #[key] - pokemon_id: u8, - health: u8, - pokemon_type: PokemonTypes, - pokemon_side_effect: SideEffectType, -} - -#[derive(Serde, Copy, Drop, Introspect)] -enum PokemonGen1 { - Charmander, - Bulbasaur, - Squirtle -} - diff --git a/dojo-starter/src/models/round.cairo b/dojo-starter/src/models/round.cairo new file mode 100644 index 0000000..0e59d82 --- /dev/null +++ b/dojo-starter/src/models/round.cairo @@ -0,0 +1,11 @@ +#[derive(Model, Copy, Drop, Serde)] +struct Round { + #[key] + duel_id: u128, + #[key] + round_number: u8, + //--------------- + state: u8, // actually a RoundState + // move_a: Move, // duelist_a shot + // move_b: Move, // duelist_b shot +} diff --git a/dojo-starter/src/models/types.cairo b/dojo-starter/src/models/types.cairo index 14a1694..d19f0c2 100644 --- a/dojo-starter/src/models/types.cairo +++ b/dojo-starter/src/models/types.cairo @@ -2,10 +2,10 @@ use starknet::ContractAddress; //this will be the pokemon types #[derive(Model, Drop, Serde)] -struct PokemonTypes { +struct BlobertTypes { #[key] - pokemon_id: u8, - pokemon_type: Type + blobert_id: u8, + blobert_type: Type } #[derive(Serde, Copy, Drop, Introspect)] diff --git a/dojo-starter/src/systems/battleSystem.cairo b/dojo-starter/src/systems/battleSystem.cairo index 13505f7..0e46729 100644 --- a/dojo-starter/src/systems/battleSystem.cairo +++ b/dojo-starter/src/systems/battleSystem.cairo @@ -1,21 +1,42 @@ -// #[dojo::interface] -// trait IBattleSystem { -// fn start(); -// fn battle(); -// } - -// #[dojo::contract] -// mod battleSystem { -// use super::{IBattleSystem}; - -// use starknet::{ContractAddress, get_caller_address}; - -// #[abi(embed_v0)] -// impl BattleSystemImpl of IBattleSystem { -// fn start(world: IWorldDispatcher) { -// //Get the address of the current caller, possibly the player's address. -// let player = get_caller_address(); -// } -// } -// } + + +#[dojo::contract] +mod battleSystem { + + use starknet::{ContractAddress, get_caller_address}; + use dojo_starter::models::game::Game; + use dojo_starter::models::round::Round; + use dojo_starter::types::game::GameState; + use dojo_starter::types::round::RoundState; + + fn _assert_challenge(world: IWorldDispatcher, caller: ContractAddress, game_id: u128, round_number: u8) -> (Game, u8) { + let game: Game = get!(world, game_id, Game); + + let player_number: u8 = if (game.player_a == caller) { 1 } else if (game.player_b == caller) { 2 } else { 0 }; + assert(player_number == 1 || player_number == 2, 'Not your Challenge!'); + + assert(game.state == GameState::InProgress.into(), 'Challenge is not in Progress'); + assert(game.round_number == round_number, 'Bad Round Number'); + + (game, player_number) + } + + // fn commit_move(world: IWorldDispatcher, game_id: u128, round_number: u8, hash: u64){ + // let caller: ContractAddress = starknet::get_caller_address(); + + // let(_game, _player_number) = _assert_challenge(world, caller, game_id, round_number); + + // let round: Round = get!(world, (game_id, round_number), Round); + // assert(round.state == RoundState::Commit.into(), 'Round not in Commit'); + + // //Validate action hash WORK IN PROGRESS + // if (_player_number == 1) { + // assert(round.shot_a.hash == 0, 'Already committed'); + // round.shot_a.hash = hash; + // } else if (_player_number == 2) { + // assert(round.shot_b.hash == 0, 'Already committed'); + // round.shot_b.hash = hash; + // } + // } +} diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo index 01b780b..0c89569 100644 --- a/dojo-starter/src/systems/lobby.cairo +++ b/dojo-starter/src/systems/lobby.cairo @@ -3,6 +3,7 @@ use starknet::{ContractAddress}; #[dojo::interface] trait ILobby { fn register_player(self: @TContractState, name: felt252); + fn choose_blobert(self: @TContractState,blobert_1: u8, blobert_2: u8, blobert_3:u8, blobert_4:u8, blobert_5: u8, blobert_6:u8); fn find_battle( self: @TContractState, challenger: ContractAddress, @@ -18,7 +19,7 @@ mod lobby { use super::{ILobby}; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; - use dojo_starter::models::{pokemon::Pokemon, player::Player, game::Game}; + use dojo_starter::models::{blobert::Blobert, player::Player, game::Game}; use dojo_starter::types::game::{GameState}; use dojo_starter::utils::timestamp::{timestamp}; use dojo_starter::systems::game_id_generate::{make_seed}; @@ -40,8 +41,21 @@ mod lobby { return (); } + fn choose_blobert(self: @ContractState, blobert_1: u8, blobert_2: u8, blobert_3:u8, blobert_4:u8, blobert_5: u8, blobert_6:u8){ + let caller: ContractAddress = starknet::get_caller_address(); + let mut player: Player = get!(self.world(), caller, Player); + player.blobert_1 = blobert_1; + player.blobert_2 = blobert_2; + player.blobert_3 = blobert_3; + player.blobert_4 = blobert_4; + player.blobert_5 = blobert_5; + player.blobert_6 = blobert_6; + set!(self.world(), (player)); + return (); + } + fn find_battle( - self: @TContractState, + self: @ContractState, challenger: ContractAddress, message: felt252, wager_coin: u8, diff --git a/dojo-starter/src/types/blobert.cairo b/dojo-starter/src/types/blobert.cairo new file mode 100644 index 0000000..8a85e66 --- /dev/null +++ b/dojo-starter/src/types/blobert.cairo @@ -0,0 +1,24 @@ +fn GOATbert() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAPFBMVEVynT8OFB4vN2AnKUbat5Hr7ey4m2y1e1Z+TT/jUiZCeDHT09M1KBsbHTFZXWTo1bI2HiaOTym+vr5lMSsL6GM2AAABJUlEQVRIx+2U227CMBAFM7YXG8K1/f9/7dkkEEWYOPSpUhmBV0IzWkcgug9/GMRb+jGltD3hKF8cecPfXjD7XkDLl5bT5XIpqehMpdAKIO2c8aQ0V5SSdgaS/cxtP+cxmM5mkBXMV9oYiL2TBC1fuI+z3xAwBQNbAgOkSR1PaCyIFgLpAcFY86MwC0B2PcsPkdd+30fH7lvcV8Br38y8CJqgtwUFKlZ8c3/Ag+BEvqAamEMl6HPiqaH0C/88FuchzRQ1T786FZyGYLmCIioBuZdfC/AgU/lnOSmoXMmpP7d8sdyw+s3F3wRicaWooFUsNiz86kOIOZgWtIuzB2i43y4cX+Cja8A9wX3o2sBMtwW+bzc0rtfrenDoDv464DzG+Gn3z/kB1PwLYQz1ak4AAAAASUVORK5CYII=" +} +fn STARKbert() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAdVBMVEUxXm4pKSkOFB42HiaAQX0lGCmsTIuGWUFALFNKIh9lMCtlPSoeHzqOTynGhlP6+vpri5bld5DOYJV5aHukckzGzc7s7elLjLqmtLP/2oPZYjn/YizIyLcvQGd+TT+Id57knz5+lZdUb3lfX2a1e1aPclPat5EjmLmAAAACjklEQVRIx5XTi3qiMBQEYDk5BnKB9YKKl7Z22933f8SdgfAFV9rqfMVQnN9jUBdLYxZP5XngvwJv48nqDuQnP2bg6teNMADfZgWwehjw9ZmJ8M9O8PX3IO9hNbg6A2EW/ZGSrg319M4yEHGudOJCwOHKMjgngiuOgvX1mqIHWTRNGUr8IVybhn1sgn1kOwG+JwEg9N3QgyCSbhTa2x74AQyLOBZzguMG1uxvUd7m25qYBOSy37O83+//vr4SbIc3wzM2WeVDApcLmpcG4VpK39umPpyp/fQrK+iLSMNgvaCfw0kEy0m/LJurHAHwnrBeMxgnLAnQz+AokoCA3ADsAaBmP4P2eDxecf9DuOLsP/B2Az5wV0uMYFrn/rRYZCyOIWC/4DkB0rZt6QAEH6DM/ETrxQgKcQ5lBmdBsM4Bz2rBQ0QIkgAIEmUWFD2QWEWRuoNpWydOSlyp5A6YBPAsE+OuDW0bnIROK1WZiiIDvr6qVhWOnQuI21lbWa0mohhAwch7p0qhVjcQBOhbqxITKXpgjB+Adjv0pQcQacCawPFDH4GveyCvanediqpFD8C53QbnEADiQiloowhQD+BTbScxgU2HPgD6BG4OyCeGE5wpCNQeLCJCEACYhSGgQKIeVM/nM28OBxwOB6sHGcLXJ1h6gsFUaEBYgm5TWU5QlWLMPeAEtUjsNgCMVt8CzQD9ebC8BSeK6p0DzuzfAbP0GVR6OkEA2Gix+x8BBabE3xYAEzjxayAxUvRA0WedE++BH/svFBF9GGXw7ynebdpAiLD/AhFlkgqZAcZIRDiBdXxZBJd4eYj3vma874FBJMcMj2lJSQRLP+HxFEUGyx9i8h5yu3ggC+Lcfgg8Xmf+AcWQLpStcG/dAAAAAElFTkSuQmCC" +} +fn _1337bert() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAANlBMVEU2kOaKmf/Qrf9NdasOFB6OTykHe5TGeSfknz42Hib/u7sNSHbr7eztwG0Am/8JMGYUobRlMSs1CSYHAAAC2UlEQVRIx22Ui3ajIBRFAS+KUcfM//9sz+OGNFk9GWEa94bLoy1lKXWpdWFfKlMK/i2LnuUjeomuSDD9TmyBtxSzo1CqOn5lKNB4lriGhOJhZWHQRsHfaNArOASfuELDWl+SryWTL2IKMPzSPOLx5zrd13BVaJeiNiJxtgChkGdm7TDiPKNUVhUjsgQKrUrwJqQZ4wzwF9sR3gcWYgYCNyqNFK4TuS48gytqrS74zFWTp5DGAuGigFBYJOQuKd5iG5wutjHIMhuFWl2tU81acOJXmuavikZmN5P4fawzcHikrTUZXwI3IkAd6/P5vNcb7XrfwfOyYUERbyE+cwdPSxGrecxDoHHfa5wg3R7ggXqGuUtzAeSPYyW7Zhu+NtIEi34nDgi/Ex6ejmhPM/F4Cf8YCchrb/KcfTHE771v20E+GBqx73u86tdGmacXO9LHoKBI6HuH0XjkpFyPJgrQHc8Fg6jaIzZ+G41obqxrc0E0KDjkB4UeqAVCzuAd4NwyznHnyo8jUKGnqJrAghNYL4XrHO8pRu8njH2LqvisHVS0IQM8rremwOgY5ETXw0eNM4FgKWAwQ9Ev3MZ0JrheXaoHenx0xqFcI3NuTo9Yn3jBA28PC+S9zuh/CMcaBxzQr/opmA+WnHkLCIU8B1uoiPz+l+ALJqE+MLq1YHg7ppH8Hs6jNRXlm6RWPHY+l5E8t5SwA6E4sCj0fevO7nBPHWuoxlLl2dHYMj0TEmaAmmdj40PQ3dYHDHvfVp9GCRqTzHxOAAHxJYQV8VXS7gnyUzVRA58rr+27pBy/PvDkLlUKsGzUoMIYJ68DkMQA9Z9AO3jiV0AK8yz4gQJhxh2E/9hKdFyvhZTeAmzC1jxDXhWDCOgsjZU07WqVBZkBhf+IsDADArQK4xZIroRois+yvEOYASOZrQxl86m9HOOcge8UDuGIL+oygjTIo9CuOrSXoaWZR2NeL8X8AB+DIT7+qudZAAAAAElFTkSuQmCC" +} +fn ambert() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAPFBMVEXGzc4OFB4fLjhUb3k4SVF+lZcVHStwbf/at5Hr7ey1e1ZDIjB8LTnjUiaLkdl+TT+uOy82HiaOTyllMSuXnQ9xAAACbUlEQVRIx4WWgXKjMAxEkWT7EpI2ae////V218Y2pjddoAywj5UQZbJF+HZVrlskHaXAkVYcu8fGK11x9ttJ9Qa6cij87H/Oy9Oaa/YrftRjn2PpCZEWf6tXwJ/PsTCARV/9CggIAHW/awdAiAAH2vxW5TgZJj/UgCE/7o9KU06lFDOcNPqZQMIiZgCiH4kiiAi4Y+XGhAGENz9LJ1HcQQCAkQAJAXO71S9iKy5i6SGa21u7V+Dcw3T3w59UUgfKpQeHul9AylkJBSiB0cP0lDLKF+Dw768MIei1p7IMrgF0y18I3O5mt/o39a67P1NHzgTcDiBMgPytou5nggPoIsD3T7KQfwaMgBP4oCpglkWo4SlBBR3Ah1EfAjTuNgJmDMAKASgYoIhwnirC6Z4A+R2bMjY1sGXXPUA8Hm0EJ8ChApGQn4eJp+35sG1IgHnxQQhIOIggoZKgkZAzZ+wqJ0BkANmFgrD3GxHRPilSHTIU7C3nfQehlxBEJIMC8k3SpA0EFVKmEuVeeyAw9RDJXiZl+hmjjwMJs/02gOF/7ZC5gNpc2irw2u2538w7wEtW/caSR3YDXvYmIGIARn/5CTAADAcxgM0oTlrE5C8GvTG4qMT83bU6tBxSSvI7X/D3OukOeEleVar8BEScgEIiNXmTdUD2uaY0Ez0ITgGyj0mrIwOxljSAoYxFSmZLSfRD6+utV1CjXUui/8cEMazLiEiyy3ZNyAdI2SQ+PSauwAFps7/f3wbu6+tL0w2+mo8VaCukBALaSUkHq3/sl2wCVb8Dylx/J8g51qtECFFHS9M/E0Loj8tj/S/R/xv+AdjNGQOWnxXiAAAAAElFTkSuQmCC" +} +fn blobertt() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAMFBMVEXGeScOFB4umYoccHvat5G1e1aOTyl+TT8RSWHjUiZlMSvo1bLr7eztwG02Hibknz4LjlRSAAABUUlEQVQ4y93SsU7DMBAGYHvJwORT2iYwINVeWBiSW1grOUKMFfWeLBm6VRBlJwsPwJKxS58AiaETL8TAE3BOqtZOI1YkflmxdV/OsiWz/xcO4jAP6lO96ORqJzyYrrRe2h/K9dZrqLTWmaAFuyjcerTSlAVQR+7CRK/2H/f791owEQgXIKufdV1Fgs3WLvBaf05oLGnJmZPI9LAYwtToLqPQtm9nwI3RDwCX49C27TlUBJrG8FQQme7mWSg84JhENVG2VIkHISJ255UyEQ5wlApTY6guERwIUypICs0qBgeknI8Bf5LSNslbRZ94c4IqnTcWpIXIgc1jjEeAEzCAVzxuBeBesEE8dCjh3/wXSPutUHD3kYQEfUfCPIj7vW6kGgBvrHy/KBQ+UIuVBhM2AG7lDhNByy3zBGwEO4ddwa6/BhAEeVkAlACzMsgLyNkf5wdT9lcjt0jFrAAAAABJRU5ErkJggg==" +} +fn blobhetti() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAclBMVEXGzc4OFB5Ub3l+lZcfLjg4SVH7rbTo1bIVHSvkj630pFSmtLPlcDD//fL/zNG4TSXFlnGmJwTJ19LMaKG1e1br7ew0arZXXHF+TT+URhtzNxbPMQU1iS8uZyk8pDU2HiYiTB/8SReOTylTKRGQIwVlMSswwqlYAAACwUlEQVRIx5WV2WKjMAxFkWwGcE0IZKZptu7z/784V5KDKORlLlsp5yDZcdOKOVbbBDu41ruacac77mPEHZ7M4Q0PyAWJP0E4bvmtsOSlvPP+kuC/wnXF+9s0kRecNP2DJw8zlwLOq6I/RKiRiX55iPTd87QY7wMDL7in68h5YaSkCzjoTmLDjgOGosZj/zGdBAZRuJxE4CKwHT5cLzALOzGiCcYVOirfGb077Dpscul3JvjMG69eoML3TX/ou74/7EgEdkEqRMR46whv7o/Ymh5FSFqK9zH4LNkHr8Kh2+920/PzRA1OT/SLUEArGF0E0Ah1BxFomp5pOjY4TUf97LwlBiup7kIH4dj3RP3U4CSCMN6Sv1+EA9Ltm6mfpr5pml4sea6Cj8AFRIRlCNF1zYr/qBCojViBK6FtW/JJheQCtUhkNhC7XmMbfbG7YHyMOEIxlN9TTTTkS86XCxGopQBeDAga45lSTq+XMZ9SymLMgtRWo+KX/X6v+J4i5eF8ul5vpzSMQ6a5QgiE8YoQKvYSTDnl0/n2fhvOafjWGkGjHdUIg+cQtAQzVTmlr/OYhutrSsMwPmlX4CHAkLAmSOqaqjGDu7xfb9fzCYoJ+sHQC2mC8DrhtQg55zSOt/dXdJaGDGHmX34jFE2obEnTn+pjzF8J6Pc4XMbKBH1kPMXKBAs9wUBTYozjB96zEEj4di3ASBkjBz8CdaEiDRbH0qjFkNit8f69q3yM+L2mRmDcE4LxZsxCbOtoaS1UcOO1tgutGHVJLCECqzgZ7j3VbrjQkg3PcQihfJcRjHVLEDYJ2Mqk0KqlLT+v1iBCtW7J+VUFdaQvEgUp+ENe8cVf3iIye1JxLdwlPejv5yfBe3t7I6mJpbsR5h2xClW5aB7yfl0m/K/g/85LOBrp+zZqqKIjWg/6sWEKA99O62NDaHv9P2esInKtwFGRAAAAAElFTkSuQmCC" +} +fn bobbyrealms() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwBAMAAAClLOS0AAAAMFBMVEVLjLoOFB4eJzfat5EXHyrr7ey1e1Z+TT/jUiY+aJ7Imh/o1bLwuSc2HiaOTyllMSvySQkBAAABO0lEQVQ4y93TMU7DMBQG4GTs5qc2DUgw9Ck9QPREYE31LpBSHwBFygUQzQFYMoYxI0sHVgaG3gD1CgxcBPGcphGxw4zEL0/+9Dt+luL9v/igxvfnFI/KPCe6GytsiShR7n6YkyQGG6aU79+u96+lsgGS8p7KbWiDX1I2leV8PiyOEDuXLajNKFTVowN+UdANwNk4VFXlghYgWZkFEOh28qu1GhY41brIKdGYDmDGzFqbAqYKJOpUwIhXIgIMF4f3lw5mK0RGXGYBYhTAAaArbPAn3D6r/q6IpoQGMMh28Qke1osWtAMbYANLA5Dt+rcH6AAM9Jc1HRkEJQKRGk7+O7RnLRBZ2W8iYJJar9udhZEF/uwokZzkVESYU/cfYJNUea4Am9Fc+Pr0Lj8smEzq5gmgAThvJnXt/Xm+ATHBU++mRAN8AAAAAElFTkSuQmCC" +} +fn breadbert() -> ByteArray { + "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAA9lBMVEXztnjOfEDooWP458v0t3fHbS7bk1HcklH55soIFCEJEyLvjgLMXxf2qkCkWiXJbS7KXxajWiXPe0D8uQLLXxUJEx/HbDD0t3j85wLujwHwjgLRaiXKYBT00aD1qz/OfEHwyJHJYBmxXSX65sv0q0ELEhz+8Nf658z98NnQayTGhF3GbC/HYBX5TQv85gUBAADv2LD6Tgv95gT85QTyuHvyt3rGg1uRU0TOaig5Jg71um06Jw/75wb+//7+/vzt2LTt17Lx0qPwuHzztXbyrEOPUkOlWyX3Tg84JA396AUBAQP459Ht2LP0uXqTUkI7Jw77Twr94wXs0waxAAADvklEQVRIx5WVh3qbMBSFaQUEDWzFoDJCINgQx27ibLvp3nu+/8v0SDbGq/3aEwsI1s+5R1ch1j/Jdrpdx3EedLvd5a1NbQPvOx2nBdxNbQJO54HjvHdah701ufY2MB/tTdd2V8ZWBuifAeiNo9XBaEO7+idyrT0bo516u5wQ7e/vdzrNr66rK3cpY5RhrGiJRsZlCZio6tHIr/w1VfWScPYfdNYAtz4Y+W89QghGo6piN38AXHVw4OfDgUe8Vx4ZDogmPc+v2J8cqAa8w0PPTMVJH4lf0TXg3j07siCkZqPRHIBggYNGqrd03soG6AGZr6tLkdnHvOl0PBu+G0/HIPKq1uXuuUsHqGcQEAxFEW86m70jZDD7PhsjNIv2TI9aYC5jQg0wfkYVinlO2ZQQn0Xz7m8CJgsc8sMBAKoBxcYeANvd6aCzGGDoDchwiNBkQDwNoP610CuyTIbBISEfLs/OLk1DNAD9DcBzLylllJ4RaAdQRLaeXWBnKpSkG3Z5eQaHn2jeLgBhNWHfKEZHB/kApZtnDz4QbxfQQ34AvZs6TK4/Zf7RkUcgZNdnAG/cnUDBSiGkjOXJ8RGBmj0Fh2gHUBS0zMIkCII4OzmBiQH0riI5fWy7ULQOKBlyLmUQB0/L45NjIB6ygIKFiiILk1YB1C9EJienKT+9+iReXhjE1EVyxZlSr28f2ytARCXn1zoBSgpikbzQLsQoZynNc0XXHKgIQyTGdMnjMohP0wtjgoVChpRh02ITtgAM0jSZxFIEVzzO0uDqlCcXX+dR4MCwyD5dAZRMWeV5qS4n41eSBxPBeXDx4gIIHNQXGKkVgJU0Jx5RsQj5VZjwkAcx1hh6eXx8RNNSUUof2iuArCv0lnEUxTPBkyxADs45IHlCUyGYBa06COXnlUoTlDORYZpg5nWQpTyJn57SUJTq1opsB+ouHERJmQp5mMTZdSayySThPMWTw0wIJcv6m928wRsAKgUIrvuBJsbxJMV1HJewp68tqwXuYVlVqAkAScgFkkgZisw8HtUw9MwARnAAcVOXIQQi5RKFx9dJ8ivhTzMZ1o+b133HyNJ//r1eQRkkJZYmyFA9IiRwlaJuX/YPjTSgmaIHMaYk1+vPAxA8LBm9tRrtzwVgTZR+Pj8//1zTc4harboLLQGYmEOBfyqP6qKH00jpUvQniiJnIet+o/79vv70nzz5ePej37+7+/jkrm9u4atWAP5Pi5JwNT9vqil4eb0AivvFPMgG1q7GBtB80+DbSHNltc/fCWyhvwHm2W+WN3oxegAAAABJRU5ErkJggg==" +} \ No newline at end of file diff --git a/dojo-starter/src/types/game.cairo b/dojo-starter/src/types/game.cairo index 75bfa2c..1989920 100644 --- a/dojo-starter/src/types/game.cairo +++ b/dojo-starter/src/types/game.cairo @@ -92,7 +92,7 @@ impl GameStateIntoU8 of Into { impl TryU8IntoGameState of TryInto { fn try_into(self: u8) -> Option { - if self == GameState::NULL { + if self == GAME_STATE::NULL { Option::Some(GameState::Null) } else if self == GAME_STATE::AWAITING { Option::Some(GameState::Awaiting) diff --git a/dojo-starter/src/types/round.cairo b/dojo-starter/src/types/round.cairo new file mode 100644 index 0000000..074a6c8 --- /dev/null +++ b/dojo-starter/src/types/round.cairo @@ -0,0 +1,90 @@ +use traits::Into; +use debug::PrintTrait; + +#[derive(Copy, Drop, Serde, PartialEq, Introspect)] +enum RoundState { + Null, + Commit, + Reveal, + Finished, +} + +mod ROUND_STATE { + const NULL: u8 = 0; + const COMMIT: u8 = 1; + const REVEAL: u8 = 2; + const FINISHED: u8 = 3; +} + +trait RoundStateTrait { + fn exists(self: RoundState) -> bool; + fn finished(self: RoundState) -> bool; +} + +impl RoundStateTraitImpl of RoundStateTrait { + fn exists(self: RoundState) -> bool { + match self { + RoundState::Null => false, + RoundState::Commit => true, + RoundState::Reveal => true, + RoundState::Finished => true, + } + } + fn finished(self: RoundState) -> bool { + match self { + RoundState::Null => true, + RoundState::Commit => false, + RoundState::Reveal => false, + RoundState::Finished => true, + } + } +} + +impl RoundStateIntoU8 of Into { + fn into(self: RoundState) -> u8 { + match self { + RoundState::Null => ROUND_STATE::NULL, + RoundState::Commit => ROUND_STATE::COMMIT, + RoundState::Reveal => ROUND_STATE::REVEAL, + RoundState::Finished => ROUND_STATE::FINISHED, + } + } +} + +impl TryU8IntoRoundState of TryInto { + fn try_into(self: u8) -> Option { + if self == ROUND_STATE::NULL { Option::Some(RoundState::Null) } + else if self == ROUND_STATE::COMMIT { Option::Some(RoundState::Commit) } + else if self == ROUND_STATE::REVEAL { Option::Some(RoundState::Reveal) } + else if self == ROUND_STATE::FINISHED { Option::Some(RoundState::Finished) } + else { Option::None } + } +} + +impl RoundStateIntoFelt252 of Into { + fn into(self: RoundState) -> felt252 { + match self { + RoundState::Null => 0, + RoundState::Commit => 'Commit', + RoundState::Reveal => 'Reveal', + RoundState::Finished => 'Finished', + } + } +} + +impl TryFelt252IntoRoundState of TryInto { + fn try_into(self: felt252) -> Option { + if self == 0 { Option::Some(RoundState::Null) } + else if self == 'Commit' { Option::Some(RoundState::Commit) } + else if self == 'Reveal' { Option::Some(RoundState::Reveal) } + else if self == 'Finished' { Option::Some(RoundState::Finished) } + else { Option::None } + } +} + +impl PrintRoundState of PrintTrait { + fn print(self: RoundState) { + let num: felt252 = self.into(); + num.print(); + } +} From 4c1016111839c9826bc90587c78e46790f7323d6 Mon Sep 17 00:00:00 2001 From: makluganteng Date: Sun, 7 Apr 2024 19:01:48 +0700 Subject: [PATCH 3/6] feat: current progress 19:01 --- .../dojo_starter_systems_lobby_lobby.json | 2 +- ...er_models_blobert_blobert_1_blobert_1.json | 303 ++++++++++++++++++ ...er_models_blobert_blobert_2_blobert_2.json | 303 ++++++++++++++++++ ...er_models_blobert_blobert_3_blobert_3.json | 303 ++++++++++++++++++ ...er_models_blobert_blobert_4_blobert_4.json | 303 ++++++++++++++++++ ...er_models_blobert_blobert_5_blobert_5.json | 303 ++++++++++++++++++ ...er_models_blobert_blobert_6_blobert_6.json | 303 ++++++++++++++++++ .../dojo_starter_models_player_player.json | 246 +++++++++++++- .../dojo_starter_systems_lobby_lobby.toml | 4 +- ...er_models_blobert_blobert_1_blobert_1.toml | 30 ++ ...er_models_blobert_blobert_2_blobert_2.toml | 30 ++ ...er_models_blobert_blobert_3_blobert_3.toml | 30 ++ ...er_models_blobert_blobert_4_blobert_4.toml | 30 ++ ...er_models_blobert_blobert_5_blobert_5.toml | 30 ++ ...er_models_blobert_blobert_6_blobert_6.toml | 30 ++ .../dojo_starter_models_player_player.toml | 16 +- dojo-starter/src/lib.cairo | 10 +- .../blobert_1.cairo} | 8 +- .../src/models/blobert/blobert_2.cairo | 16 + .../src/models/blobert/blobert_3.cairo | 16 + .../src/models/blobert/blobert_4.cairo | 16 + .../src/models/blobert/blobert_5.cairo | 16 + .../src/models/blobert/blobert_6.cairo | 16 + dojo-starter/src/models/moves.cairo | 44 +-- dojo-starter/src/models/player.cairo | 16 +- dojo-starter/src/systems/actions.cairo | 97 ------ dojo-starter/src/systems/lobby.cairo | 33 +- 27 files changed, 2386 insertions(+), 168 deletions(-) create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.json create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.json create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.toml create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.toml rename dojo-starter/src/models/{blobert.cairo => blobert/blobert_1.cairo} (86%) create mode 100644 dojo-starter/src/models/blobert/blobert_2.cairo create mode 100644 dojo-starter/src/models/blobert/blobert_3.cairo create mode 100644 dojo-starter/src/models/blobert/blobert_4.cairo create mode 100644 dojo-starter/src/models/blobert/blobert_5.cairo create mode 100644 dojo-starter/src/models/blobert/blobert_6.cairo delete mode 100644 dojo-starter/src/systems/actions.cairo diff --git a/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json index ebb305f..4359fec 100644 --- a/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json +++ b/dojo-starter/manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json @@ -125,7 +125,7 @@ "name": "find_battle", "inputs": [ { - "name": "challenger", + "name": "challenged", "type": "core::starknet::contract_address::ContractAddress" }, { diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.json new file mode 100644 index 0000000..8e3f1c5 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_1Impl", + "interface_name": "dojo_starter::models::blobert::blobert_1::Iblobert_1" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_1::Blobert_1", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_1::Iblobert_1", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_1::Blobert_1" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_1::blobert_1::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.json new file mode 100644 index 0000000..cae930e --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_2Impl", + "interface_name": "dojo_starter::models::blobert::blobert_2::Iblobert_2" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_2::Blobert_2", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_2::Iblobert_2", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_2::Blobert_2" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_2::blobert_2::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.json new file mode 100644 index 0000000..6f49420 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_3Impl", + "interface_name": "dojo_starter::models::blobert::blobert_3::Iblobert_3" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_3::Blobert_3", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_3::Iblobert_3", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_3::Blobert_3" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_3::blobert_3::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.json new file mode 100644 index 0000000..32baa4e --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_4Impl", + "interface_name": "dojo_starter::models::blobert::blobert_4::Iblobert_4" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_4::Blobert_4", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_4::Iblobert_4", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_4::Blobert_4" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_4::blobert_4::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.json new file mode 100644 index 0000000..601519a --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_5Impl", + "interface_name": "dojo_starter::models::blobert::blobert_5::Iblobert_5" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_5::Blobert_5", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_5::Iblobert_5", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_5::Blobert_5" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_5::blobert_5::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.json new file mode 100644 index 0000000..8606e77 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.json @@ -0,0 +1,303 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "blobert_6Impl", + "interface_name": "dojo_starter::models::blobert::blobert_6::Iblobert_6" + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_6::Blobert_6", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::blobert::blobert_6::Iblobert_6", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::blobert::blobert_6::Blobert_6" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::blobert::blobert_6::blobert_6::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json index a872388..23ea563 100644 --- a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json @@ -172,6 +172,240 @@ "name": "playerImpl", "interface_name": "dojo_starter::models::player::Iplayer" }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_1::Blobert_1", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_2::Blobert_2", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_3::Blobert_3", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_4::Blobert_4", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_5::Blobert_5", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_6::Blobert_6", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, { "type": "struct", "name": "dojo_starter::models::player::Player", @@ -182,27 +416,27 @@ }, { "name": "blobert_1", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_1::Blobert_1" }, { "name": "blobert_2", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_2::Blobert_2" }, { "name": "blobert_3", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_3::Blobert_3" }, { "name": "blobert_4", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_4::Blobert_4" }, { "name": "blobert_5", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_5::Blobert_5" }, { "name": "blobert_6", - "type": "core::integer::u8" + "type": "dojo_starter::models::blobert::blobert_6::Blobert_6" }, { "name": "name", diff --git a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml index d21caa5..14ef090 100644 --- a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml +++ b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml @@ -1,6 +1,6 @@ kind = "DojoContract" -class_hash = "0x9672b333dd7455feee919437528fec38e89c233818f07c0834fe0f2abe1ed0" -original_class_hash = "0x9672b333dd7455feee919437528fec38e89c233818f07c0834fe0f2abe1ed0" +class_hash = "0x43bb5d8c7dfe3aa74ccc7e702919c79afb4b0cd6d0a04dea6efcc31aae7bb2d" +original_class_hash = "0x43bb5d8c7dfe3aa74ccc7e702919c79afb4b0cd6d0a04dea6efcc31aae7bb2d" base_class_hash = "0x0" abi = "manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json" reads = [] diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.toml new file mode 100644 index 0000000..a768bee --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x1f9dbf014457180c055e3b77b30d7ce42cd441d387d359bf5b41d30da4466bb" +original_class_hash = "0x1f9dbf014457180c055e3b77b30d7ce42cd441d387d359bf5b41d30da4466bb" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_1_blobert_1.json" +name = "dojo_starter::models::blobert::blobert_1::blobert_1" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.toml new file mode 100644 index 0000000..2867ff9 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x366686e5b44d07cf1bd1e011253af693decf590c5acd5ec6ebe1b4c9b6674cc" +original_class_hash = "0x366686e5b44d07cf1bd1e011253af693decf590c5acd5ec6ebe1b4c9b6674cc" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_2_blobert_2.json" +name = "dojo_starter::models::blobert::blobert_2::blobert_2" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.toml new file mode 100644 index 0000000..2b2d048 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x60c62f7e87115bc4059a9ab1a52209d9bed4cf4606ce27e4f75c192ef341997" +original_class_hash = "0x60c62f7e87115bc4059a9ab1a52209d9bed4cf4606ce27e4f75c192ef341997" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_3_blobert_3.json" +name = "dojo_starter::models::blobert::blobert_3::blobert_3" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.toml new file mode 100644 index 0000000..d38b039 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x1dcf35849188ead0325d69d64f6c2bcb92cb2c7e18f9393686d725084738ad6" +original_class_hash = "0x1dcf35849188ead0325d69d64f6c2bcb92cb2c7e18f9393686d725084738ad6" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_4_blobert_4.json" +name = "dojo_starter::models::blobert::blobert_4::blobert_4" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.toml new file mode 100644 index 0000000..22a4eb4 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x34ff4f55e5e500153f83ca1ffaa239a0911129525b98148810dd1a6b5b4a886" +original_class_hash = "0x34ff4f55e5e500153f83ca1ffaa239a0911129525b98148810dd1a6b5b4a886" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_5_blobert_5.json" +name = "dojo_starter::models::blobert::blobert_5::blobert_5" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.toml new file mode 100644 index 0000000..7aa0590 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.toml @@ -0,0 +1,30 @@ +kind = "DojoModel" +class_hash = "0x477278e5cc218770b78c075cb59465c51420618340831d5dbacb35ef4f0c45" +original_class_hash = "0x477278e5cc218770b78c075cb59465c51420618340831d5dbacb35ef4f0c45" +abi = "manifests/dev/abis/base/models/dojo_starter_models_blobert_blobert_6_blobert_6.json" +name = "dojo_starter::models::blobert::blobert_6::blobert_6" + +[[members]] +name = "player_id" +type = "ContractAddress" +key = true + +[[members]] +name = "blobert_id" +type = "u8" +key = true + +[[members]] +name = "health" +type = "u8" +key = false + +[[members]] +name = "blobert_type" +type = "BlobertTypes" +key = false + +[[members]] +name = "blobert_side_effect" +type = "SideEffectType" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml index 3c68751..e74f66b 100644 --- a/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml @@ -1,6 +1,6 @@ kind = "DojoModel" -class_hash = "0x38f481814b978470dacdbcf2f847076426e3427ff8ecc408fbc6c30aa71ff6c" -original_class_hash = "0x38f481814b978470dacdbcf2f847076426e3427ff8ecc408fbc6c30aa71ff6c" +class_hash = "0x3ef0fad52f301ed625ce2832dcfb5b5f3c00b4cee97c69c4479adce02f121f9" +original_class_hash = "0x3ef0fad52f301ed625ce2832dcfb5b5f3c00b4cee97c69c4479adce02f121f9" abi = "manifests/dev/abis/base/models/dojo_starter_models_player_player.json" name = "dojo_starter::models::player::player" @@ -11,32 +11,32 @@ key = true [[members]] name = "blobert_1" -type = "u8" +type = "Blobert_1" key = false [[members]] name = "blobert_2" -type = "u8" +type = "Blobert_2" key = false [[members]] name = "blobert_3" -type = "u8" +type = "Blobert_3" key = false [[members]] name = "blobert_4" -type = "u8" +type = "Blobert_4" key = false [[members]] name = "blobert_5" -type = "u8" +type = "Blobert_5" key = false [[members]] name = "blobert_6" -type = "u8" +type = "Blobert_6" key = false [[members]] diff --git a/dojo-starter/src/lib.cairo b/dojo-starter/src/lib.cairo index 53023ef..d675ced 100644 --- a/dojo-starter/src/lib.cairo +++ b/dojo-starter/src/lib.cairo @@ -1,5 +1,4 @@ mod systems { - mod actions; mod game_id_generate; mod utils; mod lobby; @@ -15,7 +14,14 @@ mod types { mod models { mod moves; mod position; - mod blobert; + mod blobert{ + mod blobert_1; + mod blobert_2; + mod blobert_3; + mod blobert_4; + mod blobert_5; + mod blobert_6; + } mod side_effect; mod types; mod game; diff --git a/dojo-starter/src/models/blobert.cairo b/dojo-starter/src/models/blobert/blobert_1.cairo similarity index 86% rename from dojo-starter/src/models/blobert.cairo rename to dojo-starter/src/models/blobert/blobert_1.cairo index 63f8f13..01f5447 100644 --- a/dojo-starter/src/models/blobert.cairo +++ b/dojo-starter/src/models/blobert/blobert_1.cairo @@ -5,12 +5,12 @@ use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt, //this will be the pokemon #[derive(Model, Drop, Serde)] -struct Blobert { +struct Blobert_1 { + #[key] + player_id: ContractAddress, #[key] blobert_id: u8, health: u8, blobert_type: BlobertTypes, blobert_side_effect: SideEffectType, -} - - +} \ No newline at end of file diff --git a/dojo-starter/src/models/blobert/blobert_2.cairo b/dojo-starter/src/models/blobert/blobert_2.cairo new file mode 100644 index 0000000..6e9f80f --- /dev/null +++ b/dojo-starter/src/models/blobert/blobert_2.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert_2 { + #[key] + player_id: ContractAddress, + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} \ No newline at end of file diff --git a/dojo-starter/src/models/blobert/blobert_3.cairo b/dojo-starter/src/models/blobert/blobert_3.cairo new file mode 100644 index 0000000..c9227e4 --- /dev/null +++ b/dojo-starter/src/models/blobert/blobert_3.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert_3 { + #[key] + player_id: ContractAddress, + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} \ No newline at end of file diff --git a/dojo-starter/src/models/blobert/blobert_4.cairo b/dojo-starter/src/models/blobert/blobert_4.cairo new file mode 100644 index 0000000..479a653 --- /dev/null +++ b/dojo-starter/src/models/blobert/blobert_4.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert_4 { + #[key] + player_id: ContractAddress, + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} \ No newline at end of file diff --git a/dojo-starter/src/models/blobert/blobert_5.cairo b/dojo-starter/src/models/blobert/blobert_5.cairo new file mode 100644 index 0000000..8d4217c --- /dev/null +++ b/dojo-starter/src/models/blobert/blobert_5.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert_5 { + #[key] + player_id: ContractAddress, + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} \ No newline at end of file diff --git a/dojo-starter/src/models/blobert/blobert_6.cairo b/dojo-starter/src/models/blobert/blobert_6.cairo new file mode 100644 index 0000000..59da32f --- /dev/null +++ b/dojo-starter/src/models/blobert/blobert_6.cairo @@ -0,0 +1,16 @@ +use starknet::ContractAddress; +use dojo_starter::models::{types::BlobertTypes, side_effect::SideEffectType}; +use dojo_starter::types::blobert::{GOATbert,STARKbert,_1337bert,ambert,blobertt,blobhetti,bobbyrealms,breadbert}; + + +//this will be the pokemon +#[derive(Model, Drop, Serde)] +struct Blobert_6 { + #[key] + player_id: ContractAddress, + #[key] + blobert_id: u8, + health: u8, + blobert_type: BlobertTypes, + blobert_side_effect: SideEffectType, +} \ No newline at end of file diff --git a/dojo-starter/src/models/moves.cairo b/dojo-starter/src/models/moves.cairo index 81baa40..2aa2962 100644 --- a/dojo-starter/src/models/moves.cairo +++ b/dojo-starter/src/models/moves.cairo @@ -1,31 +1,21 @@ use starknet::ContractAddress; -#[derive(Model, Drop, Serde)] +// The shot of each player on a Round +#[derive(Copy, Drop, Serde, Introspect)] struct Moves { #[key] - player: ContractAddress, - remaining: u8, - last_direction: Direction -} - -#[derive(Serde, Copy, Drop, Introspect)] -enum Direction { - None, - Left, - Right, - Up, - Down, -} - -impl DirectionIntoFelt252 of Into { - fn into(self: Direction) -> felt252 { - match self { - Direction::None => 0, - Direction::Left => 1, - Direction::Right => 2, - Direction::Up => 3, - Direction::Down => 4, - } - } -} - + player_id: ContractAddress, + #[key] + blobert_id: u8, + // player input + hash: u64, // hashed action (salt + action) + salt: u64, // the player's secret salt + action: u16, // the player's chosen action(s) (paces, weapon, ...) + // shot results + chance_crit: u8, // computed chances (1..100) - kill / double damage + damage: u8, // amount of health taken + block: u8, // amount of damage blocked + win: u8, // wins the round + // player state + health: u8, // final health +} \ No newline at end of file diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo index 5c94ab5..2cdd64d 100644 --- a/dojo-starter/src/models/player.cairo +++ b/dojo-starter/src/models/player.cairo @@ -1,17 +1,17 @@ use starknet::ContractAddress; -use dojo_starter::models::blobert::{Blobert}; +use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,blobert_3::Blobert_3,blobert_4::Blobert_4,blobert_5::Blobert_5,blobert_6::Blobert_6}; -#[derive(Model, Copy, Drop, Serde)] +#[derive(Model, Drop, Serde)] struct Player { #[key] address: ContractAddress, - blobert_1: u8, - blobert_2: u8, - blobert_3: u8, - blobert_4: u8, - blobert_5: u8, - blobert_6: u8, + blobert_1: Blobert_1, + blobert_2: Blobert_2, + blobert_3: Blobert_3, + blobert_4: Blobert_4, + blobert_5: Blobert_5, + blobert_6: Blobert_6, name: felt252, profile_pic: u8, total_duels: u16, diff --git a/dojo-starter/src/systems/actions.cairo b/dojo-starter/src/systems/actions.cairo deleted file mode 100644 index 1814866..0000000 --- a/dojo-starter/src/systems/actions.cairo +++ /dev/null @@ -1,97 +0,0 @@ -use dojo_starter::models::moves::Direction; -use dojo_starter::models::position::Position; - -// define the interface -#[dojo::interface] -trait IActions { - fn spawn(); - fn move(direction: Direction); -} - -// dojo decorator -#[dojo::contract] -mod actions { - use super::{IActions, next_position}; - - use starknet::{ContractAddress, get_caller_address}; - use dojo_starter::models::{position::{Position, Vec2}, moves::{Moves, Direction}}; - - // declaring custom event struct - #[event] - #[derive(Drop, starknet::Event)] - enum Event { - Moved: Moved, - } - - // declaring custom event struct - #[derive(starknet::Event, Model, Copy, Drop, Serde)] - struct Moved { - #[key] - player: ContractAddress, - direction: Direction - } - - // impl: implement functions specified in trait - #[abi(embed_v0)] - impl ActionsImpl of IActions { - fn spawn(world: IWorldDispatcher) { - // Get the address of the current caller, possibly the player's address. - let player = get_caller_address(); - // Retrieve the player's current position from the world. - let position = get!(world, player, (Position)); - // Retrieve the player's move data, e.g., how many moves they have left. - let moves = get!(world, player, (Moves)); - - // Update the world state with the new data. - // 1. Increase the player's remaining moves by 1. - // 2. Move the player's position 10 units in both the x and y direction. - set!( - world, - ( - Moves { - player, remaining: moves.remaining + 1, last_direction: Direction::None(()) - }, - Position { - player, vec: Vec2 { x: position.vec.x + 10, y: position.vec.y + 10 } - }, - ) - ); - } - - // Implementation of the move function for the ContractState struct. - fn move(world: IWorldDispatcher, direction: Direction) { - // Get the address of the current caller, possibly the player's address. - let player = get_caller_address(); - - // Retrieve the player's current position and moves data from the world. - let (mut position, mut moves) = get!(world, player, (Position, Moves)); - - // Deduct one from the player's remaining moves. - moves.remaining -= 1; - - // Update the last direction the player moved in. - moves.last_direction = direction; - - // Calculate the player's next position based on the provided direction. - let next = next_position(position, direction); - - // // Update the world state with the new moves data and position. - set!(world, (moves, next)); - - // Emit an event to the world to notify about the player's move. - emit!(world, Moved { player, direction }); - } - } -} - -// Define function like this: -fn next_position(mut position: Position, direction: Direction) -> Position { - match direction { - Direction::None => { return position; }, - Direction::Left => { position.vec.x -= 1; }, - Direction::Right => { position.vec.x += 1; }, - Direction::Up => { position.vec.y -= 1; }, - Direction::Down => { position.vec.y += 1; }, - }; - position -} diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo index 0c89569..0d587cf 100644 --- a/dojo-starter/src/systems/lobby.cairo +++ b/dojo-starter/src/systems/lobby.cairo @@ -6,7 +6,7 @@ trait ILobby { fn choose_blobert(self: @TContractState,blobert_1: u8, blobert_2: u8, blobert_3:u8, blobert_4:u8, blobert_5: u8, blobert_6:u8); fn find_battle( self: @TContractState, - challenger: ContractAddress, + challenged: ContractAddress, message: felt252, wager_coin: u8, wager_value: u256, @@ -19,11 +19,12 @@ mod lobby { use super::{ILobby}; use starknet::{ContractAddress, get_caller_address, get_block_timestamp}; - use dojo_starter::models::{blobert::Blobert, player::Player, game::Game}; + use dojo_starter::models::{player::Player, game::Game}; use dojo_starter::types::game::{GameState}; use dojo_starter::utils::timestamp::{timestamp}; use dojo_starter::systems::game_id_generate::{make_seed}; use dojo_starter::systems::utils::{zero_address}; + use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,blobert_3::Blobert_3,blobert_4::Blobert_4,blobert_5::Blobert_5,blobert_6::Blobert_6}; #[abi(embed_v0)] impl LobbyImpl of ILobby { @@ -44,26 +45,32 @@ mod lobby { fn choose_blobert(self: @ContractState, blobert_1: u8, blobert_2: u8, blobert_3:u8, blobert_4:u8, blobert_5: u8, blobert_6:u8){ let caller: ContractAddress = starknet::get_caller_address(); let mut player: Player = get!(self.world(), caller, Player); - player.blobert_1 = blobert_1; - player.blobert_2 = blobert_2; - player.blobert_3 = blobert_3; - player.blobert_4 = blobert_4; - player.blobert_5 = blobert_5; - player.blobert_6 = blobert_6; + let mut blobertmon_1: Blobert_1 = get!(self.world(), (caller, blobert_1), Blobert_1); + let mut blobertmon_2: Blobert_2 = get!(self.world(), (caller, blobert_2), Blobert_2); + let mut blobertmon_3: Blobert_3 = get!(self.world(), (caller, blobert_3), Blobert_3); + let mut blobertmon_4: Blobert_4 = get!(self.world(), (caller, blobert_4), Blobert_4); + let mut blobertmon_5: Blobert_5 = get!(self.world(), (caller, blobert_5), Blobert_5); + let mut blobertmon_6: Blobert_6 = get!(self.world(), (caller, blobert_6), Blobert_6); + player.blobert_1 = blobertmon_1; + player.blobert_2 = blobertmon_2; + player.blobert_3 = blobertmon_3; + player.blobert_4 = blobertmon_4; + player.blobert_5 = blobertmon_5; + player.blobert_6 = blobertmon_6; set!(self.world(), (player)); return (); } fn find_battle( self: @ContractState, - challenger: ContractAddress, + challenged: ContractAddress, message: felt252, wager_coin: u8, wager_value: u256, expire_seconds: u64 ) -> u128 { //check if the challenger address is empty - assert(challenger != zero_address(), 'Missing challenged address'); + assert(challenged != zero_address(), 'Missing challenged address'); assert( expire_seconds == 0 || expire_seconds >= timestamp::from_hours(1), 'Invalid expire_seconds' @@ -73,7 +80,7 @@ mod lobby { let player: Player = get!(self.world(), caller, Player); assert(player.name != 0, 'Challenger not registered'); - assert(caller != challenger, 'Challenging thyself, you fool!'); + assert(caller != challenged, 'Challenging thyself, you fool!'); //create the battle let game_id: u128 = make_seed(caller); @@ -89,14 +96,14 @@ mod lobby { let challenge = Game { game_id, player_a: caller, - player_b: challenger, + player_b: challenged, message, // progress state: GameState::Awaiting.into(), round_number: 0, winner: 0, // times - timestamp_start, // chalenge issued + timestamp_start, // challenge issued timestamp_end, // expire }; From 4b223f69ab447b86fd962ca5e6ca75b7ace5ba4d Mon Sep 17 00:00:00 2001 From: makluganteng Date: Mon, 8 Apr 2024 08:17:13 +0700 Subject: [PATCH 4/6] feat: change the player and lobby --- dojo-starter/src/models/player.cairo | 12 ++++++------ dojo-starter/src/systems/lobby.cairo | 26 +++++++++++++------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo index 2cdd64d..63dcb73 100644 --- a/dojo-starter/src/models/player.cairo +++ b/dojo-starter/src/models/player.cairo @@ -6,12 +6,12 @@ use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,bl struct Player { #[key] address: ContractAddress, - blobert_1: Blobert_1, - blobert_2: Blobert_2, - blobert_3: Blobert_3, - blobert_4: Blobert_4, - blobert_5: Blobert_5, - blobert_6: Blobert_6, + blobert_1: u8, + blobert_2: u8, + blobert_3: u8, + blobert_4: u8, + blobert_5: u8, + blobert_6: u8, name: felt252, profile_pic: u8, total_duels: u16, diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo index 0d587cf..cbf4d40 100644 --- a/dojo-starter/src/systems/lobby.cairo +++ b/dojo-starter/src/systems/lobby.cairo @@ -24,7 +24,7 @@ mod lobby { use dojo_starter::utils::timestamp::{timestamp}; use dojo_starter::systems::game_id_generate::{make_seed}; use dojo_starter::systems::utils::{zero_address}; - use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,blobert_3::Blobert_3,blobert_4::Blobert_4,blobert_5::Blobert_5,blobert_6::Blobert_6}; + // use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,blobert_3::Blobert_3,blobert_4::Blobert_4,blobert_5::Blobert_5,blobert_6::Blobert_6}; #[abi(embed_v0)] impl LobbyImpl of ILobby { @@ -45,18 +45,18 @@ mod lobby { fn choose_blobert(self: @ContractState, blobert_1: u8, blobert_2: u8, blobert_3:u8, blobert_4:u8, blobert_5: u8, blobert_6:u8){ let caller: ContractAddress = starknet::get_caller_address(); let mut player: Player = get!(self.world(), caller, Player); - let mut blobertmon_1: Blobert_1 = get!(self.world(), (caller, blobert_1), Blobert_1); - let mut blobertmon_2: Blobert_2 = get!(self.world(), (caller, blobert_2), Blobert_2); - let mut blobertmon_3: Blobert_3 = get!(self.world(), (caller, blobert_3), Blobert_3); - let mut blobertmon_4: Blobert_4 = get!(self.world(), (caller, blobert_4), Blobert_4); - let mut blobertmon_5: Blobert_5 = get!(self.world(), (caller, blobert_5), Blobert_5); - let mut blobertmon_6: Blobert_6 = get!(self.world(), (caller, blobert_6), Blobert_6); - player.blobert_1 = blobertmon_1; - player.blobert_2 = blobertmon_2; - player.blobert_3 = blobertmon_3; - player.blobert_4 = blobertmon_4; - player.blobert_5 = blobertmon_5; - player.blobert_6 = blobertmon_6; + // let mut blobertmon_1: Blobert_1 = get!(self.world(), (caller, blobert_1), Blobert_1); + // let mut blobertmon_2: Blobert_2 = get!(self.world(), (caller, blobert_2), Blobert_2); + // let mut blobertmon_3: Blobert_3 = get!(self.world(), (caller, blobert_3), Blobert_3); + // let mut blobertmon_4: Blobert_4 = get!(self.world(), (caller, blobert_4), Blobert_4); + // let mut blobertmon_5: Blobert_5 = get!(self.world(), (caller, blobert_5), Blobert_5); + // let mut blobertmon_6: Blobert_6 = get!(self.world(), (caller, blobert_6), Blobert_6); + player.blobert_1 = blobert_1; + player.blobert_2 = blobert_2; + player.blobert_3 = blobert_3; + player.blobert_4 = blobert_4; + player.blobert_5 = blobert_5; + player.blobert_6 = blobert_6; set!(self.world(), (player)); return (); } From d0eb9323b9b8360dcade110813897043e003e9b2 Mon Sep 17 00:00:00 2001 From: makluganteng Date: Mon, 8 Apr 2024 08:30:49 +0700 Subject: [PATCH 5/6] feat: fix the code --- dojo-starter/src/models/player.cairo | 1 - dojo-starter/src/systems/lobby.cairo | 12 ++++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo index 63dcb73..e6ad64a 100644 --- a/dojo-starter/src/models/player.cairo +++ b/dojo-starter/src/models/player.cairo @@ -13,7 +13,6 @@ struct Player { blobert_5: u8, blobert_6: u8, name: felt252, - profile_pic: u8, total_duels: u16, total_wins: u16, total_losses: u16, diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo index cbf4d40..03c0325 100644 --- a/dojo-starter/src/systems/lobby.cairo +++ b/dojo-starter/src/systems/lobby.cairo @@ -37,7 +37,19 @@ mod lobby { player.timestamp = get_block_timestamp(); } + player.address = caller; player.name = name; + player.blobert_1 = 0; + player.blobert_2 = 0; + player.blobert_3 = 0; + player.blobert_4 = 0; + player.blobert_5 = 0; + player.blobert_6 = 0; + player.total_duels = 0; + player.total_wins = 0; + player.total_losses = 0; + player.timestamp = get_block_timestamp(); + set!(self.world(), (player)); return (); } From 421523d509ba6943ddf2eda6a46cce2cb2cdbf3e Mon Sep 17 00:00:00 2001 From: makluganteng Date: Mon, 8 Apr 2024 09:34:56 +0700 Subject: [PATCH 6/6] feat: latest changes --- .../dojo_starter_models_player_player.json | 250 +------- .../dojo_starter_models_round_round.json | 42 ++ ...starter_models_session_player_session.json | 533 ++++++++++++++++++ .../dojo_starter_systems_lobby_lobby.toml | 4 +- .../dojo_starter_models_player_player.toml | 21 +- .../dojo_starter_models_round_round.toml | 14 +- ...starter_models_session_player_session.toml | 55 ++ dojo-starter/src/lib.cairo | 1 + dojo-starter/src/models/attack.cairo | 21 + dojo-starter/src/models/move/dev.cairo | 0 dojo-starter/src/models/move/gaming.cairo | 0 dojo-starter/src/models/move/influenza.cairo | 0 dojo-starter/src/models/move/normie.cairo | 0 dojo-starter/src/models/move/tradoor.cairo | 0 dojo-starter/src/models/move/vc.cairo | 0 dojo-starter/src/models/moves.cairo | 8 +- dojo-starter/src/models/moves_blobert.cairo | 47 ++ dojo-starter/src/models/moves_pokemon.cairo | 40 -- dojo-starter/src/models/player.cairo | 1 - dojo-starter/src/models/round.cairo | 6 +- dojo-starter/src/models/session.cairo | 20 + dojo-starter/src/systems/battleSystem.cairo | 105 +++- dojo-starter/src/systems/lobby.cairo | 1 + 23 files changed, 845 insertions(+), 324 deletions(-) create mode 100644 dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_session_player_session.json create mode 100644 dojo-starter/manifests/dev/base/models/dojo_starter_models_session_player_session.toml create mode 100644 dojo-starter/src/models/attack.cairo create mode 100644 dojo-starter/src/models/move/dev.cairo create mode 100644 dojo-starter/src/models/move/gaming.cairo create mode 100644 dojo-starter/src/models/move/influenza.cairo create mode 100644 dojo-starter/src/models/move/normie.cairo create mode 100644 dojo-starter/src/models/move/tradoor.cairo create mode 100644 dojo-starter/src/models/move/vc.cairo create mode 100644 dojo-starter/src/models/moves_blobert.cairo delete mode 100644 dojo-starter/src/models/moves_pokemon.cairo create mode 100644 dojo-starter/src/models/session.cairo diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json index 23ea563..57e5e65 100644 --- a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_player_player.json @@ -172,240 +172,6 @@ "name": "playerImpl", "interface_name": "dojo_starter::models::player::Iplayer" }, - { - "type": "enum", - "name": "dojo_starter::models::types::Type", - "variants": [ - { - "name": "Fire", - "type": "()" - }, - { - "name": "Water", - "type": "()" - }, - { - "name": "Grass", - "type": "()" - }, - { - "name": "Wind", - "type": "()" - }, - { - "name": "Dark", - "type": "()" - }, - { - "name": "Light", - "type": "()" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::types::BlobertTypes", - "members": [ - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::Type" - } - ] - }, - { - "type": "enum", - "name": "dojo_starter::models::side_effect::SideEffectType", - "variants": [ - { - "name": "Burn", - "type": "()" - }, - { - "name": "Paralyzed", - "type": "()" - }, - { - "name": "Frozen", - "type": "()" - }, - { - "name": "Sleep", - "type": "()" - }, - { - "name": "Poison", - "type": "()" - }, - { - "name": "Confusion", - "type": "()" - }, - { - "name": "Flinch", - "type": "()" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_1::Blobert_1", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_2::Blobert_2", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_3::Blobert_3", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_4::Blobert_4", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_5::Blobert_5", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, - { - "type": "struct", - "name": "dojo_starter::models::blobert::blobert_6::Blobert_6", - "members": [ - { - "name": "player_id", - "type": "core::starknet::contract_address::ContractAddress" - }, - { - "name": "blobert_id", - "type": "core::integer::u8" - }, - { - "name": "health", - "type": "core::integer::u8" - }, - { - "name": "blobert_type", - "type": "dojo_starter::models::types::BlobertTypes" - }, - { - "name": "blobert_side_effect", - "type": "dojo_starter::models::side_effect::SideEffectType" - } - ] - }, { "type": "struct", "name": "dojo_starter::models::player::Player", @@ -416,36 +182,32 @@ }, { "name": "blobert_1", - "type": "dojo_starter::models::blobert::blobert_1::Blobert_1" + "type": "core::integer::u8" }, { "name": "blobert_2", - "type": "dojo_starter::models::blobert::blobert_2::Blobert_2" + "type": "core::integer::u8" }, { "name": "blobert_3", - "type": "dojo_starter::models::blobert::blobert_3::Blobert_3" + "type": "core::integer::u8" }, { "name": "blobert_4", - "type": "dojo_starter::models::blobert::blobert_4::Blobert_4" + "type": "core::integer::u8" }, { "name": "blobert_5", - "type": "dojo_starter::models::blobert::blobert_5::Blobert_5" + "type": "core::integer::u8" }, { "name": "blobert_6", - "type": "dojo_starter::models::blobert::blobert_6::Blobert_6" + "type": "core::integer::u8" }, { "name": "name", "type": "core::felt252" }, - { - "name": "profile_pic", - "type": "core::integer::u8" - }, { "name": "total_duels", "type": "core::integer::u16" diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json index b3dc1b7..e8b4028 100644 --- a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_round_round.json @@ -172,6 +172,40 @@ "name": "roundImpl", "interface_name": "dojo_starter::models::round::Iround" }, + { + "type": "struct", + "name": "dojo_starter::models::moves::Moves", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "hash", + "type": "core::integer::u64" + }, + { + "name": "salt", + "type": "core::integer::u64" + }, + { + "name": "action", + "type": "core::integer::u16" + }, + { + "name": "damage", + "type": "core::integer::u16" + }, + { + "name": "win", + "type": "core::integer::u8" + } + ] + }, { "type": "struct", "name": "dojo_starter::models::round::Round", @@ -187,6 +221,14 @@ { "name": "state", "type": "core::integer::u8" + }, + { + "name": "move_a", + "type": "dojo_starter::models::moves::Moves" + }, + { + "name": "move_b", + "type": "dojo_starter::models::moves::Moves" } ] }, diff --git a/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_session_player_session.json b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_session_player_session.json new file mode 100644 index 0000000..e9f0995 --- /dev/null +++ b/dojo-starter/manifests/dev/abis/base/models/dojo_starter_models_session_player_session.json @@ -0,0 +1,533 @@ +[ + { + "type": "impl", + "name": "DojoModelImpl", + "interface_name": "dojo::model::IDojoModel" + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Struct", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::>" + } + ] + }, + { + "type": "struct", + "name": "core::array::Span::<(core::felt252, core::array::Span::)>", + "members": [ + { + "name": "snapshot", + "type": "@core::array::Array::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "struct", + "name": "dojo::database::introspect::Enum", + "members": [ + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "attrs", + "type": "core::array::Span::" + }, + { + "name": "children", + "type": "core::array::Span::<(core::felt252, core::array::Span::)>" + } + ] + }, + { + "type": "enum", + "name": "dojo::database::introspect::Ty", + "variants": [ + { + "name": "Primitive", + "type": "core::felt252" + }, + { + "name": "Struct", + "type": "dojo::database::introspect::Struct" + }, + { + "name": "Enum", + "type": "dojo::database::introspect::Enum" + }, + { + "name": "Tuple", + "type": "core::array::Span::>" + }, + { + "name": "Array", + "type": "core::integer::u32" + } + ] + }, + { + "type": "interface", + "name": "dojo::model::IDojoModel", + "items": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "type": "core::felt252" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "unpacked_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "packed_size", + "inputs": [], + "outputs": [ + { + "type": "core::integer::u32" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "layout", + "inputs": [], + "outputs": [ + { + "type": "core::array::Span::" + } + ], + "state_mutability": "view" + }, + { + "type": "function", + "name": "schema", + "inputs": [], + "outputs": [ + { + "type": "dojo::database::introspect::Ty" + } + ], + "state_mutability": "view" + } + ] + }, + { + "type": "impl", + "name": "player_sessionImpl", + "interface_name": "dojo_starter::models::session::Iplayer_session" + }, + { + "type": "struct", + "name": "dojo_starter::models::player::Player", + "members": [ + { + "name": "address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_1", + "type": "core::integer::u8" + }, + { + "name": "blobert_2", + "type": "core::integer::u8" + }, + { + "name": "blobert_3", + "type": "core::integer::u8" + }, + { + "name": "blobert_4", + "type": "core::integer::u8" + }, + { + "name": "blobert_5", + "type": "core::integer::u8" + }, + { + "name": "blobert_6", + "type": "core::integer::u8" + }, + { + "name": "name", + "type": "core::felt252" + }, + { + "name": "total_duels", + "type": "core::integer::u16" + }, + { + "name": "total_wins", + "type": "core::integer::u16" + }, + { + "name": "total_losses", + "type": "core::integer::u16" + }, + { + "name": "timestamp", + "type": "core::integer::u64" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::types::Type", + "variants": [ + { + "name": "Fire", + "type": "()" + }, + { + "name": "Water", + "type": "()" + }, + { + "name": "Grass", + "type": "()" + }, + { + "name": "Wind", + "type": "()" + }, + { + "name": "Dark", + "type": "()" + }, + { + "name": "Light", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::types::BlobertTypes", + "members": [ + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::Type" + } + ] + }, + { + "type": "enum", + "name": "dojo_starter::models::side_effect::SideEffectType", + "variants": [ + { + "name": "Burn", + "type": "()" + }, + { + "name": "Paralyzed", + "type": "()" + }, + { + "name": "Frozen", + "type": "()" + }, + { + "name": "Sleep", + "type": "()" + }, + { + "name": "Poison", + "type": "()" + }, + { + "name": "Confusion", + "type": "()" + }, + { + "name": "Flinch", + "type": "()" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_1::Blobert_1", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_2::Blobert_2", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_3::Blobert_3", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_4::Blobert_4", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_5::Blobert_5", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::blobert::blobert_6::Blobert_6", + "members": [ + { + "name": "player_id", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "blobert_id", + "type": "core::integer::u8" + }, + { + "name": "health", + "type": "core::integer::u8" + }, + { + "name": "blobert_type", + "type": "dojo_starter::models::types::BlobertTypes" + }, + { + "name": "blobert_side_effect", + "type": "dojo_starter::models::side_effect::SideEffectType" + } + ] + }, + { + "type": "struct", + "name": "dojo_starter::models::session::Player_Session", + "members": [ + { + "name": "game_id", + "type": "core::integer::u128" + }, + { + "name": "player_address", + "type": "core::starknet::contract_address::ContractAddress" + }, + { + "name": "player", + "type": "dojo_starter::models::player::Player" + }, + { + "name": "current_blobert", + "type": "core::integer::u8" + }, + { + "name": "blobert_1", + "type": "dojo_starter::models::blobert::blobert_1::Blobert_1" + }, + { + "name": "blobert_2", + "type": "dojo_starter::models::blobert::blobert_2::Blobert_2" + }, + { + "name": "blobert_3", + "type": "dojo_starter::models::blobert::blobert_3::Blobert_3" + }, + { + "name": "blobert_4", + "type": "dojo_starter::models::blobert::blobert_4::Blobert_4" + }, + { + "name": "blobert_5", + "type": "dojo_starter::models::blobert::blobert_5::Blobert_5" + }, + { + "name": "blobert_6", + "type": "dojo_starter::models::blobert::blobert_6::Blobert_6" + } + ] + }, + { + "type": "interface", + "name": "dojo_starter::models::session::Iplayer_session", + "items": [ + { + "type": "function", + "name": "ensure_abi", + "inputs": [ + { + "name": "model", + "type": "dojo_starter::models::session::Player_Session" + } + ], + "outputs": [], + "state_mutability": "view" + } + ] + }, + { + "type": "event", + "name": "dojo_starter::models::session::player_session::Event", + "kind": "enum", + "variants": [] + } +] \ No newline at end of file diff --git a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml index 14ef090..5ed56fd 100644 --- a/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml +++ b/dojo-starter/manifests/dev/base/contracts/dojo_starter_systems_lobby_lobby.toml @@ -1,6 +1,6 @@ kind = "DojoContract" -class_hash = "0x43bb5d8c7dfe3aa74ccc7e702919c79afb4b0cd6d0a04dea6efcc31aae7bb2d" -original_class_hash = "0x43bb5d8c7dfe3aa74ccc7e702919c79afb4b0cd6d0a04dea6efcc31aae7bb2d" +class_hash = "0x6910fd58df7b3d6c43b761de9eec148e816311ab9d6d42550411e346573acfe" +original_class_hash = "0x6910fd58df7b3d6c43b761de9eec148e816311ab9d6d42550411e346573acfe" base_class_hash = "0x0" abi = "manifests/dev/abis/base/contracts/dojo_starter_systems_lobby_lobby.json" reads = [] diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml index e74f66b..5f0644b 100644 --- a/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_player_player.toml @@ -1,6 +1,6 @@ kind = "DojoModel" -class_hash = "0x3ef0fad52f301ed625ce2832dcfb5b5f3c00b4cee97c69c4479adce02f121f9" -original_class_hash = "0x3ef0fad52f301ed625ce2832dcfb5b5f3c00b4cee97c69c4479adce02f121f9" +class_hash = "0x510198e179dece7e7612423595e6127d5632c8b6254fddf6f701236e180be3a" +original_class_hash = "0x510198e179dece7e7612423595e6127d5632c8b6254fddf6f701236e180be3a" abi = "manifests/dev/abis/base/models/dojo_starter_models_player_player.json" name = "dojo_starter::models::player::player" @@ -11,32 +11,32 @@ key = true [[members]] name = "blobert_1" -type = "Blobert_1" +type = "u8" key = false [[members]] name = "blobert_2" -type = "Blobert_2" +type = "u8" key = false [[members]] name = "blobert_3" -type = "Blobert_3" +type = "u8" key = false [[members]] name = "blobert_4" -type = "Blobert_4" +type = "u8" key = false [[members]] name = "blobert_5" -type = "Blobert_5" +type = "u8" key = false [[members]] name = "blobert_6" -type = "Blobert_6" +type = "u8" key = false [[members]] @@ -44,11 +44,6 @@ name = "name" type = "felt252" key = false -[[members]] -name = "profile_pic" -type = "u8" -key = false - [[members]] name = "total_duels" type = "u16" diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml index 3a26da5..4afa3a5 100644 --- a/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_round_round.toml @@ -1,6 +1,6 @@ kind = "DojoModel" -class_hash = "0x38bb48220575d06edf1fce3194b72eb3854667d2db08a1497200bf38b7b973f" -original_class_hash = "0x38bb48220575d06edf1fce3194b72eb3854667d2db08a1497200bf38b7b973f" +class_hash = "0x666688f77c24d5fd9eb3e2c218946e7f6eadc8e00198863f8bf13015f2f867f" +original_class_hash = "0x666688f77c24d5fd9eb3e2c218946e7f6eadc8e00198863f8bf13015f2f867f" abi = "manifests/dev/abis/base/models/dojo_starter_models_round_round.json" name = "dojo_starter::models::round::round" @@ -18,3 +18,13 @@ key = true name = "state" type = "u8" key = false + +[[members]] +name = "move_a" +type = "Moves" +key = false + +[[members]] +name = "move_b" +type = "Moves" +key = false diff --git a/dojo-starter/manifests/dev/base/models/dojo_starter_models_session_player_session.toml b/dojo-starter/manifests/dev/base/models/dojo_starter_models_session_player_session.toml new file mode 100644 index 0000000..0c71fd6 --- /dev/null +++ b/dojo-starter/manifests/dev/base/models/dojo_starter_models_session_player_session.toml @@ -0,0 +1,55 @@ +kind = "DojoModel" +class_hash = "0x15a4bffe7e584ad047123f3e277631467eaaa2f109b57b5a451fc417428ab4f" +original_class_hash = "0x15a4bffe7e584ad047123f3e277631467eaaa2f109b57b5a451fc417428ab4f" +abi = "manifests/dev/abis/base/models/dojo_starter_models_session_player_session.json" +name = "dojo_starter::models::session::player_session" + +[[members]] +name = "game_id" +type = "u128" +key = true + +[[members]] +name = "player_address" +type = "ContractAddress" +key = true + +[[members]] +name = "player" +type = "Player" +key = false + +[[members]] +name = "current_blobert" +type = "u8" +key = false + +[[members]] +name = "blobert_1" +type = "Blobert_1" +key = false + +[[members]] +name = "blobert_2" +type = "Blobert_2" +key = false + +[[members]] +name = "blobert_3" +type = "Blobert_3" +key = false + +[[members]] +name = "blobert_4" +type = "Blobert_4" +key = false + +[[members]] +name = "blobert_5" +type = "Blobert_5" +key = false + +[[members]] +name = "blobert_6" +type = "Blobert_6" +key = false diff --git a/dojo-starter/src/lib.cairo b/dojo-starter/src/lib.cairo index d675ced..2aa4c62 100644 --- a/dojo-starter/src/lib.cairo +++ b/dojo-starter/src/lib.cairo @@ -27,6 +27,7 @@ mod models { mod game; mod player; mod round; + mod session; } mod tests { diff --git a/dojo-starter/src/models/attack.cairo b/dojo-starter/src/models/attack.cairo new file mode 100644 index 0000000..ec64c26 --- /dev/null +++ b/dojo-starter/src/models/attack.cairo @@ -0,0 +1,21 @@ +mod ATTACK { + const DAMAGE: u8 = 10; + + #[derive(Copy, Drop, Serde, PartialEq, Introspect)] + enum Attack { + Idle, + Move_1, + Move_2, + Move_3, + Move_4 + } + + trait AttackTrait { + fn execute_attack(self: Attack, ref self_moves: Moves, ref other_moves: Moves) -> bool; + } + + //TODO: Calculate the damage base on whcih type is super effective + fn execute_attack(self: Action,ref self_moves: Moves, ref other_moves: Moves){ + + } +} \ No newline at end of file diff --git a/dojo-starter/src/models/move/dev.cairo b/dojo-starter/src/models/move/dev.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/move/gaming.cairo b/dojo-starter/src/models/move/gaming.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/move/influenza.cairo b/dojo-starter/src/models/move/influenza.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/move/normie.cairo b/dojo-starter/src/models/move/normie.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/move/tradoor.cairo b/dojo-starter/src/models/move/tradoor.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/move/vc.cairo b/dojo-starter/src/models/move/vc.cairo new file mode 100644 index 0000000..e69de29 diff --git a/dojo-starter/src/models/moves.cairo b/dojo-starter/src/models/moves.cairo index 2aa2962..29b49e3 100644 --- a/dojo-starter/src/models/moves.cairo +++ b/dojo-starter/src/models/moves.cairo @@ -11,11 +11,7 @@ struct Moves { hash: u64, // hashed action (salt + action) salt: u64, // the player's secret salt action: u16, // the player's chosen action(s) (paces, weapon, ...) - // shot results - chance_crit: u8, // computed chances (1..100) - kill / double damage - damage: u8, // amount of health taken - block: u8, // amount of damage blocked + // damage results + damage: u16, // amount of health taken win: u8, // wins the round - // player state - health: u8, // final health } \ No newline at end of file diff --git a/dojo-starter/src/models/moves_blobert.cairo b/dojo-starter/src/models/moves_blobert.cairo new file mode 100644 index 0000000..908e7da --- /dev/null +++ b/dojo-starter/src/models/moves_blobert.cairo @@ -0,0 +1,47 @@ +use starknet::ContractAddress; + +#[derive(Model, Drop, Serde)] +struct Moves { + #[key] + blobert_id: u8, + move_1: MovesAttack, + move_2: MovesAttack, + move_3: MovesAttack, + move_4: MovesAttack, +} + +#[derive(Serde, Copy, Drop, Introspect)] +enum MoveType { + Normie, + Tradoor, + Influenza, + VC, + Dev, + Gaming +} + +impl MoveTypeIntoFelt252 of Into { + fn into(self: MoveType) -> felt252{ + match self { + MoveType::Normie => 'Normie', + MoveType::Tradoor => 'Tradoor', + MoveType::Influenza => 'Influenza', + MoveType::VC => 'VC', + MoveType::Dev => 'Dev', + MoveType::Gaming => 'Gaming' + } + } +} + +#[derive(Model, Drop, Serde)] +struct MovesAttack { + #[key] + move_id: u8, + move_type: MoveType + damage: u16 +} + + + + + diff --git a/dojo-starter/src/models/moves_pokemon.cairo b/dojo-starter/src/models/moves_pokemon.cairo deleted file mode 100644 index fba8e87..0000000 --- a/dojo-starter/src/models/moves_pokemon.cairo +++ /dev/null @@ -1,40 +0,0 @@ -use starknet::ContractAddress; - -#[derive(Model, Drop, Serde)] -struct Moves { - #[key] - pokemon_id: u8, - moves: MovesAttack - type: TypeAttack - damage: u8 -} - -#[derive(Serde, Copy, Drop, Introspect)] -enum MovesAttack { - Ember, - LeafCut, - WaterGun, -} - -#[derive(Serde, Copy, Drop, Introspect)] -enum TypeAttack { - Special, - Physical -} - -trait MovesTrait{ - fn get_attack(self MovesAttack) -> felt252 -} - - - -impl MovesAttackIntoFelt252 of Into { - fn into(self: MovesAttack) -> felt252 { - match self { - MovesAttack::Ember => 0, - MovesAttack::LeafCut => 1, - MovesAttack::WaterGun => 2 - } - } -} - diff --git a/dojo-starter/src/models/player.cairo b/dojo-starter/src/models/player.cairo index e6ad64a..dd1a888 100644 --- a/dojo-starter/src/models/player.cairo +++ b/dojo-starter/src/models/player.cairo @@ -18,4 +18,3 @@ struct Player { total_losses: u16, timestamp: u64, // Unix time, 1st registered } - diff --git a/dojo-starter/src/models/round.cairo b/dojo-starter/src/models/round.cairo index 0e59d82..943c163 100644 --- a/dojo-starter/src/models/round.cairo +++ b/dojo-starter/src/models/round.cairo @@ -1,3 +1,5 @@ +use dojo_starter::models::moves::Moves; + #[derive(Model, Copy, Drop, Serde)] struct Round { #[key] @@ -6,6 +8,6 @@ struct Round { round_number: u8, //--------------- state: u8, // actually a RoundState - // move_a: Move, // duelist_a shot - // move_b: Move, // duelist_b shot + move_a: Moves, // duelist_a shot + move_b: Moves, // duelist_b shot } diff --git a/dojo-starter/src/models/session.cairo b/dojo-starter/src/models/session.cairo new file mode 100644 index 0000000..2e6f460 --- /dev/null +++ b/dojo-starter/src/models/session.cairo @@ -0,0 +1,20 @@ +use starknet::ContractAddress; +use dojo_starter::models::player::Player; +use dojo_starter::models::blobert::{blobert_1::Blobert_1,blobert_2::Blobert_2,blobert_3::Blobert_3,blobert_4::Blobert_4,blobert_5::Blobert_5,blobert_6::Blobert_6}; + + +#[derive(Model, Drop, Serde)] +struct Player_Session { + #[key] + game_id: u128, + #[key] + player_address: ContractAddress, + player: Player, + current_blobert: u8, + blobert_1: Blobert_1, + blobert_2: Blobert_2, + blobert_3: Blobert_3, + blobert_4: Blobert_4, + blobert_5: Blobert_5, + blobert_6: Blobert_6, +} \ No newline at end of file diff --git a/dojo-starter/src/systems/battleSystem.cairo b/dojo-starter/src/systems/battleSystem.cairo index 0e46729..6d3a3e7 100644 --- a/dojo-starter/src/systems/battleSystem.cairo +++ b/dojo-starter/src/systems/battleSystem.cairo @@ -8,6 +8,10 @@ mod battleSystem { use dojo_starter::models::round::Round; use dojo_starter::types::game::GameState; use dojo_starter::types::round::RoundState; + use dojo_starter::models::session::Player_Session; + use dojo_starter::models::moves::Moves; + + const DAMAGE: u8 = 10; fn _assert_challenge(world: IWorldDispatcher, caller: ContractAddress, game_id: u128, round_number: u8) -> (Game, u8) { let game: Game = get!(world, game_id, Game); @@ -21,22 +25,95 @@ mod battleSystem { (game, player_number) } - // fn commit_move(world: IWorldDispatcher, game_id: u128, round_number: u8, hash: u64){ - // let caller: ContractAddress = starknet::get_caller_address(); + fn commit_move(world: IWorldDispatcher, game_id: u128, round_number: u8, hash: u64){ + let caller: ContractAddress = starknet::get_caller_address(); + + let(_game, _player_number) = _assert_challenge(world, caller, game_id, round_number); + + let mut round: Round = get!(world, (game_id, round_number), Round); + assert(round.state == RoundState::Commit.into(), 'Round not in Commit'); + + //Validate action hash WORK IN PROGRESS + if (_player_number == 1) { + assert(round.move_a.hash == 0, 'Already committed'); + round.move_a.hash = hash; + } else if (_player_number == 2) { + assert(round.move_b.hash == 0, 'Already committed'); + round.move_b.hash = hash; + } + + //Finished commit + if(round.move_a.hash != 0 && round.move_b.hash != 0){ + round.state = RoundState::Reveal.into(); + } + + set!(world, (round)); + } + + //Decide who wins a round, or go to next + fn process_round(world: IWorldDispatcher, ref game: Game, ref round: Round, is_last_round: bool){ + let mut executed: bool = false; + // executed = attack_sync(world, game.player_a, game.player_b, round, ref round.move_a, ref round.move_b, false, game.game_id, ); - // let(_game, _player_number) = _assert_challenge(world, caller, game_id, round_number); + } - // let round: Round = get!(world, (game_id, round_number), Round); - // assert(round.state == RoundState::Commit.into(), 'Round not in Commit'); + fn attack_sync(world: IWorldDispatcher, attacker: ContractAddress, enemy: ContractAddress, round: Round, ref attack: Moves, ref enemy_attack: Moves,sync: bool, game_id: u128, attacker_blobert_id: u8, enemy_blobert_id: u8) -> bool { + let mut executed: bool = attack(world, game_id, attacker, attacker_blobert_id,round, ref attack); + if(sync || !executed){ + executed = attack(world, game_id, enemy, enemy_blobert_id,round, ref enemy_attack) || executed; + } + (executed) + } - // //Validate action hash WORK IN PROGRESS - // if (_player_number == 1) { - // assert(round.shot_a.hash == 0, 'Already committed'); - // round.shot_a.hash = hash; - // } else if (_player_number == 2) { - // assert(round.shot_b.hash == 0, 'Already committed'); - // round.shot_b.hash = hash; - // } - // } + + fn attack(world: IWorldDispatcher, game_id: u128, attacker: ContractAddress, blobert_id: u8 ,round: Round, ref attack: Moves) -> bool { + //commit the move on chain + let game: Game = get!(world, game_id, Game); + let mut player_a: Player_Session = get!(world, (game_id, game.player_a), Player_Session); + let mut player_b: Player_Session = get!(world, (game_id, game.player_b), Player_Session); + if(attacker == player_a.player_address){ + if(player_b.current_blobert == 1){ + player_b.blobert_1.health -= DAMAGE; + }else if(player_b.current_blobert == 2){ + player_b.blobert_2.health -= DAMAGE; + }else if(player_b.current_blobert == 3) { + player_b.blobert_3.health -= DAMAGE; + }else if(player_b.current_blobert == 4){ + player_b.blobert_4.health -= DAMAGE; + }else if(player_b.current_blobert == 5){ + player_b.blobert_5.health -= DAMAGE; + }else{ + player_b.blobert_6.health -= DAMAGE; + } + + //set the state to waiting for player b + + set!(world, (player_a, player_b)); + + return true; + }else if(attacker == player_b.player_address){ + if(player_a.current_blobert == 1){ + player_a.blobert_1.health -= DAMAGE; + }else if(player_a.current_blobert == 2){ + player_a.blobert_2.health -= DAMAGE; + }else if(player_a.current_blobert == 3) { + player_a.blobert_3.health -= DAMAGE; + }else if(player_a.current_blobert == 4){ + player_a.blobert_4.health -= DAMAGE; + }else if(player_a.current_blobert == 5){ + player_a.blobert_5.health -= DAMAGE; + }else{ + player_a.blobert_6.health -= DAMAGE; + } + + //set the state to waiting fdor player a + + set!(world, (player_a, player_b)); + + return true; + }else{ + return false; + } + } } diff --git a/dojo-starter/src/systems/lobby.cairo b/dojo-starter/src/systems/lobby.cairo index 03c0325..1eb9b71 100644 --- a/dojo-starter/src/systems/lobby.cairo +++ b/dojo-starter/src/systems/lobby.cairo @@ -29,6 +29,7 @@ mod lobby { #[abi(embed_v0)] impl LobbyImpl of ILobby { fn register_player(self: @ContractState, name: felt252) { + //TODO check if the name existed before let caller: ContractAddress = starknet::get_caller_address(); let mut player: Player = get!(self.world(), caller, Player);