public override void process(Entity entity) { var projectileComponent = entity.getComponent <ProjectileComponent>(); var lastPosition = entity.position; projectileComponent.update(); var newPosition = entity.position; var linecast = Physics.linecast(lastPosition, newPosition, 1 << SceneMap.PLAYER_LAYER); if (linecast.collider != null) { if (_playerBattler.onHit(linecast.normal * -1)) { entity.destroy(); } return; } CollisionResult collisionResult; var collider = entity.getComponent <Collider>(); // shots vs map if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult)) { Console.WriteLine("hey"); entity.destroy(); } // shots vs player if (_playerBattler.isOnImmunity() || _playerCollider == null) { return; } if (collider.collidesWith(_playerCollider, out collisionResult)) { if (_playerBattler.onHit(collisionResult)) { entity.destroy(); } } }
public override void process(Entity entity) { var missile = entity.getComponent <MissileComponent>(); // shots vs map CollisionResult collisionResult; var collider = entity.getComponent <Collider>(); if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult)) { if (missile != null) { createMissileExplosionEffect(missile); } else { createBulletEffect(entity.getComponent <ShotComponent>(), collisionResult.normal); } entity.destroy(); } // player vs shots if (missile != null) { if (_playerSprite.getCurrentAnimation().FramesToAttack.Contains(_playerSprite.CurrentFrame)) { foreach (var attackCollider in _playerSprite.getCurrentFrame().AttackColliders) { if (attackCollider.collidesWith(collider, out collisionResult)) { createMissileExplosionEffect(missile); entity.destroy(); } } } } // shots vs player if (_playerBattler.isOnImmunity()) { return; } if (collider.collidesWith(_playerCollider, out collisionResult)) { if (missile != null) { createMissileExplosionEffect(missile); } _playerBattler.onHit(collisionResult); entity.destroy(); } }
public override void process(Entity entity) { var projectileComponent = entity.getComponent <ProjectileComponent>(); var lastPosition = entity.position; projectileComponent.update(); var newPosition = entity.position; var flag = 1 << (projectileComponent.Data.FromPlayerId == 0 ? GlobalConstants.PLAYER_LAYER : GlobalConstants.ENEMY_LAYER); var linecast = Physics.linecast(lastPosition, newPosition, flag); if (linecast.collider != null) { if (linecast.collider.entity.getComponent <BattleComponent>().onHit(linecast.normal * -1)) { entity.destroy(); } return; } CollisionResult collisionResult; var collider = entity.getComponent <Collider>(); // shots vs map if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult)) { entity.destroy(); } // shots vs player if (_playerBattler.isOnImmunity() || _playerCollider == null || projectileComponent.Data.FromPlayerId > 0) { return; } if (collider.collidesWith(_playerCollider, out collisionResult)) { if (_playerBattler.onHit(collisionResult)) { entity.destroy(); } } }