cleanup
This commit is contained in:
		
							parent
							
								
									92d231cd22
								
							
						
					
					
						commit
						46af418adb
					
				@ -77,7 +77,6 @@ where
 | 
			
		||||
{
 | 
			
		||||
    pub fn act<O, F, Fut>(self, f: F) -> ItemActionStage<O, ItemStateAction<T, S, E>, F, Fut, S, E>
 | 
			
		||||
    where
 | 
			
		||||
        //F: FnOnce(S, ()) -> Pin<Box<dyn Future<Output=Result<(S, O), E>> + Send>> + Send + Sync
 | 
			
		||||
        F: Fn(S, ()) -> Fut + Send + Sync,
 | 
			
		||||
        Fut: Future<Output=Result<(S, O), E>> + Send
 | 
			
		||||
    {
 | 
			
		||||
@ -95,7 +94,6 @@ where
 | 
			
		||||
    P: ItemAction,
 | 
			
		||||
    F: Fn(S, P::Output) -> Fut + Send + Sync,
 | 
			
		||||
    Fut: Future<Output=Result<(S, O) , E>> + Send,
 | 
			
		||||
    //F: FnOnce(S, P::Output) -> Pin<Box<dyn Future<Output=Result<(S, O) , E>> + Send>> + Send + Sync,
 | 
			
		||||
{
 | 
			
		||||
    _s: std::marker::PhantomData<S>,
 | 
			
		||||
    _e: std::marker::PhantomData<E>,
 | 
			
		||||
@ -107,7 +105,6 @@ where
 | 
			
		||||
impl<O, P: ItemAction, F, Fut, S, E> ItemAction for ItemActionStage<O, P, F, Fut, S, E>
 | 
			
		||||
where
 | 
			
		||||
    P: ItemAction + ItemAction<Start = S, Error = E> + Send + Sync,
 | 
			
		||||
    //F: FnOnce(S, P::Output) -> Pin<Box<dyn Future<Output=Result<(S, O), E>> + Send>> + Send + Sync,
 | 
			
		||||
    F: Fn(S, P::Output) -> Fut + Send + Sync,
 | 
			
		||||
    Fut: Future<Output=Result<(S, O), E>> + Send,
 | 
			
		||||
    S: Send + Sync,
 | 
			
		||||
@ -145,7 +142,6 @@ where
 | 
			
		||||
    pub fn act<O2, G, GFut>(self, g: G) -> ItemActionStage<O2, ItemActionStage<O, P, F, Fut, S, E>, G, GFut, S, E>
 | 
			
		||||
    where
 | 
			
		||||
        S: Send + Sync,
 | 
			
		||||
        //G: FnOnce(S, <ItemActionStage<O, P, F, S, E> as ItemAction>::Output) -> Pin<Box<dyn Future<Output=Result<(S, O2), E>> + Send>> + Send + Sync,
 | 
			
		||||
        G: Fn(S, <ItemActionStage<O, P, F, Fut, S, E> as ItemAction>::Output) -> GFut + Send + Sync,
 | 
			
		||||
        GFut: Future<Output=Result<(S, O2), E>> + Send,
 | 
			
		||||
        O2: Send + Sync,
 | 
			
		||||
@ -256,20 +252,6 @@ impl FloorItemDetail {
 | 
			
		||||
            _ => None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
    fn mag<'a>(&'a self) -> Option<&'a IndividualItemDetail> {
 | 
			
		||||
        match self {
 | 
			
		||||
            FloorItemDetail::Individual(individual_item) => {
 | 
			
		||||
                match individual_item.item {
 | 
			
		||||
                    ItemDetail::Mag(mag) => Some(mag),
 | 
			
		||||
                    _ => None,
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
            _ => None
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
*/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
@ -320,28 +302,9 @@ impl FloorItem {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// meseta is a floor item
 | 
			
		||||
/*
 | 
			
		||||
impl Into<InventoryItem> for FloorItem {
 | 
			
		||||
    fn into(&self) -> InventoryItem {
 | 
			
		||||
        InventoryItem {
 | 
			
		||||
            item_id: self.item_id,
 | 
			
		||||
            item:
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
pub struct Inventory(Vec<InventoryItem>);
 | 
			
		||||
/*
 | 
			
		||||
#[derive(Clone, Debug)]
 | 
			
		||||
pub struct Inventory {
 | 
			
		||||
    item_id_counter: u32,
 | 
			
		||||
    items: Vec<InventoryItem>,
 | 
			
		||||
    equipped: EquippedEntity,
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
impl Inventory {
 | 
			
		||||
    pub fn as_inventory_entity(&self, _character_id: &CharacterEntityId) -> InventoryEntity {
 | 
			
		||||
@ -514,36 +477,6 @@ impl Default for ItemState {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
struct ProxiedItemState {
 | 
			
		||||
    character_inventory: RefCell<HashMap<CharacterEntityId, RefCell<Inventory>>>,
 | 
			
		||||
    //character_bank: HashMap<CharacterEntityId, RefCell<Bank>>,
 | 
			
		||||
    //character_meseta: HashMap<CharacterEntityId, RefCell<Meseta>>,
 | 
			
		||||
    //bank_meseta: HashMap<CharacterEntityId, RefCell<Meseta>>,
 | 
			
		||||
 | 
			
		||||
    character_room: RefCell<HashMap<CharacterEntityId, RefCell<RoomId>>>,
 | 
			
		||||
    character_floor: RefCell<HashMap<CharacterEntityId, RefCell<RoomFloorItems>>>,
 | 
			
		||||
    room_floor: RefCell<HashMap<RoomId, RefCell<RoomFloorItems>>>,
 | 
			
		||||
 | 
			
		||||
    //room_item_id_counter: HashMap<RoomId, RefCell<Box<dyn FnMut() -> ClientItemId + Send>>>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for ProxiedItemState {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        ProxiedItemState {
 | 
			
		||||
            character_inventory: RefCell::new(HashMap::new()),
 | 
			
		||||
            //character_bank: HashMap::new(),
 | 
			
		||||
            //character_meseta: HashMap::new(),
 | 
			
		||||
            //bank_meseta: HashMap::new(),
 | 
			
		||||
            character_floor: RefCell::new(HashMap::new()),
 | 
			
		||||
            character_room: RefCell::new(HashMap::new()),
 | 
			
		||||
            room_floor: RefCell::new(HashMap::new()),
 | 
			
		||||
            //room_item_id_counter: HashMap::new(),
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
struct ProxiedItemState {
 | 
			
		||||
    character_inventory: HashMap<CharacterEntityId, Inventory>,
 | 
			
		||||
    //character_bank: HashMap<CharacterEntityId, RefCell<Bank>>,
 | 
			
		||||
@ -575,19 +508,9 @@ impl Default for ProxiedItemState {
 | 
			
		||||
 | 
			
		||||
pub struct ItemStateProxy<'a> {
 | 
			
		||||
    item_state: &'a mut ItemState,
 | 
			
		||||
    //entity_gateway: &'a mut dyn EntityGateway,
 | 
			
		||||
    //transaction: Box<dyn EntityGatewayTransaction>,
 | 
			
		||||
    //entity_gateway: &'a mut Box<dyn EntityGateway>,
 | 
			
		||||
    //entity_gateway: &'a mut Box<dyn EntityGateway>,
 | 
			
		||||
    proxied_state: ProxiedItemState,
 | 
			
		||||
 | 
			
		||||
    //gateway_actions: Vec<GatewayActions>,
 | 
			
		||||
 | 
			
		||||
    //_eg: std::marker::PhantomData<EG>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//impl<'a> Drop for ItemStateProxy<'a> {
 | 
			
		||||
//    fn drop(&mut self) {
 | 
			
		||||
impl<'a> ItemStateProxy<'a> {
 | 
			
		||||
    pub fn commit(self) {
 | 
			
		||||
        self.item_state.character_inventory.extend(self.proxied_state.character_inventory.clone());
 | 
			
		||||
@ -598,34 +521,6 @@ impl<'a> ItemStateProxy<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
fn get_or_clone<'a,  K, V>(master: &HashMap<K, V>, proxy: &'a RefCell<HashMap<K, RefCell<V>>>, key: K, err: fn(K) -> ItemStateError) -> Result<impl Deref<Target = V> + 'a, ItemStateError>
 | 
			
		||||
where
 | 
			
		||||
    K: Eq + std::hash::Hash + Copy,
 | 
			
		||||
    V: Clone
 | 
			
		||||
{
 | 
			
		||||
    let existing_element = master.get(&key).ok_or_else(|| err(key))?;
 | 
			
		||||
    Ok(proxy.borrow_mut().entry(key)
 | 
			
		||||
        .or_insert(RefCell::new(existing_element.clone()))
 | 
			
		||||
        .borrow_mut())
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
fn get_or_clone<'a,  K, V>(master: &HashMap<K, V>, proxy: &'a mut HashMap<K, RefCell<V>>, key: K, err: fn(K) -> ItemStateError) -> Result<impl Deref<Target = V> + 'a, ItemStateError>
 | 
			
		||||
where
 | 
			
		||||
    K: Eq + std::hash::Hash + Copy,
 | 
			
		||||
    V: Clone
 | 
			
		||||
{
 | 
			
		||||
    let existing_element = master.get(&key).ok_or_else(|| err(key))?;
 | 
			
		||||
    Ok(proxy.entry(key)
 | 
			
		||||
        .or_insert(RefCell::new(existing_element.clone()))
 | 
			
		||||
        .borrow_mut())
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
fn get_or_clone<K, V>(master: &HashMap<K, V>, proxy: &mut HashMap<K, V>, key: K, err: fn(K) -> ItemStateError) -> Result<V, ItemStateError>
 | 
			
		||||
where
 | 
			
		||||
@ -639,16 +534,10 @@ where
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> ItemStateProxy<'a> {
 | 
			
		||||
    //fn new(item_state: &'a mut ItemState, entity_gateway: &'a mut EG) -> Self {
 | 
			
		||||
    //fn new(item_state: &'a mut ItemState, entity_gateway: &'a mut dyn EntityGateway) -> Self {
 | 
			
		||||
    pub fn new(item_state: &'a mut ItemState/*, transaction: Box<dyn EntityGatewayTransaction>*/) -> Self {
 | 
			
		||||
    pub fn new(item_state: &'a mut ItemState) -> Self {
 | 
			
		||||
        ItemStateProxy {
 | 
			
		||||
            item_state,
 | 
			
		||||
            //entity_gateway,
 | 
			
		||||
            //transaction,
 | 
			
		||||
            proxied_state: Default::default(),
 | 
			
		||||
            //gateway_actions: Vec::new(),
 | 
			
		||||
            //_eg: std::marker::PhantomData,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -681,89 +570,7 @@ impl<'a> ItemStateProxy<'a> {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    pub fn new_item_id(&mut self) -> Result<ClientItemId, ItemStateError> {
 | 
			
		||||
        //let room_id = get_or_clone(&self.item_state.character_room, &mut self.proxied_state.character_room, *character_id, |c| ItemStateError::NoCharacter(c))?;
 | 
			
		||||
        self.item_state.room_item_id_counter += 1;
 | 
			
		||||
        Ok(ClientItemId(self.item_state.room_item_id_counter))
 | 
			
		||||
        /*
 | 
			
		||||
        self.item_state.room_item_id_counter
 | 
			
		||||
            .borrow_mut()
 | 
			
		||||
            .get_mut(&room_id)
 | 
			
		||||
            .ok_or(ItemStateError::NoRoom(room_id))
 | 
			
		||||
            .map(|f| f())
 | 
			
		||||
         */
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
fn record_item_drop(character_id: CharacterEntityId, item_drop: ItemDrop) -> impl Fn(&mut ItemStateProxy, ()) -> Result<(), ItemStateError> {
 | 
			
		||||
    move |item_state, _| {
 | 
			
		||||
        // how do I do this? I need EG to add_item_note but how should I kick that till later?
 | 
			
		||||
        // general purpose vec in item_state `misc_gateway_actions`?
 | 
			
		||||
        // can't quite use actions here as it relies on an ItemEntityId which at this point does not yet exist for the dropped item
 | 
			
		||||
        //item_state.gateway_actions.push(GatewayAction::ItemNote(item_drop.))
 | 
			
		||||
        Ok(())
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
fn map_drop_to_floor_item(character_id: CharacterEntityId, item_drop: ItemDrop) -> impl Fn(&mut ItemStateProxy, ()) -> Result<FloorItem, ItemStateError> {
 | 
			
		||||
    move |item_state, _| {
 | 
			
		||||
        match item_drop.item {
 | 
			
		||||
            ItemDropType::Weapon(w) => FloorItem {
 | 
			
		||||
                item_id: item_state.new_item_id(&character_id)?,
 | 
			
		||||
                item: FloorItemDetail::Individual(item_drop.item)
 | 
			
		||||
            },
 | 
			
		||||
            ItemDropType::Armor(w) => ItemOrMeseta::Individual(ItemDetail::Armor(w)),
 | 
			
		||||
            ItemDropType::Shield(w) => ItemOrMeseta::Individual(ItemDetail::Shield(w)),
 | 
			
		||||
            ItemDropType::Unit(w) => ItemOrMeseta::Individual(ItemDetail::Unit(w)),
 | 
			
		||||
            ItemDropType::TechniqueDisk(w) => ItemOrMeseta::Individual(ItemDetail::TechniqueDisk(w)),
 | 
			
		||||
            ItemDropType::Mag(w) => ItemOrMeseta::Individual(ItemDetail::Mag(w)),
 | 
			
		||||
            //ItemDropType::IndividualTool(t) => ItemOrMeseta::Individual(ItemDetail::Tool(t)),
 | 
			
		||||
            //ItemDropType::StackedTool(t, _) => ItemOrMeseta::Stacked(t),
 | 
			
		||||
            ItemDropType::Tool(t) if t.tool.is_stackable() => ItemOrMeseta::Stacked(t),
 | 
			
		||||
            ItemDropType::Tool(t) if !t.tool.is_stackable() => ItemOrMeseta::Individual(ItemDetail::Tool(t)),
 | 
			
		||||
            ItemDropType::Meseta(m) => ItemOrMeseta::Meseta(Meseta(m)),
 | 
			
		||||
            _ => unreachable!() // rust isnt smart enough to see that the conditional on tool catches everything
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
fn enemy_drops_item<EG>(item_state: &mut ItemState,
 | 
			
		||||
                        entity_gateway: &mut EG,
 | 
			
		||||
                        character: &CharacterEntity,
 | 
			
		||||
                        item_drop: ItemDrop)
 | 
			
		||||
                        -> Result<FloorItem, ItemStateError>
 | 
			
		||||
where
 | 
			
		||||
    EG: EntityGateway,
 | 
			
		||||
{
 | 
			
		||||
    ItemStateAction::default()
 | 
			
		||||
        .act(record_item_drop(character.id, item_drop.clone()))
 | 
			
		||||
        .act(map_drop_to_floor_item(character.id, item_drop))
 | 
			
		||||
        .act(add_item_drop_to_floor(character.id))
 | 
			
		||||
        .commit(&mut ItemStateProxy::new(item_state))
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
fn sell_item<EG: EntityGateway>(item_state: &mut ItemState,
 | 
			
		||||
                                entity_gateway: &mut EG,
 | 
			
		||||
                                character_id: &CharacterEntityId,
 | 
			
		||||
                                item_id: &ClientItemId,
 | 
			
		||||
                                amount: usize)
 | 
			
		||||
                                -> Result<TriggerCreateItem, ItemStateError>
 | 
			
		||||
where
 | 
			
		||||
    EG: EntityGateway,
 | 
			
		||||
{
 | 
			
		||||
    ItemStateAction::default()
 | 
			
		||||
        .act(take_item_from_inventory(*character_id, *item_id))
 | 
			
		||||
        .act(sell_inventory_item(*character_id, *item_id))
 | 
			
		||||
        .exec_state(&mut ItemStateProxy::new(item_state))
 | 
			
		||||
        .exec_gateway(&mut entity_gateway)
 | 
			
		||||
}
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user