@ -102,6 +102,8 @@ void System::enemy_pathing(GameLevel &level) {
}
void System : : init_positions ( World & world , SpatialMap & collider ) {
auto & inv = world . get_the < inventory : : Model > ( ) ;
world . query < Position > ( [ & ] ( auto ent , auto & pos ) {
if ( world . has < Combat > ( ent ) ) {
const auto & combat = world . get < Combat > ( ent ) ;
@ -109,6 +111,10 @@ void System::init_positions(World &world, SpatialMap &collider) {
collider . insert ( pos . location , ent ) ;
}
} else {
fmt : : println ( " System::init_positions for ent={} " , ent ) ;
dbc : : check ( ! inv . has ( ent ) ,
fmt : : format ( " !!! Entity {} is in player inventory and _also_ has a position in the world. " , ent ) ) ;
collider . insert ( pos . location , ent ) ;
}
} ) ;
@ -326,6 +332,9 @@ void System::pickup(GameLevel &level, Entity entity) {
auto & item_pos = world . get < Position > ( entity ) ;
level . collision - > remove ( item_pos . location ) ;
world . remove < Tile > ( entity ) ;
// if you don't do this you get the bug that you can pickup
// an item and it'll also be in your inventory
world . remove < Position > ( entity ) ;
if ( world . has < ritual : : JunkPile > ( entity ) ) {
auto & pile = world . get < ritual : : JunkPile > ( entity ) ;
@ -499,16 +508,21 @@ bool System::drop_item(GameLevel& level, Entity item) {
return false ;
}
// NOTE: I tink pickup and this need to be different
bool System : : place_in_container ( World & world , Entity cont_id , const std : : string & name , Entity world_entity ) {
auto & container = world . get < inventory : : Model > ( cont_id ) ;
if ( container . has ( world_entity ) ) {
fmt : : println ( " container {} already has entity {}, skip " , cont_id , world_entity ) ;
// NOTE: I think this would be a move?!
return false ;
} else if ( container . has ( name ) ) {
// this is an already occupied slot
fmt : : println ( " container {} already has SLOT {}, skip " , cont_id , name ) ;
return false ;
} else {
// this should only apply to the player's inventory
fmt : : println ( " adding {} entity to loot with name {} " , world_entity , name ) ;
container . add ( name , world_entity ) ;
return true ;
}