Ejemplo n.º 1
0
    protected override void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
    {
        takeDamage.TakeDamage(Damage, gameObject);

        var controller = other.gameObject.GetComponent<CharacterController2D>();
        if (controller != null)
        {
            HandleKnockback(controller);
        }

        DestroyProjectile();
    }
Ejemplo n.º 2
0
 void Start()
 {
     myRend       = gameObject.GetComponent <SpriteRenderer>();
     meteorDamage = transform.parent.GetComponent <ITakeDamage>();
     playerDamage = GameObject.FindGameObjectWithTag("Player").transform.parent.GetComponent <ITakeDamage>();
 }
Ejemplo n.º 3
0
 void HandleDamageApplied(ITakeDamage DamageAppliedTo)
 {
     Poolable.Pool();
 }
Ejemplo n.º 4
0
 public void SetAttack(ITakeDamage enemy)
 {
     MentalState = MentalStates.Attacking;
     //SetUpWeapons(true, UnitWeapon.WeaponClasses.Ranged);
     TargetNonSpawnerEnemy = enemy;
 }
Ejemplo n.º 5
0
        private void WanderingLogic()
        {
            _opponent       = null;
            _movementActive = true;

            _idleTimer -= GameTime.DeltaTime;
            if (_idleTimer > 0)
            {
                return;                 //skip logic till timer runs out
            }
            if (TEXT_DEBUG_ENABLED)
            {
                TestDebugOutput = "Idle | ";                     //DEBUG
            }
            //stow any weapons
            SetUpWeapon(false);

            if (ClosestTeamSpawner == null || ClosestTeamSpawner.Health <= 0)
            {
                return;                                                               //wander skip conditions
            }
            //if too far from home...
            float cutoffDistanceSquared =
                Mathf.Pow(Mathf.Sqrt(MAX_DIST_SQ_FROM_VILLAGE_DESIRED) + ClosestTeamSpawner.CurrentRadius, 2);

            if (_rallyPointActive)
            {
                if ((_rallyPoint - transform.position).sqrMagnitude <
                    ReachMelee * ReachMelee * 2 * 2) //if "close enough" already...
                {
                    _rallyPointActive = false;       //turn off rallying
                }
                else //still heading there, eyes wide open (since this in the Idle state)
                {
                    SpeedWalkReturnToBase = true;
                    SetDestinationData(_rallyPoint);
                }
            }
            else //...no rallying, normal wandering logic...
            {
                if (DistanceSquaredFromNearestVillage > cutoffDistanceSquared) //if far from home (and Idle)
                {
                    _idleTimer = 2; //check distance again in a little while

                    SpeedWalkReturnToBase = true;
                    SetDestinationData(ClosestTeamSpawner.transform.position);

                    if (TEXT_DEBUG_ENABLED)
                    {
                        TestDebugOutput += ClosestTeamSpawner.gameObject.name + "dist: " +
                                           DistanceSquaredFromNearestVillage +
                                           "/" + cutoffDistanceSquared; //DEBUG
                    }
                }
                else //...wander near home
                {
                    _idleTimer = Random.Range(0, IDLE_PERIOD_MAX); //reset
                    if (Spawner.FindASpot(transform.position, WANDER_RADIUS, Radius,
                                          out var wanderDestination))
                    {
                        SpeedWalkReturnToBase = false;
                        SetDestinationData(wanderDestination);
                        if (TEXT_DEBUG_ENABLED)
                        {
                            TestDebugOutput += "Random";                     //DEBUG
                        }
                    }
                }
            }
        }
Ejemplo n.º 6
0
 protected virtual void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     destroyProjectile();
     //Debug.Log ("LOSERTTT");
 }
Ejemplo n.º 7
0
	protected override void OnCollideTakeDamage (Collider2D other, ITakeDamage takeDamage)
	{
		takeDamage.TakeDamage (Damage, gameObject);
		DestroyProjectile ();
	}
Ejemplo n.º 8
0
        private void CalculateClosest()
        {
            //int unitsUpdatedThisFrame = 0;
            _attackers = Units.Concat <IDealDamage>(TowerMgr.Towers).ToList();

            foreach (var attacker in _attackers)
            {
                if (attacker == null || attacker.GetHealth() <= 0)
                {
                    continue;
                }

                if (attacker.TimeTillNextMgrUpdate > 0)
                {
                    attacker.TimeTillNextMgrUpdate -= GameTime.DeltaTime;
                    continue;
                }

                //unitsUpdatedThisFrame++; //DEBUG

                attacker.TimeTillNextMgrUpdate = UNIT_UPDATE_PERIOD_DELAY; //reset

                //Find closest non-spawner enemy
                ITakeDamage closestEnemy = null;
                float       closestEnemyDistanceSquared = float.MaxValue;
                Vector3     ownPosition = attacker.transform.position;
                foreach (var other in Units)
                {
                    //reasons to skip: looking at itself, not a valid unit, or on same team
                    if (other == null || (IDealDamage)other == attacker || other.Team == attacker.Team ||
                        other.Health <= 0)
                    {
                        continue;
                    }

                    float testDistance = Vector3.SqrMagnitude(other.transform.position - ownPosition);
                    if (testDistance < closestEnemyDistanceSquared)
                    {
                        closestEnemyDistanceSquared = testDistance;
                        closestEnemy = other;

                        //push to unit for AI calculations
                        attacker.DistanceSquaredFromNearestEnemyUnit = closestEnemyDistanceSquared;
                    }
                }

                foreach (var other in TowerMgr.Towers)
                {
                    //reasons to skip: looking at itself, not a valid unit, or on same team
                    if (other == null || (IDealDamage)other == attacker || other.Team == attacker.Team ||
                        other.Health <= 0)
                    {
                        continue;
                    }

                    float testDistance = Vector3.SqrMagnitude(other.transform.position - ownPosition);
                    if (testDistance < closestEnemyDistanceSquared)
                    {
                        closestEnemyDistanceSquared = testDistance;
                        closestEnemy = other;

                        //push to unit for AI calculations
                        attacker.DistanceSquaredFromNearestEnemyUnit = closestEnemyDistanceSquared;
                    }
                }

                //get a more precise distance to current closest unit, taking into account its irregular/variable boundary
                if (closestEnemy != null &&
                    closestEnemyDistanceSquared < attacker.ReachSight * attacker.ReachSight * 2 * 2)
                {
                    closestEnemyDistanceSquared = Vector3.SqrMagnitude(
                        closestEnemy.transform.GetComponent <Collider>().ClosestPoint(ownPosition) - ownPosition);
                    //push to unit for AI calculations
                    attacker.DistanceSquaredFromNearestEnemyUnit = closestEnemyDistanceSquared;
                }

                //NOTE: null check when Unit goes to use
                attacker.ClosestNonSpawnerEnemy = closestEnemy;

                //Find closest spawners
                Spawner closestEnemySpawner = null;
                float   closestEnemySpawnerDistanceSquared = float.MaxValue;
                Spawner closestTeamSpawner = null;
                float   closestTeamSpawnerDistanceSquared = float.MaxValue;
                foreach (var s in LevelsMgr.CurrentLevel.Spawners)
                {
                    if (s == null || s.Health <= 0)
                    {
                        continue;                             //if not valid, skip
                    }
                    float testDistance = Vector3.SqrMagnitude(s.transform.position - ownPosition);
                    if (s.Team == attacker.Team)
                    {
                        if (testDistance < closestTeamSpawnerDistanceSquared)
                        {
                            closestTeamSpawnerDistanceSquared = testDistance;
                            closestTeamSpawner = s;
                        }
                    }
                    else
                    {
                        if (testDistance < closestEnemySpawnerDistanceSquared)
                        {
                            closestEnemySpawnerDistanceSquared = testDistance;
                            closestEnemySpawner = s;
                        }
                    }
                }

                //if unit close to an enemy spawner, get a more precise distance to its irregular/variable boundary
                if (closestEnemySpawner != null &&
                    closestEnemySpawnerDistanceSquared < attacker.ReachSight * attacker.ReachSight * 2 * 2)
                {
                    closestEnemySpawnerDistanceSquared = Vector3.SqrMagnitude(
                        closestEnemySpawner.GetComponent <Collider>().ClosestPoint(ownPosition) - ownPosition);
                }

                //push to unit for AI calculations
                //NOTE: null checks when Unit goes to use
                attacker.ClosestEnemySpawner = closestEnemySpawner;
                attacker.ClosestTeamSpawner  = closestTeamSpawner;
                attacker.DistanceSquaredFromNearestEnemySpawner = closestEnemySpawnerDistanceSquared;
                attacker.DistanceSquaredFromNearestVillage      = closestTeamSpawnerDistanceSquared;
            }
            //NumberOfUnitUpdatesThisFrame = unitsUpdatedThisFrame; //DEBUG
        }
Ejemplo n.º 9
0
 protected virtual void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     destroyProjectile();
 }
Ejemplo n.º 10
0
 protected override void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     Debug.Log("OnCollideTakeDamage");
 }
Ejemplo n.º 11
0
 // Start is called before the first frame update
 void Start()
 {
     damageable        = GetComponent <ITakeDamage>();
     damageable.health = 3;
 }
Ejemplo n.º 12
0
 protected virtual void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     //Debug.Log("TAKE OnCollideTakeDamage");
     takeDamage.TakeDamage(damage, gameObject);
     DestroyBall();
 }
Ejemplo n.º 13
0
 protected virtual void OnCollideOwner(Collider2D other, ITakeDamage takeDamage)
 {
     //Debug.Log("TAKE OnCollideOwner");
 }
Ejemplo n.º 14
0
 /// <summary>
 /// Metoda wywo³ywana po trafieniu przez pocisk obiektu,
 /// który mo¿e przyj¹æ obra¿enia.
 /// </summary>
 /// <param name="other"></param>
 /// <param name="takeDamage"></param>
 protected override void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     takeDamage.TakeDamage(Damage, gameObject);
     DestroyProjectile();
 }
Ejemplo n.º 15
0
 public void InvokeAction(ITakeDamage _currentView)
 {
     HasCollided?.Invoke(_currentView, currentBulletModel.GetPointDamage());
 }
Ejemplo n.º 16
0
 protected virtual void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
 }
Ejemplo n.º 17
0
 protected override void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     Console.Write("asd");
     takeDamage.TakeDamage(Damage, gameObject);
     DestroyProjectile();
 }
Ejemplo n.º 18
0
 // Use this for initialization
 protected override void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     takeDamage.TakePeriodicDamage(5,Damage, gameObject);
 }
 public void ApplyDamage(int Damage, ITakeDamage ApplyTo)
 {
     ApplyTo.TakeDamage(Damage);
 }
Ejemplo n.º 20
0
	protected virtual void OnCollideTakeDamage(Collider2D other,ITakeDamage takeDamage)
	{
	}
Ejemplo n.º 21
0
 void OnCollideTakeDamage(Collider2D other, ITakeDamage takeDamage)
 {
     Instantiate(HitEffect, other.transform.position, other.transform.rotation);
     takeDamage.TakeDamage(Damage, gameObject);
     DisableMeleeWeapon();
 }