// Update is called once per frame void Update() { Vector3 toPlayerMove = Vector3.zero; if (moveTowardsPlayer && playerHasSeen) { toPlayerMove = (player.transform.position - transform.position).normalized; } // Avoid others Vector3 antiCrowdingMove = Vector3.zero; foreach (Collider col in Physics.OverlapSphere(transform.position, antiCrowdingCheckRadius)) { DroneEnemy otherEnemy = Utility.FindAncestor <DroneEnemy>(col.gameObject); if (otherEnemy != null && otherEnemy != this && Vector3.Distance(col.gameObject.transform.position, transform.position) < antiCrowdingCheckRadius) { Vector3 away = transform.position - col.transform.position; float weight = Mathf.Pow(1 - (away.magnitude / antiCrowdingCheckRadius), 1f); Utils.Assert(weight >= 0f); antiCrowdingMove += away.normalized * weight; Debug.DrawLine(transform.position, col.transform.position, Color.red); } } mover.SetMove((toPlayerMove + antiCrowdingMoveWeight * antiCrowdingMove.normalized).normalized); }
void OnCollision(Collision col) { DroneEnemy enemy = Utility.FindAncestor <DroneEnemy>(col.gameObject); if (enemy != null && graceTime < 0f) { health--; graceTime = 2f; AudioSource.PlayClipAtPoint(hurtClip, transform.position); Utility.Instantiate(hurtFx, transform.position); if (health == 0) { isDead = true; } return; } HealthPotion hp = Utility.FindAncestor <HealthPotion>(col.gameObject); if (hp != null) { AudioSource.PlayClipAtPoint(healClip, transform.position); Utility.Instantiate(healFx, transform.position); health += hp.amount; hp.OnConsumed(); } }
public void Follow(DroneEnemy t) { leading_drone = t; destination.parent = t.transform; destination.position = t.transform.position; destination.localPosition = Vector3.back * 3f; destination.localRotation = Quaternion.identity; follower = true; t.leader = true; }
void AddFollower(Enemy follower, Squad s) { DroneEnemy de = follower as DroneEnemy; if (de == null) { return; } de.Follow(this); s.NewSquadMember -= AddFollower; }
//// Use this for initialization //void Start () { //} //// Update is called once per frame //void Update () { //} public virtual void Action(float deltaTime, DroneEnemy dEnemy) { }