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(); } } }
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 update() { base.update(); if (entity.sprite.Looped) { fsm.popState(); } if (_playerBattler.isOnImmunity() || entity.sprite.CurrentFrame < entity.laserStartFrame || entity.sprite.CurrentFrame >= entity.laserEndFrame) { return; } var index = entity.sprite.CurrentFrame - entity.laserStartFrame - 1; if (index < 0) { return; } var start = entity.laserPoints[index, 0] + entity.entity.position; var end = entity.laserPoints[index, 1] + entity.entity.position; RaycastHit[] hits = new RaycastHit[10]; var hitCount = Physics.linecastAll(start, end, hits); for (int i = 0; i < hitCount; i++) { if (hits[i].collider.entity.tag == SceneMap.PLAYER) { var player = hits[i].collider.entity.getComponent <BattleComponent>(); var knockback = new Vector2(-hits[i].normal.X, hits[i].normal.Y); player.onHit(knockback); } } }