From 302ccff13ac3a0e7d1f913488e197f8059012ddd Mon Sep 17 00:00:00 2001 From: loothero Date: Mon, 17 Feb 2025 23:06:10 +0000 Subject: [PATCH] add lifecycle enforcement to game systems --- contracts/src/systems/battle/contracts.cairo | 6 ++++++ contracts/src/systems/draft/contracts.cairo | 6 ++++++ contracts/src/systems/map/contracts.cairo | 9 +++++++++ 3 files changed, 21 insertions(+) diff --git a/contracts/src/systems/battle/contracts.cairo b/contracts/src/systems/battle/contracts.cairo index 313dc31..be0cc0c 100644 --- a/contracts/src/systems/battle/contracts.cairo +++ b/contracts/src/systems/battle/contracts.cairo @@ -22,6 +22,9 @@ mod battle_systems { use dojo::model::ModelStorage; use dojo::world::WorldStorage; use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + use tournaments::components::libs::lifecycle::{LifecycleAssertionsImpl, LifecycleAssertionsTrait}; + use tournaments::components::models::game::TokenMetadata; + use tournaments::components::models::lifecycle::Lifecycle; #[abi(embed_v0)] impl BattleSystemsImpl of super::IBattleSystems { @@ -30,6 +33,9 @@ mod battle_systems { let mut world: WorldStorage = self.world(DEFAULT_NS()); + let token_metadata: TokenMetadata = world.read_model(game_id); + token_metadata.lifecycle.assert_is_playable(game_id, starknet::get_block_timestamp()); + let mut battle: Battle = world.read_model((battle_id, game_id)); battle.assert_battle(world); diff --git a/contracts/src/systems/draft/contracts.cairo b/contracts/src/systems/draft/contracts.cairo index 9daedee..06f913c 100644 --- a/contracts/src/systems/draft/contracts.cairo +++ b/contracts/src/systems/draft/contracts.cairo @@ -15,12 +15,18 @@ mod draft_systems { use dojo::model::ModelStorage; use dojo::world::WorldStorage; use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + use tournaments::components::libs::lifecycle::{LifecycleAssertionsImpl, LifecycleAssertionsTrait}; + use tournaments::components::models::game::TokenMetadata; + use tournaments::components::models::lifecycle::Lifecycle; #[abi(embed_v0)] impl DraftSystemsImpl of super::IDraftSystems { fn pick_card(ref self: ContractState, game_id: u64, option_id: u8) { let mut world: WorldStorage = self.world(DEFAULT_NS()); + let token_metadata: TokenMetadata = world.read_model(game_id); + token_metadata.lifecycle.assert_is_playable(game_id, starknet::get_block_timestamp()); + let mut game: Game = world.read_model(game_id); game.assert_owner(world); game.assert_draft(); diff --git a/contracts/src/systems/map/contracts.cairo b/contracts/src/systems/map/contracts.cairo index 1871af0..ec33502 100644 --- a/contracts/src/systems/map/contracts.cairo +++ b/contracts/src/systems/map/contracts.cairo @@ -16,12 +16,18 @@ mod map_systems { use dojo::model::ModelStorage; use dojo::world::WorldStorage; use dojo::world::{IWorldDispatcher, IWorldDispatcherTrait}; + use tournaments::components::libs::lifecycle::{LifecycleAssertionsImpl, LifecycleAssertionsTrait}; + use tournaments::components::models::game::{TokenMetadata}; + use tournaments::components::models::lifecycle::{Lifecycle}; #[abi(embed_v0)] impl MapSystemsImpl of super::IMapSystems { fn generate_tree(ref self: ContractState, game_id: u64) { let mut world: WorldStorage = self.world(DEFAULT_NS()); + let token_metadata: TokenMetadata = world.read_model(game_id); + token_metadata.lifecycle.assert_is_playable(game_id, starknet::get_block_timestamp()); + let mut game: Game = world.read_model(game_id); game.assert_owner(world); game.assert_generate_tree(); @@ -57,6 +63,9 @@ mod map_systems { fn select_node(ref self: ContractState, game_id: u64, node_id: u8) { let mut world: WorldStorage = self.world(DEFAULT_NS()); + let token_metadata: TokenMetadata = world.read_model(game_id); + token_metadata.lifecycle.assert_is_playable(game_id, starknet::get_block_timestamp()); + let mut game: Game = world.read_model(game_id); game.assert_owner(world); game.assert_select_node();