private void SetDisposition(EntityOLD e, EntityOLD.Disposition d) { KeyValuePair <EntityOLD, EntityOLD.Disposition> newEntry = new KeyValuePair <EntityOLD, EntityOLD.Disposition>(e, d); RemoveNearbyEntity(e); nearbyEntities.Add(newEntry); }
void OnTriggerEnter(Collider collider) { EntityOLD entity = collider.gameObject.GetComponentInParent <EntityOLD>(); if (entity != null) { if (entity.IsVulnerable() && (targets.Contains(entity) || damageAny == true)) { if (entity.GetComponent <AIController>() != null) { entity.TriggerEventDamagedByEntity(originEntity); } entity.ModifyHealth(-damage); entity.CommandSufferPushback(originEntity.transform.position); } } else { Destructable destructable = collider.gameObject.GetComponent <Destructable>(); if (destructable != null) { destructable.Damage(damage); } } }
public void RemoveNearbyEntity(EntityOLD e) { nearbyEntities.RemoveAll(kvp => kvp.Key.Equals(e)); if (targetEntity == e) { targetEntity = null; } }
void Awake() { thisEntity = GetComponent <EntityOLD>(); thisEntity.eventDamagedByEntity += ReactToTriggerDamagedByEntity; entityScan = GetComponentInChildren <EntityScan>(); AI_idle.SetEntity(thisEntity); AI_run.SetEntity(thisEntity); AI_attack.SetEntity(thisEntity); currentBehaviorState = BehaviorState.Idling; }
public override void Behave(EntityOLD targetEntity) { thisEntity.CommandSetMovementVector(GetMovementVector(targetEntity)); if (Vector3.Distance(targetEntity.transform.position, thisEntity.transform.position) < distanceToSwipe) { if (Vector3.Angle(thisEntity.GetMovementVector(), targetEntity.transform.position - thisEntity.transform.position) < 45) { thisEntity.CommandAttack(); } } }
/************ List of KeyValuePair<Entity, Disposition> ******************/ public List <EntityOLD> GetNearbyEnemiesAndHostiles(EntityOLD e) { List <EntityOLD> listOfEnemiesAndHostiles = new List <EntityOLD>(); listOfEnemiesAndHostiles = listOfEnemiesAndHostiles.Union <EntityOLD>( e.GetComponent <AIController>(). GetNearbyEntitiesOfDisposition(EntityOLD.Disposition.Enemy)). ToList <EntityOLD>(); listOfEnemiesAndHostiles = listOfEnemiesAndHostiles.Union <EntityOLD>( e.GetComponent <AIController>(). GetNearbyEntitiesOfDisposition(EntityOLD.Disposition.Hostile)). ToList <EntityOLD>(); return(listOfEnemiesAndHostiles); }
public override void Behave(EntityOLD targetEntity) { if (Time.time > timeToSwitch) { if (isMoving) { thisEntity.CommandSetMovementVector(StopMoving()); timeToSwitch = Time.time + Random.Range(minStopTime, maxStopTime); isMoving = false; } else { thisEntity.CommandSetMovementVector(SetRandomMovementVector()); timeToSwitch = Time.time + Random.Range(minMoveTime, maxMoveTime); isMoving = true; } } }
private void HurtEntityOnTouch(Collision collision) { EntityOLD touchedEntity = collision.collider.GetComponentInParent <EntityOLD>(); if (touchedEntity != null) { if (GetComponent <AIController>() != null) { if (GetComponent <AIController>().GetNearbyEnemiesAndHostiles(this).Contains(touchedEntity)) { if (touchedEntity.GetComponent <AIController>() != null) { touchedEntity.TriggerEventDamagedByEntity(this); } touchedEntity.ModifyHealth(-10f); touchedEntity.CommandSufferPushback(transform.position); } } } }
public override void Behave(EntityOLD targetEntity) { thisEntity.CommandSetMovementVector(GetMovementVector(targetEntity)); }
private Vector3 GetMovementVector(EntityOLD targetEntity) { return(-(new Vector3(targetEntity.transform.position.x - thisEntity.transform.position.x, 0, targetEntity.transform.position.z - thisEntity.transform.position.z).normalized)); }
public void AddNearbyEntity(EntityOLD e) { nearbyEntities.Add(new KeyValuePair <EntityOLD, EntityOLD.Disposition>(e, thisEntity.GetDisposition(e.GetAlignment()))); }
public void TriggerEventDamagedByEntity(EntityOLD e) { eventDamagedByEntity.Invoke(e); }
void Start() { entity = GetComponent <EntityOLD>(); }
public EntityOLD.Disposition GetDisposition(EntityOLD e) { return(nearbyEntities.First(kvp => kvp.Key == e).Value); }
public virtual void SetEntity(EntityOLD entity) { thisEntity = entity; }
/****************** Misc *************************/ private void ReactToTriggerDamagedByEntity(EntityOLD e) { SetDisposition(e, EntityOLD.Disposition.Hostile); }
private void ChooseTargetAndDetermineBehaviorState() { EntityOLD closestHostile = null; float totalHostileThreat = 0f; // Look for hostiles foreach (KeyValuePair <EntityOLD, EntityOLD.Disposition> kvp in nearbyEntities) { if (kvp.Value == EntityOLD.Disposition.Hostile) { totalHostileThreat += kvp.Key.GetThreatLevel(); if (closestHostile == null) { closestHostile = kvp.Key; } } } // Determine based on threat whether to run or attack, // With a 1% chance to attack when they would normally run if (totalHostileThreat > thisEntity.GetThreatBraveness() && Random.Range(0f, 1f) > chanceToAttackInsteadOfRun) { currentBehaviorState = BehaviorState.Running; } else { currentBehaviorState = BehaviorState.Attacking; } // If hostile found, target them if (closestHostile != null) { targetEntity = closestHostile; return; } // No hostiles found... EntityOLD closestEnemy = null; float totalEnemyThreat = 0f; // Look for enemies foreach (KeyValuePair <EntityOLD, EntityOLD.Disposition> kvp in nearbyEntities) { if (kvp.Value == EntityOLD.Disposition.Enemy) { totalEnemyThreat += kvp.Key.GetThreatLevel(); if (closestEnemy == null) { closestEnemy = kvp.Key; } } } // Determine based on threat whether to run or attack if (totalEnemyThreat > thisEntity.GetThreatBraveness() && Random.Range(0f, 1f) > chanceToAttackInsteadOfRun) { currentBehaviorState = BehaviorState.Running; } else { currentBehaviorState = BehaviorState.Attacking; } // If hostile found, target them if (closestEnemy != null) { targetEntity = closestEnemy; return; } // No hostiles or enemies found, don't target anyone currentBehaviorState = BehaviorState.Idling; targetEntity = null; }
public void SetOriginEntity(EntityOLD entity) { originEntity = entity; }
public abstract void Behave(EntityOLD targetEntity);
public bool IsEntityInNearbyEntities(EntityOLD e) { return(nearbyEntities.Any(kvp => kvp.Key == e)); }