Example #1
0
    // 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);
    }
Example #2
0
    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();
        }
    }
Example #3
0
	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;
	}
Example #4
0
    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;
    }
Example #5
0
    void AddFollower(Enemy follower, Squad s)
    {
        DroneEnemy de = follower as DroneEnemy;

        if (de == null)
        {
            return;
        }

        de.Follow(this);

        s.NewSquadMember -= AddFollower;
    }
Example #6
0
    //// Use this for initialization
    //void Start () {

    //}

    //// Update is called once per frame
    //void Update () {

    //}
    public virtual void Action(float deltaTime, DroneEnemy dEnemy)
    {
    }