Пример #1
0
    public static void RemoveTargetable(Team team, Killable killable)
    {
        if (targetables.ContainsKey(team))
            targetables[team].Remove(killable);

        //Debug.Log("- TEAM: " + team + " COUNT: " + targetables[team].Count);
    }
Пример #2
0
 void Start () {
     k = GameObject.Find("Player").GetComponent<Killable>();
     Debug.Assert(k);
     //w = GameObject.Find("MagicSauce").GetComponent<WaveManager>();
     //Debug.Assert(w);
     StartCoroutine(ShowLevel());
 }
Пример #3
0
    private void Awake()
    {
        rBody = GetComponent<Rigidbody>();
        killable = GetComponent<Killable>();

        killable.OnDie += CorpseExplode;
    }
Пример #4
0
 public override void TakingDamage(int pointsDamage, Killable enemyHitBy)
 {
     base.TakingDamage(pointsDamage, enemyHitBy);
     Debug.Log("[Taking damage] Plyer is taking dmage");
     FireCustomEvent(NamesEventGamekit.PLAYER_TAKING_DAMAGE, _transform.position);
     RootPlayerDataManager.Instance.ChangeHealthCurrentBy(pointsDamage);
 }
Пример #5
0
	public override void TakingDamage (int pointsDamage, Killable enemyHitBy)
	{
		if (isCrit && enemyHitBy != null)
		{
			OnCrititcalHit();
		}
		base.TakingDamage (pointsDamage, enemyHitBy);
	}
Пример #6
0
    public static void AddTargetable(Team team, Killable killable)
    {
        if (targetables == null)
            targetables = new Dictionary<Team, List<Killable>>();

        if (!targetables.ContainsKey(team))
            targetables.Add(team, new List<Killable>());
        targetables[team].Add(killable);

        //Debug.Log("+ TEAM: " + team +" COUNT: " + targetables[team].Count);
    }
Пример #7
0
        public Health(int amount, Killable owner, Armor armor)
        {
            if (amount <= 0) {
                throw new System.ArgumentException("Healthes with a negative amount aren't allowed");
            }

            MaxAmount = amount;
            Amount = amount;
            Owner = owner;
            Armor = armor;
        }
	public override void TakingDamage (int pointsDamage, Killable enemyHitBy)
	{
		base.TakingDamage (pointsDamage, enemyHitBy);

		if (Random.Range(0f, 1f) < ChanceToApply)
		{
			if (enemyHitBy.GetComponent<StatusEffectReceiver>() != null)
			{
				enemyHitBy.GetComponent<StatusEffectReceiver>().ApplyEffect(EffectToApply, NumberOfStacks);
			}
		}
	}
Пример #9
0
 private void OnContainerDie(Killable sender)
 {
     var dropAmount = Random.Range(MinDropCount, MaxDropCount + 1);
     for (var i = 0f; i < dropAmount; i++)
     {
         var dropPosition = sender.transform.position + Random.onUnitSphere * 1.5f;
         var collectible = DropItemPrefab;
         var dropItem = ((GameObject)Instantiate(collectible, dropPosition, Quaternion.identity)).GetComponent<Collectible>();
         dropItem.Shiftable.SetShiftPosition(Universe.Current.GetUniversePosition(dropPosition));
         dropItem.SetVelocity(Random.onUnitSphere * 5f);
     }
     var distantHitContainer = DistantContainers.First(c => c.name == sender.name);
     distantHitContainer.GetComponent<MeshRenderer>().enabled = false;
 }
Пример #10
0
 private void OnKill(Killable sender)
 {
     _liveCount--;
     Debug.Log("MOTHERSHIP LIVE COUNT: " + _liveCount);
     if (_liveCount <= 0)
     {
         Debug.Log("MOTHERSHIP DESTROYED!!!");
         HeadsUpDisplay.Current.DisplayMessage("MOTHERSHIP NEUTRALIZED", 3f);
         if (DefeatedSound != null)
         {
             var sound = ResourcePoolManager.GetAvailable(SoundPrefab, Universe.Current.ViewPort.transform.position, Quaternion.identity).GetComponent<AnonymousSound>();
             sound.PlayAt(DefeatedSound, Universe.Current.ViewPort.transform.position, 1f, false);
         }
         MapPin.SetPinState(MapPin.MapPinState.Inactive);
     }
 }
Пример #11
0
    private void SetupKillable()
    {
        if (null == Player)
        {
            PlayerKillable = null;
            return;
        }

        var k = Player.GetComponent<Killable>();
        if (!k)
        {
            Debug.LogWarning("Killable is not found on player instance object!");
            return;
        }
        PlayerKillable = k;
    }
Пример #12
0
	public override void TakingDamage (int pointsDamage, Killable enemyHitBy)
	{
		base.TakingDamage (pointsDamage, enemyHitBy);


		if (OnPickedUp(enemyHitBy))
		{
			if (DespawnOnPickup)
			{
				myKillable.DestroyKillable();
			}
			SpawnPickupEffect();
		}


	}
Пример #13
0
    public override void DestroyingKillable(Killable deadKillable)
    {
        //check bullet color vs enemy color
        if (deadKillable.KilledBy != null)
        {
            BulletMovement bullet = deadKillable.KilledBy.GetComponent<BulletMovement>();
            if (bullet != null)
            {
                PatternColor bulletColor = deadKillable.KilledBy.GetComponent<ColorComponent>().MyColor;
                PatternColor enemyColor = deadKillable.GetComponent<ColorComponent>().MyColor;               

                bullet.PlayerRef.EnemyKilled(bulletColor, enemyColor, PatternShape.none);
            }
        }
        myController.CoreDestroyed(deadKillable.GetComponent<ColorComponent>());


    }
Пример #14
0
    private void Start()
    {
        mEnemy          = GetComponent <Enemy>();
        mStatistics     = GetComponent <CharacterStatistics>();
        mKillable       = GetComponent <Killable>();
        mTeleport       = GetComponent <EnemyTeleport>();
        mSimpleMovement = GetComponent <SimpleMovement>();
        mSimpleAttack   = GetComponent <SimpleAttack>();
        mAnimator       = GetComponentInChildren <Animator>();

        mEnemy.SetEnemyAI(this);

        Game.instance.hud.bossHealth.gameObject.SetActive(true);
        Game.instance.hud.bossHealth.SetWithValues(0, mKillable.health, mKillable.health);

        Game.instance.hud.bossHealth.transform.localScale = Vector3.zero;
        Game.instance.hud.bossHealth.transform.DOScale(1f, 0.5f);
    }
Пример #15
0
    public MissileParabolic(string _towerType, Texture _texture, Vector2 _position, Vector2 _size, float _damage, float _speed, Killable _target, float _parabolicHeight)
    {
        towerType = _towerType;

        gameObject = GamePullController.CreateImage();
        GameController.missiles.Add(this);

        mapPosition     = _position;
        damage          = _damage;
        target          = _target;
        texture         = _texture;
        size            = _size;
        speed           = _speed;
        layer           = _target.layer;
        parabolicHeight = _parabolicHeight;

        startPosition = mapPosition;
    }
Пример #16
0
    private void GetNearbyTarget()
    {
        // init target list
        possibleTargets = new List <Killable>();

        GameObject[] gos = GameObject.FindGameObjectsWithTag("Fighter");

        foreach (GameObject go in gos)
        {
            Killable killable = go.GetComponent <Killable> ();
            float    distance = Vector3.Distance(killable.transform.position, transform.position);
            if (killable != null && distance < 1000)
            {
                if (FactionRelationshipManager.IsHostile(killable._faction, _faction))
                {
                    possibleTargets.Add(killable);
                }
            }
        }

        //If no possible targets found, go to battle center
        if (possibleTargets.Count == 0)
        {
            if (currentWaypoint == null)
            {
                //targetTransform = battleCenter.transform;
                targetNavWaypoint = battleCenter.navWaypoints;
                GetNextTarget();
            }
            return;
        }

        // Randomize the targets
        target = possibleTargets[Random.Range(0, possibleTargets.Count - 1)];

        if (target != null)
        {
            targetTransform   = target.transform;
            targetNavWaypoint = target.navWaypoints;

            // set first target
            GetNextTarget();
        }
    }
Пример #17
0
    private bool InstaKill(Killable target)
    {
        // If this is the player attacking and the player has the Saw, it may insta-kill
        if (gameObject.layer == mPlayerLayer && Game.instance.playerStats.IsItemEquipped <Saw>())
        {
            Enemy targetEnemy = target.GetComponent <Enemy>();
            if (targetEnemy != null && !targetEnemy.isBoss)
            {
                int val = Random.Range(0, 100);

                if (val < 5) // Don't apply luck - it's supposed to be very rare
                {
                    return(true);
                }
            }
        }

        return(false);
    }
Пример #18
0
 void Died(Entity ent)
 {
     if (ent == this._entity)
     {
         if (this.realMeter != null)
         {
             Killable entityComponent = ent.GetEntityComponent <Killable>();
             if (entityComponent == null)
             {
                 this.realMeter.SetHealth(0f, false);
             }
             else
             {
                 this.realMeter.SetHealth(Mathf.Max(0f, entityComponent.CurrentHp), false);
             }
         }
         this.Disconnect();
     }
 }
Пример #19
0
    private void OnDie(Killable sender)
    {
        Killable.OnDie -= OnDie;
        // Drop valuable
        var dropItem = ((GameObject)Instantiate(_dropItem, transform.position, Quaternion.identity)).GetComponent<Collectible>();
        dropItem.Shiftable.SetShiftPosition(Universe.Current.GetUniversePosition(transform.position));
        dropItem.SetVelocity(_velocity * Random.Range(-0.5f, 0.5f));

        // Drop junk
        var dropCount = Random.Range(DropJunkMinCount, DropJunkMaxCount);
        for (var i = 0; i < DropJunkMaxCount; i++)
        {
            var dropPosition = transform.position + Random.onUnitSphere * 1.5f;
            var fromCentre = dropPosition - transform.position;
            var dropJunk = ((GameObject)Instantiate(DropJunk, transform.position + Random.onUnitSphere * 1.5f, Quaternion.identity)).GetComponent<Collectible>();
            dropJunk.Shiftable.SetShiftPosition(Universe.Current.GetUniversePosition(dropPosition));
            dropJunk.SetVelocity(_velocity + fromCentre.normalized * Random.Range(5f, 15f));
        }
    }
Пример #20
0
    public EntityHUD.HealthMeterTag ConnectHealthMeter(Entity ent, string meterId)
    {
        this.Setup();
        HealthMeterBase healthMeterForId = this._data.GetHealthMeterForId(meterId);
        Killable        entityComponent  = ent.GetEntityComponent <Killable>();

        if (healthMeterForId != null && entityComponent != null)
        {
            HealthMeterBase pooledWindow = OverlayWindow.GetPooledWindow <HealthMeterBase>(healthMeterForId);
            EntityHUD.ConnectedHealthMeter connectedHealthMeter = new EntityHUD.ConnectedHealthMeter(ent, entityComponent, pooledWindow);
            this.healthMeters.Add(connectedHealthMeter);
            if (this.ShouldHideStuff())
            {
                connectedHealthMeter.Hide();
            }
            return(new EntityHUD.HealthMeterTag(this, connectedHealthMeter));
        }
        return(null);
    }
Пример #21
0
    public override void TakingDamage(int pointsDamage, Killable enemyHitBy)
    {
        if (enemyHitBy != null && enemyHitBy != lastHit)
        {
            if (enemyHitBy.GetComponent<BulletMovement>() != null)
            {
                PatternColor m_color = GetComponent<ColorComponent>().MyColor;
                PatternColor bulletColor = enemyHitBy.GetComponent<ColorComponent>().MyColor;
                if (m_color == bulletColor)
                {
                    //Double Damage;
                    lastHit = enemyHitBy;
                    m_killable.TakeDamage(pointsDamage, enemyHitBy);
                }
            }
        }

        base.TakingDamage(pointsDamage, enemyHitBy);
    }
Пример #22
0
    void CheckForKillsAndCollisions()
    {
        Vector3 avoidVector = Vector3.zero;

        foreach (GameObject agent in detector.nearbyAgents)
        {
            Killable killable = agent.GetComponent <Killable>();
            if (killable)
            {
                // Draw rays to debug
                Vector3 raystart  = transform.position + Vector3.up * 5;
                Vector3 direction = agent.transform.position + Vector3.up * 2 - raystart;
                Debug.DrawRay(raystart, direction, Color.green);
                Debug.DrawRay(raystart, direction.normalized * killDistance, Color.blue);
                //print("distance:  " + direction.magnitude);

                // Distance to target's head or thereabuots
                if (Vector3.Distance(transform.position + Vector3.up * 2, agent.transform.position) < killDistance)
                {
                    killable.Kill();
                }
            }
            else
            {
                Vector3 raystart  = transform.position + Vector3.up * 5;
                Vector3 direction = agent.transform.position + Vector3.up * 5 - raystart;
                Debug.DrawRay(raystart, direction, Color.green);
                Debug.DrawRay(raystart, direction.normalized * killDistance, Color.magenta);

                if (Vector3.Distance(transform.position + Vector3.up * 5, agent.transform.position) < killDistance)
                {
                    avoidVector += direction.normalized * avoidForceMultiplier / direction.magnitude;
                }
            }
        }

        // apply aviod force
        if (avoidVector.magnitude > maxAvoidForce)
        {
            avoidVector = avoidVector.normalized * maxAvoidForce;
        }
        body.AddForce(avoidVector);
    }
Пример #23
0
    public override void LiveUpdate()
    {
        var displacement = (_initSpeed + MissileSpeed) * Time.deltaTime;
        var observationPosition = Universe.Current.ViewPort.transform.position;
        var toOberverSquared = (transform.position - observationPosition).sqrMagnitude;
        if (toOberverSquared < _rayCheckMaxDistSquared)
        {
            if (!_hasHit)
            {
                var missileRay = new Ray(transform.position, transform.forward);

                RaycastHit missileHit;

                if (Physics.Raycast(missileRay, out missileHit, displacement, _mask))
                {
                    if (missileHit.collider.gameObject != Owner)
                    {
                        _killable = missileHit.collider.GetComponentInParent<Killable>();
                        if (_killable != null)
                        {
                            if (PlayerController.Current.VehicleInstance != null && Owner == PlayerController.Current.VehicleInstance.gameObject)
                                HeadsUpDisplay.Current.TriggerCrosshairPulse();
                            _killable.Damage(Damage, missileHit.point, missileHit.normal, Owner);
                        }
                        var rBody = missileHit.collider.GetComponentInParent<Rigidbody>();
                        if (rBody != null)
                            rBody.AddForceAtPosition(MissileForce * missileRay.direction, missileHit.point, ForceMode.Impulse);
                        _hasHit = true;
                        _hitPosition = missileHit.point;
                        PlaceHitEffects(missileHit.point, missileHit.normal, missileHit.collider.gameObject.transform);
                    }
                }
            }
        }
        else
        {
            if (toOberverSquared > _stopDistanceSquared)
            {
                Stop();
            }
        }
        _shiftable.Translate(transform.forward * displacement);
    }
Пример #24
0
    public void OnHit(float damage, Killable attacker)
    {
        // If friendly fire, ignore
        if (!FactionRelationshipManager.IsHostile(_faction, attacker._faction))
        {
            return;
        }

        //In case resistance value is invalid
        if (_resistance > 100 || _resistance < 0)
        {
            print("Resistance value invalid!");
            _resistance = 0;
        }

        // Decrease health
        _hitPoints -= (damage - (damage * _resistance) / 100);

        if (_hitPoints <= 0)
        {
            Killed();

            if (attacker._faction == Faction.PLAYER)
            {
                PlayerScore.instance.OnKilledEnemy();
            }

            _hitPoints = 100;
        }
        else
        {
            if (attacker._faction == Faction.PLAYER)
            {
                PlayerScore.instance.OnHitEnemy();
            }
        }
        if (OnHitEvent != null)
        {
            OnHitEvent();
        }

        OnHitAdditional();
    }
Пример #25
0
    private void OnDeath(Killable entity)
    {
        if (!isAlive)
        {
            return;
        }

        isAlive = false;

        if (Game.instance.finishedTutorial)
        {
            Game.instance.RunEnded(false);
        }

        commonComponents.animator.Play("Death");

        Invoke("DeathSFX", 0.75f);
        Invoke("TransitionAfterDelay", 2.5f);
    }
Пример #26
0
        protected override void CreateComponents()
        {
            base.CreateComponents();
            _abilitiable  = new Abilitiable(this);
            _armorable    = new Armorable(this);
            _healthable   = new Healthable(this);
            _magicable    = new Magicable(this);
            _teamable     = new Teamable(this);
            _attackerable = new Attackerable(this, _teamable);
            var agent    = GetComponent <NavMeshAgent>();
            var obstacle = GetComponent <NavMeshObstacle>();

            _movable       = new Movable(this, agent, obstacle);
            _targetable    = new Targetable(this);
            _killable      = new Killable(this);
            _damageTarget  = new Damageable(this, _healthable, _killable, _armorable);
            _modifiable    = new Modifiable(this);
            _inventoryable = new Inventoryable <IItem>(this, new LimitedInventory <IItem>(6));
            _healable      = new Healable(this, _healthable);
        }
Пример #27
0
    void Explode(GameObject[] targets)
    {
        foreach (GameObject target in targets)
        {
            Killable kill = target.GetComponent <Killable>();
            if (kill)
            {
                kill.Damage(damage);
            }
        }

        Instantiate(explodeParticles, transform.position, Quaternion.identity);

        Killable self = GetComponent <Killable>();

        if (self)
        {
            self.Die();
        }
    }
Пример #28
0
    private void OnDamage(Killable sender, Vector3 position, Vector3 normal, GameObject attacker)
    {
        if (!hasBeenShot)
        {
            hasBeenShot = true;

            for (var i = 0; i < GroupCount; i++)
            {
                var fromPoint = transform.position + Random.onUnitSphere * SpawnDistance;
                var rotFacing = Quaternion.LookRotation(fromPoint - transform.position);
                for (var j = 0; j < GroupMemberCount; j++)
                {
                    var spawner = Instantiate(SpawnerPrefab);
                    spawner.Shifter = Shiftable;
                    spawner.transform.position = fromPoint + rotFacing * Formations.GetArrowOffset(j, 5f);
                    spawner.Spawn(i * 1.5f + Random.Range(0.2f, 0.5f));
                }
            }
        }
    }
Пример #29
0
    // Update is called once per frame
    void Update()
    {
        //Move shot towards target
        transform.position += (Target - transform.position).normalized * (Speed * Time.deltaTime);

        //Damage if shot lands and destroy shot object
        if (Vector3.Distance(transform.position, Target) < CheckDistance)
        {
            Collider[] victims = Physics.OverlapSphere(transform.position, Radius, LayerMask.GetMask("Enemies"));

            foreach (Collider victim in victims)
            {
                Killable victimKillable = victim.gameObject.GetComponent <Killable> ();

                victimKillable.Damage(Damage);
            }

            Destroy(gameObject);
        }
    }
Пример #30
0
        public override IEnumerable <Relation <Object, PrefabEventType> > GetRelations(Object entity)
        {
            var asGameObject = entity as GameObject;

            Killable asKillable = (asGameObject != null) ? asGameObject.GetComponent <Killable>() : entity as Killable;

            if (asKillable != null)
            {
                foreach (PrefabEventType type in System.Enum.GetValues(typeof(PrefabEventType)))
                {
                    if ((includeEvents & type) == 0)
                    {
                        continue;
                    }

                    var handler = prefabEventData[type];
                    if (handler.useSpecific(asKillable))
                    {
                        var prefabTransform = handler.getSpecificPrefab(asKillable);
                        if (prefabTransform != null)
                        {
                            yield return(new Relation <Object, PrefabEventType>(entity, prefabTransform.gameObject, type));
                        }
                    }
                    else if (handler.usePool(asKillable))
                    {
                        var pool = LevelSettings.GetFirstMatchingPrefabPool(handler.getPoolName(asKillable));
                        if (pool == null)
                        {
                            continue;
                        }

                        foreach (var item in pool.poolItems)
                        {
                            yield return(new Relation <Object, PrefabEventType>(entity, item.prefabToSpawn.gameObject, type));
                        }
                    }
                }
                yield break;
            }
        }
Пример #31
0
    void ApplyHit(GameObject collider)
    {
        Killable targetKillable = collider.GetComponentInParent <Killable>();

        if (targetKillable != null && targetKillable.gameObject.layer != gameObject.layer && !mEnemiesHit.Contains(targetKillable))
        {
            // If the victim was the player & the player has a mirror shield, reflect!
            if (targetKillable.gameObject.layer == LayerMask.NameToLayer("Player"))
            {
                if (Game.instance.playerStats.IsItemEquipped <MirrorShield>())
                {
                    MirrorShield shield = Game.instance.playerStats.GetComponentInChildren <MirrorShield>();
                    shield.Reflect(this);
                    return;
                }
            }

            CharacterStatistics stats = targetKillable.GetComponent <CharacterStatistics>();
            int defense = stats == null ? 0 : stats.ModifiedStatValue(CharacterStatType.Defense, targetKillable.gameObject);
            int damage  = strength * 4 - defense * 2;
            mEnemiesHit.Add(targetKillable);

            targetKillable.TakeDamage(null, damage, DamageReason.Projectile);

            if (destroyOnEnemyHit)
            {
                Destroy(gameObject);

                PlayHitVFX();
            }
        }
        else
        {
            if (destroyOnEnvironmentHit)
            {
                Destroy(gameObject);

                PlayHitVFX();
            }
        }
    }
Пример #32
0
    public void Update()
    {
        if (target == null)
        {
            GetNearbyTarget();
        }
        else
        {
            timeCount += Time.deltaTime;
            if (timeCount > timeToResetTarget)
            {
                timeCount = 0;
                target    = null;
                GetNearbyTarget();
                print("TARGET RESETTED");
            }
        }

        //if( currentTarget == null ) return;
        UpdateMovement();
    }
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.GetInstanceID() == transform.parent.gameObject.GetInstanceID())
        {
            //print("didn't add " + other.gameObject.ToString() + " because i'm " + transform.parent.gameObject.ToString());
            return;
        }

        Killable agent = other.gameObject.GetComponent <Killable>();

        //if (other.CompareTag(NPCTag))
        if (agent && agent.dead)
        {
            //print("ignoring dead");
        }
        else
        {
            //print("adding a " + other.ToString());
            nearbyAgents.Add(other.gameObject);
        }
    }
Пример #34
0
 public void ForceRespawn()
 {
     if (this.inForceRespawn)
     {
         return;
     }
     this.inForceRespawn = true;
     if (this.WillChangeLevels())
     {
         this.localPauseTag = ObjectUpdater.Instance.RequestPause(null);
         Killable entityComponent = this.ent.GetEntityComponent <Killable>();
         if (entityComponent != null)
         {
             entityComponent.CurrentHp = entityComponent.MaxHp;
         }
         this.ChangeLevelRespawn();
         return;
     }
     ObjectUpdater.PauseTag  pauseTag   = ObjectUpdater.Instance.RequestPause(null);
     OverlayFader.OnDoneFunc onDoneFunc = delegate()
     {
         this.inForceRespawn = false;
         pauseTag.Release();
         Killable entityComponent2 = this.ent.GetEntityComponent <Killable>();
         if (entityComponent2 != null)
         {
             Killable.DeathData deathData = new Killable.DeathData(true);
             entityComponent2.ForceDeath(0f, deathData, true);
         }
     };
     if (this._fadeOut != null)
     {
         Vector3 value = CoordinateTransformer.ToViewport("Main Camera", this.ent.WorldPosition);
         OverlayFader.StartFade(this._fadeOut, true, onDoneFunc, new Vector3?(value));
     }
     else
     {
         onDoneFunc();
     }
 }
Пример #35
0
    private void OnHit(Killable entity)
    {
        if (!mIsPrimary)
        {
            return;
        }

        int prevPhase = mCurrentPhase;

        if (CurrentTotalHealth() < totalHealth * 0.33f)
        {
            mCurrentPhase = 2;
        }
        else if (CurrentTotalHealth() < totalHealth * 0.66f)
        {
            mCurrentPhase = 1;
        }
        else
        {
            mCurrentPhase = 0;
        }

        if (prevPhase == mCurrentPhase)
        {
            return;
        }

        if (mCurrentPhase == 0)
        {
            Game.instance.hud.bossHealth.fullImage.color = new Color(121 / 255.0f, 100 / 255.0f, 64 / 255.0f);
        }
        else if (mCurrentPhase == 1)
        {
            Game.instance.hud.bossHealth.fullImage.color = new Color(1, 1, 0);
        }
        else
        {
            Game.instance.hud.bossHealth.fullImage.color = new Color(1, 0, 0);
        }
    }
Пример #36
0
    private void Update()
    {
        mLateUpdateProcessed = false;

        Killable killable = KillableMap.instance.KillableAtWorldPosition(transform.position);

        if (killable != null && killable.gameObject.layer == LayerMask.NameToLayer("Player"))
        {
            mInAnyLava = true;

            mTimer += Time.deltaTime;
            if (mTimer > 0.75f)
            {
                if (!Game.instance.playerStats.IsItemEquipped <IronBoots>())
                {
                    killable.TakeDamage(gameObject, 5, DamageReason.Trap);
                }

                mTimer = 0f;
            }
        }
    }
 void Awake()
 {
     _healthHandler    = GetComponent <Killable>();
     player            = GameObject.Find("Ship");
     heightChangeTimer = 5.0f;
     speed             = player.GetComponent <Ship> ().ShipSpeed;
     _ship             = player.GetComponent <Ship> ();
     //speed = 0.05f;
     heightAscent        = randomOffset(-2, -1);
     _closenessThreshold = randomOffset(2, 4);
     //currentHealth = 25;
     _spriteFeedback.SetActive(false);
     targeted   = false;
     isChasing  = true;
     _rigidBody = gameObject.GetComponent <Rigidbody2D> ();
     //####Changes
     eLOS = Instantiate(eLOS, transform.position, Quaternion.identity) as GameObject;
     eLOS.GetComponent <LineOfSight>().setAssigned(gameObject);
     eLOS.SetActive(false);
     _healthHandler.Health        = currentHealth;
     _healthHandler.MaximumHealth = currentHealth;
 }
Пример #38
0
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();

        Killable killable = (Killable)target;

        if (Application.isPlaying)
        {
            if (GUILayout.Button("Kill"))
            {
                killable.Kill();
            }
            if (GUILayout.Button("¨Destroy"))
            {
                killable.Destroy();
            }
            if (GUILayout.Button("Resurrect"))
            {
                killable.Resurrect();
            }
        }
    }
Пример #39
0
    private void OnTriggerEnter(Collider collision)
    {
        if (timeCount < 1f)
        {
            return;
        }

        ExplosionObject explosion = ObjectPool.instance.GetExplosionObject();

        explosion.transform.position = transform.position;
        explosion.Live();

        Killable killable = Target.GetComponent <Killable> ();

        if (killable != null)
        {
            //Cause damage
            killable.OnHit(500, _Owner);
        }

        Destroy(gameObject);
    }
Пример #40
0
    public virtual void Initialize(BattleCenter battleCenter, Bigship _owner)
    {
        targetNavWaypoint = new List <GameObject> ();
        possibleTargets   = new List <Killable> ();
        target            = null;
        targetTransform   = null;
        // for demo only - i've varied the sensitivity and speed so that they react/behave differently
        // in a game situation, where you want to target the other enemies, you'll have to
        // set the speed to the same as the player to make it work, unless you provide the player
        // with controls to change speed.
        actualSensitivity   = Random.Range(actualSensitivity - .2f, actualSensitivity + .2f);
        originalSensitivity = actualSensitivity;

        speed = Random.Range(speed - 5f, speed + 5f);

        targetLight.enabled = false;

        this.battleCenter = battleCenter;

        this._owner = _owner;

        CreateField();
    }
Пример #41
0
    public static Killable FindNearest(Team team, Vector3 fromPosition, float maxDistance)
    {
        Killable target = null;

        if (targetables.ContainsKey(team))
        {
            var targetCandidates = targetables[team];
            if (targetCandidates.Any())
            {
                var smallestDistanceSquared = maxDistance * maxDistance;
                foreach (var candidate in targetCandidates)
                {
                    var toTarget = candidate.transform.position - fromPosition;
                    if (toTarget.sqrMagnitude < smallestDistanceSquared)
                    {
                        smallestDistanceSquared = toTarget.sqrMagnitude;
                        target = candidate;
                    }
                }
            }
        }
        return(target);
    }
Пример #42
0
    private Killable FindFarestEnemyToAttack()
    {
        Killable result      = null;
        int      maxProgress = 0;

        foreach (Killable unit in GameController.units)
        {
            if (!unit.isKilling && unit.color != color)
            {
                if ((Mathf.Pow(mapPosition.x - unit.mapPosition.x, 2) + Mathf.Pow(mapPosition.y - unit.mapPosition.y, 2)
                     <= Mathf.Pow(attackRange + 0.1f, 2)))
                {
                    if (maxProgress < unit.roadProgress)
                    {
                        maxProgress = unit.roadProgress;
                        result      = unit;
                    }
                }
            }
        }

        return(result);
    }
Пример #43
0
    private void OnHit(Killable entity)
    {
        if (!string.IsNullOrEmpty(activationCinematicEvent) && !mActivationCinematicEventFired)
        {
            if (playSound)
            {
                Game.instance.soundManager.PlaySound("boss_intro");
            }

            mActivationCinematicEventFired = true;
            Game.instance.cinematicDirector.PostCinematicEvent(activationCinematicEvent);

            Vector3 dir = Game.instance.avatar.transform.position - transform.position;
            dir.y = 0f;
            if (Mathf.Abs(dir.x) > Mathf.Abs(dir.y))
            {
                dir.y = 0f;
            }
            else
            {
                dir.x = 0f;
            }
            dir.Normalize();

            SimpleMovement.OrientToDirection(GetComponentInChildren <Animator>().gameObject, dir);
        }

        if (enemyMeleeController != null)
        {
            enemyMeleeController.enabled = true;
        }

        if (enemyProjectileController != null)
        {
            enemyProjectileController.enabled = true;
        }
    }
Пример #44
0
    private void CorpseExplode(Killable sender)
    {
        if (ExplosionPrefab != null)
        {
            var explodeInstance = ResourcePoolManager.GetAvailable(ExplosionPrefab, rBody.position, rBody.rotation);
            explodeInstance.transform.localScale = transform.localScale;
            var explodeShiftable = explodeInstance.GetComponent<Shiftable>();

            if (explodeShiftable != null)
                explodeShiftable.SetShiftPosition(Universe.Current.GetUniversePosition(rBody.position));
        }

        if (DebrisPrefab != null)
        {
            var debrisInstance = (GameObject)Instantiate(DebrisPrefab, rBody.position, rBody.rotation);
            var rBodies = debrisInstance.GetComponentsInChildren<Rigidbody>();
            foreach (var debrisrBody in rBodies)
            {
                debrisrBody.velocity = rBody.velocity;
                debrisrBody.AddExplosionForce(200f, transform.position, 20f, 0f, ForceMode.Impulse);
                var debrisShiftable = debrisrBody.GetComponent<Shiftable>();
                debrisShiftable.SetShiftPosition(Universe.Current.GetUniversePosition(debrisrBody.position));
            }
        }

        if (SmokeInstance != null)
        {
            SmokeInstance.transform.parent = null;
            var woundParticles = SmokeInstance.GetComponent<ParticleSystem>();
            if (woundParticles != null)
                woundParticles.Stop();
            StartCoroutine(DelayedSmokeDestroy(woundParticles.duration + 0.5f));
        }

        Destroy(gameObject);
    }
Пример #45
0
    void DamageAllKillablesNearPlayer()
    {
        if (KillableMap.instance == null)
        {
            return;
        }

        List <Killable> allKillables = KillableMap.instance.allKillables;

        for (int i = 0; i < allKillables.Count; ++i)
        {
            Killable killable = allKillables[i];
            if (killable.gameObject == Game.instance.avatar.gameObject)
            {
                continue;
            }

            float distance = Vector3.Distance(Game.instance.avatar.transform.position, killable.transform.position);
            if (distance < 4f)
            {
                killable.TakeDamage(gameObject, 1, DamageReason.Spell);
            }
        }
    }
Пример #46
0
 private void SquadronMember_OnDie(Killable sender)
 {
     PlayerController.Current.ResetThreatCooldown();
     // This should on refresh the current squadron member's icon.
     HeadsUpDisplay.Current.RefreshSquadronIcons();
     sender.OnDamage -= SquadronMember_OnDamage;
     sender.OnDie -= SquadronMember_OnDie;
     var shieldRegenerator = sender.GetComponent<ShieldRegenerator>();
     if (shieldRegenerator != null)
         shieldRegenerator.OnRegenerate -= SquadronMember_OnRegenerate;
 }
Пример #47
0
 private void SquadronMember_OnDamage(Killable sender, Vector3 position, Vector3 normal, GameObject attacker)
 {
     if (PlayerController.Current.VehicleInstance != null)
     {
         if (attacker == PlayerController.Current.VehicleInstance.gameObject)
         {
             var member = sender.GetComponent<Vehicle>().Controller.GetComponent<Fighter>();
             var profile = member.GetComponent<ShipProfile>();
             CommMessaging.Current.ShowMessage(attacker, profile.CallSign, GetFriendlyFireMessage(PlayerController.Current.GetCallSign(), profile.CallSign));
         }
     }
     // This should on refresh the current squadron member's icon.
     HeadsUpDisplay.Current.RefreshSquadronIcons();
 }
Пример #48
0
    private void Update()
    {
        isFiring = false;
        if (IsLive)
        {
            HideMuzzle();
            if (reconsiderCooldown > 0)
                reconsiderCooldown -= Time.deltaTime;

            if (Vector3.Distance(agent.destination, transform.position) < 0.05f)
            {
                reconsiderCooldown = -1f;
                //animationControl.CrossFade("Idle");
            }
            else
            {
                //animationControl.animation["Walk"].speed = agent.velocity.magnitude / WalkVelAnimCoeff;
                //animationControl.CrossFade("Walk");
            }

            if (target != null)
            {
                var toTarget = target.GetTargetPoint() - transform.position;
                var destination = target.transform.position;

                if ((transform.position - agent.destination).sqrMagnitude < ShootDistance*ShootDistance)
                {
                    var toTargetPosition = target.transform.position - transform.position;

                    RaycastHit sightHit;
                    var sightRay = new Ray(transform.position + toTargetPosition.normalized * 0.8f, toTargetPosition.normalized);
                    Physics.Raycast(sightRay, out sightHit);

                    if (sightHit.collider != null)
                    {
                        if (sightHit.collider.name == "Player")
                        {
                            //Debug.Log("I SEE YOU");
                            if (toTarget.sqrMagnitude > StopDistance*StopDistance)
                            {
                                destination = target.transform.position - StopDistance*toTargetPosition.normalized;
                                agent.destination = destination;
                            }
                            else
                            {
                                agent.destination = transform.position;
                            }
                        }
                    }
                }

                if (reconsiderCooldown < 0)
                {
                    reconsiderCooldown = ReconsiderRate;

                    var toTargetPosition = target.transform.position - transform.position;
                    RaycastHit sightHit;
                    var sightRay = new Ray(transform.position + toTargetPosition.normalized * 0.8f, toTargetPosition.normalized);

                    Physics.Raycast(sightRay, out sightHit);

                    if (sightHit.collider != null)
                    {
                        if (sightHit.collider.name == "PlayerCollider")
                            destination = target.transform.position - StopDistance*toTarget.normalized;
                    }
                    agent.destination = destination;
                }

                // Shooting
                var aimDirection = Quaternion.LookRotation(target.GetTargetPoint() - primaryWeapon.ShootPoint.position);

                if (toTarget.magnitude < ShootDistance)
                {
                    var yawDiff = Mathf.DeltaAngle(aimDirection.eulerAngles.y, transform.rotation.eulerAngles.y);
                    if (Mathf.Abs(yawDiff) < AimAngleTolerance)
                    {
                        // Do not shoot if ally in way
                        var shootRay = new Ray(primaryWeaponShootPoint.position, aimDirection * new Vector3(0, 0, 1));
                        RaycastHit shootHit;
                        var dontShoot = false;
                        if (Physics.Raycast(shootRay, out shootHit))
                        {
                            if (shootHit.collider.name != "EnemyCollider")
                                dontShoot = true;
                        }

                        if (dontShoot)
                        {
                            //animationControl.CrossFade("Shoot");
                            primaryWeapon.TriggerShoot(aimDirection);
                        }
                    }
                }
            }
            else
            {
                target = FindTarget();
            }

            // Animation
            Debug.Log(agent.velocity.normalized.magnitude);
            enemyAnimator.SetFloat("Speed", Mathf.Clamp(agent.velocity.normalized.magnitude, 0f, 1f));
            enemyAnimator.SetFloat("ForwardBackward", Mathf.Clamp(agent.velocity.normalized.z, -1f, 1f));
            enemyAnimator.SetFloat("LeftRight", Mathf.Clamp(agent.velocity.normalized.x, -1f, 1f));
            enemyAnimator.SetBool("IsFiring", isFiring);
            
            UpdateKillable();
        }
    }
Пример #49
0
 private void AsteroidField_OnDie(Killable sender)
 {
     // TODO: This isn't perfect, whenever an asteroid is destroyed a new one will be respawned,
     // really the asteroid should just be hidden and reset when it falls out of the range
     MakeAvailable(sender.gameObject);
 }
Пример #50
0
 private void OnSpawnedDie(Killable sender)
 {
     _liveCount--;
     Debug.Log("SPAWNED DIED!");
 }
 public virtual void DestroyingKillable(Killable deadKillable)
 {
     // your code here.
 }
 private void RemoveTarget(Killable target)
 {
     _targets.Remove(target);
 }
Пример #53
0
    public override void TakingDamage(int pointsDamage, Killable enemyHitBy)
    {
        base.TakingDamage(pointsDamage, enemyHitBy);

        // your code here.
    }
 void Start()
 {
     body = GetComponent<SpaceGravityBody> ();
     killable = GetComponent<Killable> ();
     characterController = GetComponent<CharacterController> ();
     attackController = GetComponent<CharacterAttackController> ();
     GameObject attack = GameObject.Find("skillAttack");
     initializePlayerRotation ();
     bpAnimator = animationBigPappada.GetComponent<Animator>();
     pappadaC = pappada.GetComponent<PappadaController> ();
     flyParticles = flyingParticles.GetComponent<ParticleSystem> ();
     getHurtBigPappada = GameObject.Instantiate (getHurtBigPappadaPrefab) as GameObject;
     initializeVariables ();
     StartCoroutine ("resetWeaponTrail");
 }
Пример #55
0
 private void OnHit(Killable entity)
 {
     SwitchPhaseIfNecessary();
 }
Пример #56
0
 private void Awake()
 {
     killable = GetComponent<Killable>();
     killable.OnDamage += OnKillableDamage;
 }
Пример #57
0
 private void PlayerController_OnDie(Killable sender)
 {
     _noThreatCooldown = NoThreatTime;
     _deathCooldown = DeathOptionTime;
     _lastDeathUniversePosition = new UniversePosition(_playVehicleInstance.Shiftable.UniversePosition.CellIndex, _playVehicleInstance.Shiftable.UniversePosition.CellLocalPosition);
     Debug.Log("PLAYER VEHICLE DESTROYED AT: " + _lastDeathUniversePosition.CellIndex);
     HeadsUpDisplay.Current.RefreshSquadronIcon(0);
     HeadsUpDisplay.Current.TriggerCrosshairFadeOut();
 }
 public virtual void WaitingToDestroyKillable(Killable deadKillable)
 {
     // your code here;
 }
Пример #59
0
 // Use this for initialization
 void Start()
 {
     killable = GetComponent<Killable> ();
 }
Пример #60
0
 private void PlayerController_OnDamage(Killable sender, Vector3 position, Vector3 normal, GameObject attacker)
 {
     HeadsUpDisplay.Current.Hit();
     Universe.Current.ViewPort.GetComponent<VehicleCamera>().TriggerShake(0.3f, 0.7f, 0.1f);
     HeadsUpDisplay.Current.RefreshSquadronIcon(0);
     if (VehicleInstance.Killable.Shield > 0f)
     {
         HeadsUpDisplay.Current.TriggerShieldHit();
     }
     else
     {
         HeadsUpDisplay.Current.TriggerHealthHit();
     }
 }