add/move stuff around for itemstate
This commit is contained in:
		
							parent
							
								
									b8de2ea8e6
								
							
						
					
					
						commit
						acdf960d4b
					
				| @ -58,7 +58,7 @@ fn add_floor_item_to_inventory(character: &CharacterEntity) | ||||
|                 }}).await?; | ||||
| 
 | ||||
|             let add_result = inventory.add_floor_item(floor_item)?; | ||||
|             transaction.gateway().set_character_inventory(&character.id, &inventory.inventory.as_inventory_entity(&character.id)).await?; | ||||
|             transaction.gateway().set_character_inventory(&character.id, &inventory.as_inventory_entity(&character.id)).await?; | ||||
|             item_state.set_inventory(inventory); | ||||
| 
 | ||||
|             Ok(((item_state, transaction), | ||||
|  | ||||
| @ -3,6 +3,7 @@ use crate::ship::items::ClientItemId; | ||||
| use crate::entity::item::{Meseta, ItemEntityId, ItemDetail, ItemEntity, InventoryEntity, InventoryItemEntity}; | ||||
| use std::future::Future; | ||||
| 
 | ||||
| use crate::ship::map::MapArea; | ||||
| use crate::ship::location::RoomId; | ||||
| use crate::entity::character::CharacterEntityId; | ||||
| use crate::entity::gateway::GatewayError; | ||||
| @ -253,6 +254,10 @@ impl FloorItemDetail { | ||||
| pub struct FloorItem { | ||||
|     item_id: ClientItemId, | ||||
|     item: FloorItemDetail, | ||||
|     map_area: MapArea, | ||||
|     x: f32, | ||||
|     y: f32, | ||||
|     z: f32, | ||||
| } | ||||
| 
 | ||||
| impl FloorItem { | ||||
| @ -294,35 +299,6 @@ impl FloorItem { | ||||
| #[derive(Clone, Debug)] | ||||
| pub struct Inventory(Vec<InventoryItem>); | ||||
| 
 | ||||
| impl Inventory { | ||||
|     pub fn as_inventory_entity(&self, _character_id: &CharacterEntityId) -> InventoryEntity { | ||||
|         InventoryEntity { | ||||
|             items: self.0.iter() | ||||
|                 .map(|item| { | ||||
|                     match &item.item { | ||||
|                         InventoryItemDetail::Individual(item) => { | ||||
|                             InventoryItemEntity::Individual(ItemEntity { | ||||
|                                 id: item.entity_id, | ||||
|                                 item: item.item.clone(), | ||||
|                             }) | ||||
|                         }, | ||||
|                         InventoryItemDetail::Stacked(items) => { | ||||
|                             InventoryItemEntity::Stacked(items.entity_ids.iter() | ||||
|                                                          .map(|id| { | ||||
|                                                              ItemEntity { | ||||
|                                                                  id: *id, | ||||
|                                                                  item: ItemDetail::Tool(items.tool) | ||||
|                                                              } | ||||
|                                                          }) | ||||
|                                                          .collect()) | ||||
|                         }, | ||||
|                     } | ||||
|                 }) | ||||
|                 .collect() | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #[derive(thiserror::Error, Debug)] | ||||
| pub enum InventoryError { | ||||
| @ -349,7 +325,7 @@ pub struct RoomFloorItems(Vec<FloorItem>); | ||||
| 
 | ||||
| pub struct InventoryState { | ||||
|     character_id: CharacterEntityId, | ||||
|     pub inventory: Inventory, | ||||
|     inventory: Inventory, | ||||
|     meseta: Meseta, | ||||
| } | ||||
| 
 | ||||
| @ -411,6 +387,39 @@ impl InventoryState { | ||||
|             }, | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn take_item(&mut self, item_id: &ClientItemId) -> Option<InventoryItem> { | ||||
|         self.inventory.0 | ||||
|             .drain_filter(|i| i.item_id == *item_id) | ||||
|             .next() | ||||
|     } | ||||
| 
 | ||||
|     pub fn as_inventory_entity(&self, _character_id: &CharacterEntityId) -> InventoryEntity { | ||||
|         InventoryEntity { | ||||
|             items: self.inventory.0.iter() | ||||
|                 .map(|item| { | ||||
|                     match &item.item { | ||||
|                         InventoryItemDetail::Individual(item) => { | ||||
|                             InventoryItemEntity::Individual(ItemEntity { | ||||
|                                 id: item.entity_id, | ||||
|                                 item: item.item.clone(), | ||||
|                             }) | ||||
|                         }, | ||||
|                         InventoryItemDetail::Stacked(items) => { | ||||
|                             InventoryItemEntity::Stacked(items.entity_ids.iter() | ||||
|                                                          .map(|id| { | ||||
|                                                              ItemEntity { | ||||
|                                                                  id: *id, | ||||
|                                                                  item: ItemDetail::Tool(items.tool) | ||||
|                                                              } | ||||
|                                                          }) | ||||
|                                                          .collect()) | ||||
|                         }, | ||||
|                     } | ||||
|                 }) | ||||
|                 .collect() | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| pub struct FloorState { | ||||
| @ -434,6 +443,22 @@ impl FloorState { | ||||
|                 .next() | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     pub fn add_inventory_item(&mut self, inventory_item: InventoryItem, map_area: MapArea, position: (f32, f32, f32)) { | ||||
|         let floor_item = FloorItem { | ||||
|             item_id: inventory_item.item_id, | ||||
|             item: match inventory_item.item { | ||||
|                 InventoryItemDetail::Individual(individual_item) => FloorItemDetail::Individual(individual_item), | ||||
|                 InventoryItemDetail::Stacked(stacked_item) => FloorItemDetail::Stacked(stacked_item), | ||||
|             }, | ||||
|             map_area: map_area, | ||||
|             x: position.0, | ||||
|             y: position.1, | ||||
|             z: position.2, | ||||
|         }; | ||||
| 
 | ||||
|         self.shared.0.push(floor_item); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user