Example #1
0
    // Start is called before the first frame update
    public override void Start()
    {
        base.Start();
        TurnTowardsBehavior turnTowardsBehavior = GetComponentInParent <TurnTowardsBehavior>();

        GameObject target = null;

        shootObjectDetection.CanShoot += (timeSinceLastShot, projectilesActive) => {
            return(timeSinceLastShot > shootInterval && (maxProjectilesActive < 0 || projectilesActive < maxProjectilesActive));
        };
        shootObjectDetection.CreateProjectile += () => {
            GameObject projectile = Instantiate <GameObject>(projectilePrefab);
            projectile.transform.position = projectileTransform.transform.position;
            projectile.transform.rotation = projectileTransform.transform.rotation;
            Rigidbody2D rigidbody = projectile.GetComponent <Rigidbody2D>();
            rigidbody.velocity = (target.transform.position - projectile.transform.position).normalized * projectileSpeed;
            return(projectile);
        };
        shootObjectDetection.OnHit += (projectile, hitObject) =>
        {
            //Debug.Log("Projectile Hit");
            EnemyBehavior enemy = hitObject.GetComponent <EnemyBehavior>();
            // filter out hits on enemies that have already been destroyed
            if (enemy.IsDead)
            {
                return(false);
            }
            enemy.Health -= projectileDamage;
            return(true);
        };
        shootObjectDetection.OnTargetChange += (newTarget) =>
        {
            turnTowardsBehavior.target = newTarget;
            target = newTarget;
        };

        GameController.instance.OnRoundEnd += (roundNum) =>
        {
            if (this != null && this.isPlaced)
            {
                foreach (HackableTower ht in FindObjectsOfType <HackableTower>().OrderBy(e => Random.value))
                {
                    if (ht != null && ht.Hacked)
                    {
                        StartCoroutine(RepairTower(ht));
                        return;
                    }
                }
            }
        };
    }
    // Start is called before the first frame update
    public override void Start()
    {
        base.Start();
        TurnTowardsBehavior turnTowardsBehavior = GetComponentInParent <TurnTowardsBehavior>();

        GameObject target = null;

        shootObjectDetection.CanShoot += (timeSinceLastShot, projectilesActive) => {
            return(timeSinceLastShot > shootInterval && (maxProjectilesActive < 0 || projectilesActive < maxProjectilesActive));
        };
        shootObjectDetection.CreateProjectile += () => {
            GameObject projectile = Instantiate <GameObject>(projectilePrefab);
            projectile.transform.position = projectileTransform.transform.position;
            projectile.transform.rotation = projectileTransform.transform.rotation;
            Rigidbody2D rigidbody = projectile.GetComponent <Rigidbody2D>();
            rigidbody.velocity = (target.transform.position - projectile.transform.position).normalized * projectileSpeed;
            return(projectile);
        };
        shootObjectDetection.OnHit += (projectile, hitObject) =>
        {
            //Debug.Log("Projectile Hit");
            EnemyBehavior enemy = hitObject.GetComponent <EnemyBehavior>();
            // filter out hits on enemies that have already been destroyed
            if (enemy.IsDead)
            {
                return(false);
            }
            enemy.Health -= projectileDamage;
            return(true);
        };
        shootObjectDetection.OnTargetChange += (newTarget) =>
        {
            turnTowardsBehavior.target = newTarget;
            target = newTarget;
        };

        OnHacked += (hackedBy) =>
        {
            shootObjectDetection.enabled = false;
        };

        OnUnhacked += () =>
        {
            shootObjectDetection.enabled = true;
        };
    }