]> git.tdb.fi Git - libs/game.git/commitdiff
Take advantage of the new algorithms in mspcore
authorMikko Rasa <tdb@tdb.fi>
Thu, 3 Apr 2025 12:38:43 +0000 (15:38 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 3 Apr 2025 12:40:03 +0000 (15:40 +0300)
source/game/networking.cpp
source/game/physicssystem.cpp
source/game/replicator.cpp
source/gameview/renderer.cpp

index a430856b02744adbae86d7dc6eb1df7ee17b82af..0223220b52f292e19c25868c70d2136b43611e5c 100644 (file)
@@ -175,11 +175,8 @@ Networking::Player &Networking::create_player(const string &name, uint32_t id)
 
 bool Networking::is_current_sender(uint32_t player_id) const
 {
-       auto i = lower_bound_member(players, player_id, &Player::id);
-       if(i==players.end() || i->id!=player_id)
-               return false;
-
-       return i->owner==current_sender;
+       const Player *p = lookup_member(players, player_id, &Player::id);
+       return (p && p->owner==current_sender);
 }
 
 void Networking::set_state(State s)
index 3d2c85caafc2c1249054fe6e2efbbb1b70347c21..554e54d9c65aae59ff96025f5f4935aaac7ccc6e 100644 (file)
@@ -41,11 +41,10 @@ RaycastHit PhysicsSystem::cast_ray(const Geometry::Ray<float, 3> &ray)
        if(!result.body)
                return {};
 
-       auto i = lower_bound_member(collider_lookup, result.body, &Collider::physics_body);
-       if(i==collider_lookup.end() || i->physics_body!=result.body)
-               return {};
+       if(const Collider *c = lookup_member(collider_lookup, result.body, &Collider::physics_body))
+               return { c->shape, result.distance, result.position };
 
-       return { i->shape, result.distance, result.position };
+       return {};
 }
 
 void PhysicsSystem::simulated_rigid_body_changed(SimulatedRigidBody &body)
@@ -64,28 +63,26 @@ void PhysicsSystem::simulated_rigid_body_changed(SimulatedRigidBody &body)
        }
 }
 
+
 void PhysicsSystem::early_tick()
 {
        for(Handle<Entity> e: pending)
-       {
-               auto i = lower_bound_member(rigid_bodies, e, &SimulatedRigidBody::entity);
-               if(i==rigid_bodies.end() || i->entity!=e)
-                       continue;
-
-               if(i->body && i->shape && !i->physics_body)
-               {
-                       Handle<Transform> transform = i->entity->get_transform();
-                       Physics::MotionType motion = (i->motion ? Physics::DYNAMIC : Physics::STATIC);
-                       i->physics_body = make_unique<Physics::RigidBody>(world, i->shape->get_shape(), transform->get_position(), transform->get_rotation(), motion);
-                       unsigned layer = (motion==Physics::STATIC ? CollisionLayer::STATIC : CollisionLayer::MOVING);
-                       uint32_t collision_mask = (1<<CollisionLayer::STATIC) | (1<<CollisionLayer::MOVING);
-                       if(i->shape->is_raycast_target())
-                               collision_mask |= 1<<CollisionLayer::RAYCAST;
-                       i->physics_body->set_collisions(layer, collision_mask);
-                       auto j = lower_bound_member(collider_lookup, i->physics_body.get(), &Collider::physics_body);
-                       collider_lookup.emplace(j, i->physics_body.get(), i->shape);
-               }
-       }
+               if(SimulatedRigidBody *srb = lookup_member(rigid_bodies, e, &SimulatedRigidBody::entity))
+                       if(srb->body && srb->shape && !srb->physics_body)
+                       {
+                               Handle<Transform> transform = srb->entity->get_transform();
+                               Physics::MotionType motion = (srb->motion ? Physics::DYNAMIC : Physics::STATIC);
+                               srb->physics_body = make_unique<Physics::RigidBody>(world, srb->shape->get_shape(), transform->get_position(), transform->get_rotation(), motion);
+
+                               unsigned layer = (motion==Physics::STATIC ? CollisionLayer::STATIC : CollisionLayer::MOVING);
+                               uint32_t collision_mask = (1<<CollisionLayer::STATIC) | (1<<CollisionLayer::MOVING);
+                               if(srb->shape->is_raycast_target())
+                                       collision_mask |= 1<<CollisionLayer::RAYCAST;
+                               srb->physics_body->set_collisions(layer, collision_mask);
+
+                               auto j = lower_bound_member(collider_lookup, srb->physics_body.get(), &Collider::physics_body);
+                               collider_lookup.emplace(j, srb->physics_body.get(), srb->shape);
+                       }
        pending.clear();
 }
 
index d704c50ddf8d6732ca63fecc522465d25614caeb..719d487e71631e7d7f68cdcf88915d3f4a397487 100644 (file)
@@ -82,12 +82,11 @@ void Replicator::tick(Time::TimeDelta)
        stage.iterate_objects<Possessed>([this](Possessed &p){
                if(p.has_changed())
                {
-                       auto i = lower_bound_member(entities, p.get_entity()->get_transform(), &ReplicatedEntity::transform);
-                       if(i!=entities.end() && i->possessed.get()==&p)
+                       if(ReplicatedEntity *e = lookup_member(entities, p.get_entity()->get_transform(), &ReplicatedEntity::transform))
                        {
-                               event_source.emit<Events::PossessionChanged>(i->entity, p.get_player_id());
-                               if(i->visible_to_players && is_server())
-                                       send_possession(*i, 0);
+                               event_source.emit<Events::PossessionChanged>(e->entity, p.get_player_id());
+                               if(e->visible_to_players && is_server())
+                                       send_possession(*e, 0);
                        }
                        p.clear_changed();
                }
@@ -131,9 +130,8 @@ void Replicator::component_created(const Events::ComponentCreated &event)
        else if(auto possessed = dynamic_handle_cast<Possessed>(event.component))
        {
                Handle<Transform> transform = possessed->get_entity()->get_transform();
-               auto i = lower_bound_member(entities, transform, &ReplicatedEntity::transform);
-               if(i!=entities.end() && i->transform==transform)
-                       i->possessed = possessed;
+               if(ReplicatedEntity *e = lookup_member(entities, transform, &ReplicatedEntity::transform))
+                       e->possessed = possessed;
        }
 }
 
index 0d0dbdd20305849eed289fb50cbb2427536b01fa..cd4a34695d2a20e6e3500f7df1b5ef78852668e6 100644 (file)
@@ -171,16 +171,15 @@ Renderer::RenderedEntity &Renderer::get_rendered_entity(Game::Handle<Game::Entit
 void Renderer::component_destroyed(const Game::Events::ComponentDestroyed &event)
 {
        Game::Handle<Game::Entity> entity = event.component->get_entity();
-       auto i = lower_bound_member(entities, entity, &RenderedEntity::entity);
-       if(i!=entities.end() && i->entity==entity)
+       if(RenderedEntity *e = lookup_member(entities, entity, &RenderedEntity::entity))
        {
                if(dynamic_handle_cast<Game::Shape>(event.component))
-                       i->generated_mesh = nullptr;
+                       e->generated_mesh = nullptr;
                if(dynamic_handle_cast<Game::MeshSource>(event.component) || dynamic_handle_cast<DynamicMeshSource>(event.component))
-                       i->mesh_renderer = nullptr;
+                       e->mesh_renderer = nullptr;
                if(auto light = dynamic_handle_cast<Game::Light>(event.component))
                {
-                       i->light_emitter = nullptr;
+                       e->light_emitter = nullptr;
                        if(light->casts_shadows())
                                shadows_changed = true;
                }