public PursuingCombatState(EntityCombatController context) : base(context) { StateContext.ReactionToIncomingAttack += OnReactionToIncomingAttack; StateContext.CurrentTargetWithinRange += OnCurrentTargetWithinRange; StateContext.CurrentTargetOutsideRange += OnCurrentTargetOutsideRange; StateContext.CurrentTargetUnavailable += OnCurrentTargetUnavailable; }
private void RegisterEnemy(EntityCombatController enemy) { enemiesWithinSight.Add(enemy); EnemySpottedEvent?.Invoke(enemy); enabled = true; }
public EntityCombatController GetNearestEnemy() { ISet <EntityCombatController> enemiesToChooseFrom = engagedEnemies.Count > 0 ? engagedEnemies : enemiesWithinSight; EntityCombatController chosenEnemy = (from enemy in enemiesToChooseFrom orderby(enemy.transform.position - transform.position).sqrMagnitude descending select enemy).FirstOrDefault(); return(chosenEnemy); }
private void UnregisterEnemy(EntityCombatController enemy) { enemiesWithinSight.Remove(enemy); engagedEnemies.Remove(enemy); EnemySightLostEvent?.Invoke(enemy); if (!AreEnemiesInVicinity) { enabled = false; } }
private bool CheckIfEnemy(GameObject checkedObject, out EntityCombatController combatController) { var otherFaction = checkedObject.GetComponent <IFaction>(); combatController = checkedObject.GetComponent <EntityController>().Combat; if (otherFaction != null && faction.AttitudeTowards(otherFaction) == RelationAttitude.Enemy) { return(true); } return(false); }
public AttackAction SelectAttack(EntityCombatController target, IEnumerable <AttackAction> availableAttacks) { var performedAttack = Utility.SelectRandomlyFromEnumerable(availableAttacks); if (performedAttack != null && Utility.SelectRandomlyFromEnumerable(target.Body.BodyElements, out var bodypartName)) { var enemyBodyparts = target.Body.GetBodypart(bodypartName.Value); performedAttack.Target = Utility.SelectRandomlyFromEnumerable(enemyBodyparts); performedAttack.SourceEntity = combatController; } return(performedAttack); }
public static AttackingCombatState Creator(EntityCombatController context) { return(new AttackingCombatState(context)); }
public AttackingCombatState(EntityCombatController context) : base(context) { }
public SimpleCombatStrategy(EntityCombatController combatController) { this.combatController = combatController; }
public static PursuingCombatState Creator(EntityCombatController context) { return(new PursuingCombatState(context)); }
public static TargetingCombatState Creator(EntityCombatController context) { return(new TargetingCombatState(context)); }
public TargetingCombatState(EntityCombatController context) : base(context) { StateContext.ReactionToIncomingAttack += OnReactionToIncomingAttack; StateContext.CurrentTargetUnavailable += OnCurrentTargetUnavailable; }
public static DefendingCombatState Creator(EntityCombatController context) { return(new DefendingCombatState(context)); }
public DefendingCombatState(EntityCombatController context) : base(context) { }