@Override protected void processEntity(Entity entity, float deltaTime) { CollisionComponent collisionComponent = ComponentMappers.COLLISION.get(entity); TypeComponent typeComponent = ComponentMappers.TYPE.get(entity); if (typeComponent.type == GameObjectType.TYPE_PLAYER) { if (collisionComponent.isBegin) processPlayerBeginCollision(entity, collisionComponent.entity); else processPlayerEndCollision(entity, collisionComponent.entity); } entity.remove(CollisionComponent.class); }
private void processPlayerEndCollision(Entity playerEntity, Entity otherEntity) { TypeComponent typeComponent = ComponentMappers.TYPE.get(otherEntity); CapsuleControlComponent capsuleControlComponent = ComponentMappers.CAPSULE_CONTROL.get(playerEntity); StateComponent stateComponent = ComponentMappers.STATE.get(otherEntity); if (typeComponent.type == GameObjectType.TYPE_SAFE_CAPSULE && capsuleControlComponent != null && capsuleControlComponent.isExiting) { playerEntity.remove(CapsuleControlComponent.class); stateComponent.state = States.STATE_FREE; ComponentMappers.PHYSIC.get(playerEntity).body.getFixtureList().get(0).setSensor(false); } }
private void processPlayerBeginCollision(Entity playerEntity, Entity otherEntity) { TypeComponent typeComponent = ComponentMappers.TYPE.get(otherEntity); CapsuleControlComponent capsuleControlComponent = ComponentMappers.CAPSULE_CONTROL.get(playerEntity); StateComponent stateComponent = ComponentMappers.STATE.get(otherEntity); if (typeComponent.type == GameObjectType.TYPE_SAFE_CAPSULE && capsuleControlComponent == null && stateComponent.state == States.STATE_FREE) { stateComponent.state = States.STATE_BUSY; Body playerBody = ComponentMappers.PHYSIC.get(playerEntity).body; Body safeCapsuleBody = ComponentMappers.PHYSIC.get(otherEntity).body; playerBody.getFixtureList().get(0).setSensor(true); Vector2 posDiff = playerBody.getWorldCenter().sub(playerBody.getPosition()).cpy(); playerBody.setTransform(safeCapsuleBody.getWorldCenter().sub(posDiff), playerBody.getAngle()); WeldJointDef jointDef = new WeldJointDef(); jointDef.initialize(playerBody, safeCapsuleBody, safeCapsuleBody.getWorldCenter()); safeCapsuleBody.getWorld().createJoint(jointDef); JetpackControlComponent jetpackControlComponent = ComponentMappers.JETPACK.get(playerEntity); jetpackControlComponent.isActive = false; TurnControlComponent turnControlComponent = ComponentMappers.CONTROL.get(playerEntity); turnControlComponent.isActive = false; PooledEngine engine = (PooledEngine) this.getEngine(); playerEntity.add( engine .createComponent(CapsuleControlComponent.class) .init(jetpackControlComponent.jetpackActivateKey)); } if (typeComponent.type == GameObjectType.TYPE_ASTEROID) { Body playerBody = ComponentMappers.PHYSIC.get(playerEntity).body; if (!playerBody.getFixtureList().get(0).isSensor()) { OxygenComponent oxygenComponent = ComponentMappers.OXYGEN.get(playerEntity); if (oxygenComponent != null) oxygenComponent.addModificator(OxygenModificator.createInstantAsteroidModificator()); } } }