Пример #1
0
 void FixedUpdate()
 {
     Timer++;
     TickTimer++;
     if (TickTimer >= Speed)
     {
         Score        += 10;
         scoretxt.text = "Score: " + Score.ToString();
         lvltxt.text   = "Level: " + Level.ToString();
         DeathManager();
         SoundManager.GetComponent <SoundManager>().PlaySound(SoundManager.GetComponent <SoundManager>().timeTick);
         TickTimer = 0;
     }
     if (Timer == LevelUpSpeed)
     {
         if (Speed > MaxSpeed)
         {
             Speed -= 2;
             Fish.GetComponent <AttackMonster>().Speed     = Speed;
             Bear.GetComponent <AttackMonster>().Speed     = Speed;
             IceBlock.GetComponent <AttackMonster>().Speed = Speed;
         }
         if (Rand > MaxRandom && Speed % 4 == 0)
         {
             Fish.GetComponent <AttackMonster>().Rand     = Rand;
             Bear.GetComponent <AttackMonster>().Rand     = Rand;
             IceBlock.GetComponent <AttackMonster>().Rand = Rand;
         }
         Score += 200;
         Level++;
         Timer = 0;
         SoundManager.GetComponent <SoundManager>().PlaySound(SoundManager.GetComponent <SoundManager>().speedUp);
     }
 }
 // Use this for initialization
 void Awake()
 {
     firstAbility  = new Icicle();
     secondAbility = new IceBlock();
     thirdAbility  = new FrostCone();
     stats         = GetComponent <PlayerWizardStatsTest>();
 }
Пример #3
0
 public static void IceBlock_OnPlayer(On.Celeste.IceBlock.orig_OnPlayer orig, IceBlock self, Player player)
 {
     // If not immune, or the mode isn't set to cold, die
     if (!Immune || Mode == CoreSpirit.SpiritMode.Hot)
     {
         orig(self, player);
     }
 }
Пример #4
0
    void OnTriggerStay2D(Collider2D other)
    {
        if (explosionDone)
        {
            return;
        }

        Target target = other.gameObject.GetComponent <Target> ();

        if (target == null || target.Allegiance == mSource.Allegiance)
        {
            return;
        }

        int damage = (int)WeaponStats.GetStat(WeaponType.IceWand, WeaponStat.Damage);

        if (target is Tower)
        {
            return;
        }

        if (!(target is Unit))
        {
            return;
        }

        // assuming that the target is a Unit

        IceBlock f = other.gameObject.GetComponent <IceBlock> ();

        // do not retarget frozen units
        if (f != null)
        {
            return;
        }

        Unit unit = (Unit)target;

        for (int i = unit.Squad.SquadMembers.Count - 1; i >= 0; --i)
        {
            Unit u = unit.Squad.SquadMembers[i];

            u.gameObject.AddComponent("IceBlock");
            f = u.gameObject.GetComponent <IceBlock> ();
            f.Freeze(u);

            u.Damage(damage);
            if (u.IsDead)
            {
                f.Unfreeze();
            }

            if (u.IsDead && mSource.Allegiance == Allegiance.Rodelle)
            {
                UnitStats.AddToExperience(mSource.UnitType, 1);
            }
        }
    }
Пример #5
0
    public void AddBlock(IceBlock i_iceblock)
    {
        m_iceBlocks.Add(i_iceblock);
        i_iceblock.transform.parent = transform;

        //UpdateMatchedBlocks();

        i_iceblock.transform.position += new Vector3(0,0,offset);
        offset -= 0.0001f;
    }
Пример #6
0
        private void HandleSolidBlockCollision(Block collidingBlock)
        {
            _hasLandedOnBlock      = true;
            _isSmashingSmashBlocks = false;

            if (collidingBlock.HasBeenLandedOnSquarely(WorldPosition))
            {
                _motionEngine.PlayerIsOnGround = true;
                _didNotLandSafely = false;

                if (_motionEngine.Delta.Y > 0)
                {
                    WorldPosition -= new Vector2(0.0f, WorldPosition.Y - (collidingBlock.TopSurfaceY - Body_Collision_Radius));
                    bool specialBlock = false;

                    SpringBlock launcher = collidingBlock as SpringBlock;
                    if (launcher != null)
                    {
                        HandleSpringBlockLaunch(launcher); specialBlock = true;
                    }

                    if (!specialBlock)
                    {
                        IceBlock ice = collidingBlock as IceBlock;
                        if (ice != null)
                        {
                            HandleIceBlockImpact(); specialBlock = true;
                        }
                    }

                    if (!specialBlock)
                    {
                        BombBlock bomb = collidingBlock as BombBlock;
                        if (bomb != null)
                        {
                            HandleBombBlockImpact(bomb);
                        }
                    }
                }
            }
            else if ((CornerHasBeenClipped(collidingBlock.LeftSurfaceX, collidingBlock.TopSurfaceY)) ||
                     (CornerHasBeenClipped(collidingBlock.RightSurfaceX, collidingBlock.TopSurfaceY)))
            {
                _hasLandedOnBlock = false;
            }
            else if ((FacingAwayFromBlock(collidingBlock)) && (WorldPosition.Y < collidingBlock.WorldPosition.Y))
            {
                if (Math.Abs(WorldPosition.X - (collidingBlock.WorldPosition.X + (collidingBlock.CollisionBoundingBox.Width / 2.0f))) < Rear_Edge_Clip_Tolerance)
                {
                    _motionEngine.PlayerIsOnGround = true;
                }
                _didNotLandSafely = false;
            }
        }
Пример #7
0
 public void IceMelt()
 {
     Gimmick[] gimmicks = gameTask.GetGimmcks(new Utility.ObjectId[] { Utility.ObjectId.IceBlock });
     foreach (Gimmick gimmick in gimmicks)
     {
         IceBlock ice = gimmick.gameObject.GetComponent <IceBlock>();
         if (ice.MeltMoveIf(Utility.PositionToData(transform.position), Utility.PositionToData(ice.transform.position)))
         {
             gameTask.moveObjectTask.MoveObject(ice.MeltMove(ice.gameObject.transform.position), true);
         }
     }
 }
Пример #8
0
 void Start()
 {
     SoundManager.GetComponent <SoundManager>().PlaySound(SoundManager.GetComponent <SoundManager>().Start);
     SoundManager.GetComponent <SoundManager>().PlayMusic();
     Speed = StartSpeed;
     Rand  = StartRandom;
     Fish.GetComponent <AttackMonster>().Rand      = Rand;
     Bear.GetComponent <AttackMonster>().Rand      = Rand;
     IceBlock.GetComponent <AttackMonster>().Rand  = Rand;
     Fish.GetComponent <AttackMonster>().Speed     = Speed;
     Bear.GetComponent <AttackMonster>().Speed     = Speed;
     IceBlock.GetComponent <AttackMonster>().Speed = Speed;
 }
Пример #9
0
    public virtual void Eat(IceBlock iceBlock)
    {
        if (iceBlock.GetFishType() == FoodType)
        {
            Debug.Log("F*****g good.");
            GameManager.GetInstance().AddScore(10);
        }
        else{
            Debug.Log("Wrong bitch.");
            GameManager.GetInstance().AddScore(-10);

        }
        Destroy(iceBlock.gameObject);
    }
Пример #10
0
    protected override void OnCollision(Collider2D _collider)
    {
        IceBlock _iceBlock = _collider.GetComponent <IceBlock>();

        ShakeEffect _camera = Camera.main.GetComponent <ShakeEffect>();

        _camera.Shake(0.05f, 0.2f);

        if (_iceBlock)
        {
            Destroy(_iceBlock.gameObject);
        }

        DestroyParticle();
    }
Пример #11
0
    private void OnSpearHit(Collider2D col)
    {
        if (col == null)
        {
            return;
        }
        Astronaut en  = col.GetComponent <Astronaut>();
        Vector2   vec = new Vector2((this.transform.position.x - lastposition.x), (this.transform.position.y - lastposition.y));

        if (en != null)
        {
            //if (col.isTrigger) return;
            en.TakeDamage(30f, vec * 1f);
            if (en.Alive)
            {
                if (Astronaut.AggressionLevel > 0)
                {
                    en.freeze(5f * Astronaut.AggressionLevelF);
                }
                Am.am.oneshot(Am.am.M.VoidPhantom_SlashHit);
                Am.am.oneshot(Am.am.M.VoidPhantom_SlashHitMelee);
            }


            ParticleSystem p = GameObject.Instantiate(PierceParticles, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            GameObject.Destroy(p.gameObject, 1f);

            return;
        }
        IceBlock ib = col.GetComponentInParent <IceBlock>();

        if (ib != null)
        {
            //be.TakeDamage(Damage, vec * 1f);//Damage
            ParticleSystem p = GameObject.Instantiate(PierceParticles, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            ib.Remove();



            return;
        }



        //Collision with geometry
        //Remove();
        contact(this.transform.position);
    }
Пример #12
0
        public virtual void Remove(State state)
        {
            switch (state)
            {
            case State.Burning:
                if (Burning != null)
                {
                    Burning.On = false;
                    Burning    = null;
                }
                break;

            case State.Levitating:
                if (Levitation != null)
                {
                    Levitation.On = false;
                    Levitation    = null;
                }
                break;

            case State.Invisible:
                Alpha(1f);
                break;

            case State.Paralysed:
                paused = false;
                break;

            case State.Frozen:
                if (IceBlock != null)
                {
                    IceBlock.Melt();
                    IceBlock = null;
                }
                paused = false;
                break;

            case State.Illuminated:
                if (Halo != null)
                {
                    Halo.PutOut();
                }
                break;
            }
        }
Пример #13
0
        public void Apply(Hero hero, EntitiesManager manager)
        {
            var frostArmor  = new FrostArmor();
            var iceBlock    = new IceBlock();
            var defrosting  = new Defrosting();
            var holdTheLine = manager.SkillManager.Find("Hold the Line");

            hero.ReplaceEquipment(EquipmentName.Armor, EquipmentName.Weapon, WeaponType.Weapon_Spear);

            hero.LearnSkillEvenly(frostArmor);
            hero.LearnSkillEvenly(defrosting);
            hero.LearnSkillAt(iceBlock, 2);
            hero.UnlearnSkill(holdTheLine);

            manager.SkillManager.Stored.Add(frostArmor);
            manager.SkillManager.Stored.Add(defrosting);
            manager.SkillManager.Stored.Add(iceBlock);
        }
Пример #14
0
    void Update()
    {
        RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.zero, 0, layerMask);

        if (hit)
        {
            iceBlock = hit.collider.gameObject.transform.parent.gameObject.GetComponent <IceBlock>();
            iceBlock.barrierUnderneath = true;
        }
        else
        {
            if (iceBlock != null)
            {
                iceBlock.barrierUnderneath = false;
                iceBlock = null;
            }
        }
    }
Пример #15
0
 void DeathManager()
 {
     if (Player.GetComponent <Player>().currentPinguin == 1 &&
         Bear.GetComponent <AttackMonster>().StateLeft == 2)
     {
         Player.GetComponent <Player>().State = false;
     }
     if (Player.GetComponent <Player>().currentPinguin == 5 &&
         Bear.GetComponent <AttackMonster>().StateRight == 2)
     {
         Player.GetComponent <Player>().State = false;
     }
     if (Player.GetComponent <Player>().currentPinguin == 2 &&
         Fish.GetComponent <AttackMonster>().StateLeft == 2)
     {
         Player.GetComponent <Player>().State = false;
     }
     if (Player.GetComponent <Player>().currentPinguin == 4 &&
         Fish.GetComponent <AttackMonster>().StateRight == 2)
     {
         Player.GetComponent <Player>().State = false;
     }
     if (Player.GetComponent <Player>().currentPinguin == 3 &&
         IceBlock.GetComponent <AttackMonster>().StateIce == 3)
     {
         Player.GetComponent <Player>().State = false;
     }
     if (Player.GetComponent <Player>().State == false)
     {
         SoundManager.GetComponent <SoundManager>().PlaySound(SoundManager.GetComponent <SoundManager>().Death);
         this.GetComponent <GameMaster>().enabled        = false;
         Bear.GetComponent <AttackMonster>().enabled     = false;
         Fish.GetComponent <AttackMonster>().enabled     = false;
         IceBlock.GetComponent <AttackMonster>().enabled = false;
         Player.GetComponent <Player>().enabled          = false;
         Invoke("Pause", 2);
     }
 }
Пример #16
0
    private void CastIceWall(DamageInfo info)
    {
        if (isAOE)
        {
            Debug.LogError("NOT YET IMPLEMENTED!");
        }
        else
        {
            // create script and it to the tile object.
            IceBlock ib = info.targetTile.gameObject.AddComponent <IceBlock>();
            ib.CreateIceBlock(statusDuration, info.targetTile.position, info.targetTile.myType);

            // stun target.
            // set it to be invulnerable.
            if (info.targetTile.actor != null)
            {
                StatusEffect eff = StatusEffect.CreateEffect(StatusEffect.EffectType.Stun, 0, statusDuration);
                info.targetTile.actor.GetComponent <Actor>().AddStatusEffect(eff);

                eff = StatusEffect.CreateEffect(StatusEffect.EffectType.Invulnerable, 0, statusDuration);
                info.targetTile.actor.GetComponent <Actor>().AddStatusEffect(eff);
            }
        }
    }
Пример #17
0
        public virtual void Add(State state)
        {
            switch (state)
            {
            case State.Burning:
                Burning = Emitter();
                Burning.Pour(FlameParticle.Factory, 0.06f);
                if (Visible)
                {
                    Sample.Instance.Play(Assets.SND_BURNING);
                }
                break;

            case State.Levitating:
                Levitation = Emitter();
                Levitation.Pour(Speck.Factory(Speck.JET), 0.02f);
                break;

            case State.Invisible:
                PotionOfInvisibility.Melt(Ch);
                break;

            case State.Paralysed:
                paused = true;
                break;

            case State.Frozen:
                IceBlock = IceBlock.Freeze(this);
                paused   = true;
                break;

            case State.Illuminated:
                GameScene.Effect(Halo = new TorchHalo(this));
                break;
            }
        }
Пример #18
0
 private bool IsConnected(IceBlock i_A,IceBlock i_B)
 {
     return ( Mathf.Abs(i_A.transform.position.y-i_B.transform.position.y) <= minDistanceY
             && Mathf.Abs(i_A.transform.position.x-i_B.transform.position.x) <= minDistanceX );
 }
Пример #19
0
    public void OnTriggerStay2D(Collider2D collision)
    {
        if (IsFlamePatch)
        {
            FlameBar fb = collision.gameObject.GetComponent <FlameBar>();
            if (fb != null)
            {
                if (fb.IsFlamePatch)
                {
                    if (fb.StartTime > this.StartTime)
                    {
                        Remove();
                        Debug.Log("Flame Patch override");
                    }
                }
                return;
            }
        }
        if (!FlameActive)
        {
            return;
        }
        GenericEnemy ge = collision.GetComponent <GenericEnemy>();

        if (ge != null)
        {
            ge.LastBurnTime = Time.time;

            float inc = ((120f + (400f * Astronaut.FirePowerFactor)) * Time.fixedDeltaTime * (1f / Mathf.Max(ge.Burnability, 0.0001f)));
            if (ge.burn(inc / 200f, .5f * (1f + (3f * Astronaut.FirePowerFactor))))
            {
                ge.BurnDirection = ((int)Mathf.Sign(this.transform.forward.x));
                if (ge.BurnDirection == 0)
                {
                    ge.BurnDirection = 1;
                }
                //SingeSound.PlayOneShot(Am.am.M.LavaBurn, 1f);
            }
            if (!ge.AnchoredToVine)
            {
                Rigidbody2D rb = ge.gameObject.GetComponent <Rigidbody2D>();
                if (rb != null)
                {
                    rb.AddForce(new Vector2(this.transform.forward.x, this.transform.forward.y).normalized * 50f * (Astronaut.FirePowerFactor));
                    //Move the object if necessary.
                }
            }
            if (ge.isIncinerating())
            {
                if (ge is IcePillar)
                {
                    (ge as IcePillar).Remove();
                    Am.am.oneshot(Am.am.M.MeltSound);
                }
                Am.am.oneshot(Am.am.M.LavaBurn, IsFlamePatch?.1f : 1f);
            }
            //ge.TakeDamage(, this.transform.forward*0.001f);

            SingeSound.PlayOneShot(SingeSound.clip, IsFlamePatch ? .1f : 1f);
        }
        MeltableIceWall me = collision.GetComponent <MeltableIceWall>();

        if (me != null)
        {
            if (me.MeltParticles != null)
            {
                me.MeltParticles.Emit(1);
            }

            me.TakeDamage((120f + (400f * Astronaut.FirePowerFactor)) * Time.fixedDeltaTime, this.transform.forward * 0.001f);
            SingeSound.PlayOneShot(SingeSound.clip, .4f);
        }
        BreakableIceWall bw = collision.GetComponent <BreakableIceWall>();

        if (bw != null)
        {
            bw.TakeDamage((80f + (160f * Astronaut.FirePowerFactor)) * Time.fixedDeltaTime, this.transform.forward * 0.001f);
            SingeSound.PlayOneShot(SingeSound.clip, .2f);
        }
        BurnableLog bl = collision.GetComponent <BurnableLog>();

        if (bl != null)
        {
            bl.TakeDamage((80f + (400f * Astronaut.FirePowerFactor)) * Time.fixedDeltaTime, this.transform.forward * 0.001f);
            SingeSound.PlayOneShot(SingeSound.clip, .2f);
        }
        VoidGolem vg = collision.GetComponent <VoidGolem>();

        if ((vg != null) && (vg.VoidElementType == VoidGolem.VoidElement.Ice))
        {
            if (vg.Ice_FreezingSkinActive)
            {
                float dps = ((40f + (400f * Astronaut.FirePowerFactor)) * Time.fixedDeltaTime);
                vg.SkinMeltingParticles.Emit(1);
                if (vg.IceSkinHealth <= dps)
                {
                    vg.IceSkinHealth = 0f;
                    vg.meltSkinOff();
                    Am.am.oneshot(Am.am.M.MeltSound);
                }
                else
                {
                    vg.IceSkinHealth = vg.IceSkinHealth - dps;

                    SingeSound.PlayOneShot(SingeSound.clip, .2f);
                }
            }

            //vg.TakeDamage(, this.transform.forward * 0.001f);
        }


        IceShard ic = collision.GetComponent <IceShard>();

        if (ic != null)
        {
            ic.transform.localScale = (ic.transform.localScale * (.1f + (.85f * (1f - FirePowerLevel))));
            ic.Live    = false;
            ic.Melting = true;
            SingeSound.Play();
            if (ic.transform.localScale.magnitude <= .1f)
            {
                Am.am.oneshot(Am.am.M.MeltSound);
                GameObject.Destroy(ic.gameObject);
            }
        }

        IceBlock ib = collision.GetComponent <IceBlock>();

        if (ib != null)
        {
            ib.Remove();
            SingeSound.Play();
            //
            //SingeSound.Play();
            ib.transform.localScale = (ib.transform.localScale * .5f);
            if (ib.transform.localScale.magnitude <= .1f)
            {
                Am.am.oneshot(Am.am.M.MeltSound);
                ib.Remove();
                //GameObject.Destroy(ib.gameObject);
            }
        }
    }
Пример #20
0
 protected override void HitRay(IceBlock hit)
 {
     hit.Head.TickFire();
 }
Пример #21
0
    public ParticleSystem CartoonImpact;//Draw some corny start particles
    private void OnGrenadeHit(Collider2D col)
    {
        GenericEnemy en  = col.GetComponent <GenericEnemy>();
        Vector2      vec = new Vector2((this.transform.position.x - lastposition.x), (this.transform.position.y - lastposition.y));
        float        dmg = Damage;

        if ((DirectHit != null) && col.Equals(DirectHit))
        {
            dmg = (Damage + DIRECTDAMAGE);
        }
        else
        {
            float mag = (col.transform.position - ExplosionPosition).magnitude;
            dmg = (Mathf.Lerp(Damage, Damage * MINDAMAGERATIO, Mathf.Clamp01(mag / BLASTRADIUS)));
        }
        if (en != null)
        {
            //if (col.isTrigger) return;
            en.TakeDamage(dmg, vec * 1f);

            Astronaut.TheAstronaut.tickHitMarker(dmg, (en.Health / en.MaxHealth) * (en.Alive ? 1f : 0f), !en.Alive);
            explode();
            //ParticleSystem p = GameObject.Instantiate(CartoonImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            //GameObject.Destroy(p.gameObject, 1f);

            return;
        }
        IceBlock ib = col.GetComponentInParent <IceBlock>();

        if (ib != null)
        {
            //be.TakeDamage(Damage, vec * 1f);//Damage
            //ParticleSystem p = GameObject.Instantiate(CartoonImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            ib.Remove();
            explode();
            Remove();
            //GameObject.Destroy(p.gameObject, 1f);


            return;
        }
        BossGolem    bo       = col.GetComponent <BossGolem>();
        bool         weakspot = false;
        BossWeakSpot bwsp     = col.GetComponent <BossWeakSpot>();

        if (bwsp != null)
        {
            bo       = bwsp.MyBossGolem;
            weakspot = true;
        }
        if (bo != null)
        {
            if (col.Equals(bo.MyWeakSpot))
            {
                weakspot = true;
            }
            float di = dmg;
            if (weakspot)
            {
                di = (di * 2f);
                if (di >= 1f)
                {
                    bo.CriticalHitEffect.Emit(1);
                    bo.CriticalHitEffectSub.Emit(1);
                }
                else
                {
                    bo.damagelayover = (bo.damagelayover + dmg);
                    if ((bo.damagelayover) >= 1f)
                    {
                        bo.damagelayover -= 1f;
                        bo.CriticalHitEffect.Emit(1);
                        bo.CriticalHitEffectSub.Emit(1);
                    }
                }
                bo.TakeDamage(di, vec * 1f);//Damage
            }
            else
            {
                bo.TakeDamage(dmg, vec * 1f);//Damage
            }

            explode();
            Remove();
            //Astronaut.TheAstronaut.tickHitMarker(Damage, (bo.Health / bo.MaxHealth) * (bo.Defeated ? 0f : 1f), bo.Defeated);
            //ParticleSystem p = GameObject.Instantiate(CartoonImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            //GameObject.Destroy(p.gameObject, 1f);

            return;
        }
        BreakableIceWall be = col.GetComponent <BreakableIceWall>();

        if (be != null)
        {
            be.TakeDamage(dmg, vec * 1f);//Damage
            Astronaut.TheAstronaut.tickHitMarker(dmg, (be.Health / be.MaxHealth) * (be.Alive ? 1f : 0f), !be.Alive);
            explode();
            //ParticleSystem p = GameObject.Instantiate(CartoonImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            //GameObject.Destroy(p.gameObject, 1f);
            Remove();
            return;
        }

        if (col.gameObject.CompareTag("Water"))
        {
            //Splash
            MyRigidbody.velocity = (MyRigidbody.velocity * .5f);
            Damage *= .5f;
            return;
        }


        explode();

        Remove();
    }
Пример #22
0
 protected abstract void HitRay(IceBlock hit);
Пример #23
0
    void OnTriggerEnter2D(Collider2D collider)
    {
        Scene scene = SceneManager.GetActiveScene();

        if (scene.name == "FireSlimeBoss")
        {
            if (collider.GetComponent <FusedLaser>() != null)
            {
                FusedLaser fusedLaser = collider.GetComponent <FusedLaser>();
                UnderAttack(fusedLaser.attack);
            }
            else if (collider.GetComponent <MoltenLava_FireSlime1>() != null)
            {
                MoltenLava_FireSlime1 moltenLava = collider.GetComponent <MoltenLava_FireSlime1>();
                UnderAttack(moltenLava.attack);
            }
            else if (collider.GetComponent <MoltenLava_FireSlimeBoss>() != null)
            {
                MoltenLava_FireSlimeBoss moltenLava = collider.GetComponent <MoltenLava_FireSlimeBoss>();
                UnderAttack(moltenLava.attack);
            }
            else if (collider.GetComponent <FireBall>() != null)
            {
                FireBall fireBall = collider.GetComponent <FireBall>();
                UnderAttack(fireBall.attack);
            }
            else if (collider.GetComponent <Magma_FireSlimeBoss>() != null)
            {
                Magma_FireSlimeBoss magma = collider.GetComponent <Magma_FireSlimeBoss>();
                UnderAttack(magma.attack);
            }
        }
        else if (scene.name == "IceSlimeBoss")
        {
            if (collider.GetComponent <Ice>() != null)
            {
                Ice ice = collider.GetComponent <Ice>();
                UnderAttack(ice.GetAttack());
            }

            if (collider.GetComponent <IceBullet>() != null)
            {
                IceBullet iceBullet = collider.GetComponent <IceBullet>();
                UnderAttack(iceBullet.GetAttack());
            }

            if (collider.GetComponent <IceLaser>() != null)
            {
                IceLaser iceLaser = collider.GetComponent <IceLaser>();
                UnderAttack(iceLaser.GetAttack());
            }
            if (collider.GetComponent <IceBlock>() != null)
            {
                IceBlock iceBlock = collider.GetComponent <IceBlock>();
                UnderAttack(iceBlock.attack);
            }
            if (collider.GetComponent <IceBullet_IceSlimeBoss>() != null)
            {
                IceBullet_IceSlimeBoss iceBullet = collider.GetComponent <IceBullet_IceSlimeBoss>();
                UnderAttack(iceBullet.attack);
            }
            if (collider.GetComponent <Skill2IceBullet_IceSlimeBoss>() != null)
            {
                UnderAttack(1);
            }
            if (collider.GetComponent <Skill4IceBullet>() != null)
            {
                Skill4IceBullet iceBullet = collider.GetComponent <Skill4IceBullet>();
                UnderAttack(iceBullet.attack);
            }
        }
    }
Пример #24
0
    public void DeleteBlock(IceBlock i_iceblock)
    {
        m_iceBlocks.Remove(i_iceblock);
        GameManager.GetInstance().m_specialEffectManager.PlayEffectAt(SpecialEffect.MatchedEffect, i_iceblock.transform.position);
        Destroy(i_iceblock.gameObject);

        if (m_iceBlocks.Count >= 1)
            m_iceBlocks[0].m_isBottom = true;

        //UpdateMatchedBlocks();
    }
    void FixedUpdate()
    {
        HitList.Clear();
        if (LightningTick)
        {
            //Perform a while loop that goes through the enemies in the game
            //Allow Lightning to travel through targets at a certain angle

            Collider2D[] potentialtargets = new Collider2D[0];
            Vector2      ltpos            = new Vector2(this.transform.position.x, this.transform.position.y);
            Vector2      ltdir            = new Vector2(LightningDirection.normalized.x, LightningDirection.normalized.y);

            ExitDirectionList.Clear();// = new List<Vector3>();
            int hitindex = 0;
            HitList.Add(this.gameObject);
            ExitDirectionList.Add(new Vector3(ltdir.x, ltdir.y, 0f) * 1f);//INITIALSEGMENTRANGE
            do
            {
                float le  = ((hitindex == 0) ? INITIALSEGMENTRANGE : (INITIALSEGMENTRANGE * SUBSEQUENTSEGMENTRANGERATIO));
                float wi  = ((le * Mathf.Sin(Mathf.PI * (CONEANGLE / 180f))));
                float ang = Vector2.Angle(new Vector2(1f, 0f), new Vector2(ltdir.normalized.x, ltdir.normalized.y));

                potentialtargets = Physics2D.OverlapBoxAll(ltpos + (ltdir.normalized * le * .5f), new Vector2(le, wi), ang, LayerMask.GetMask("Enemy", "Boss"));
                GameObject besttarget = null;
                float      bestdir    = 0f;
                float      bestdist   = 0f;
                float      bestdot    = 0f;
                Vector2    bestdif    = new Vector2();

                for (int i = 0; i < potentialtargets.Length; i++)
                {
                    Collider2D   colt = potentialtargets[i];
                    GenericEnemy t    = colt.gameObject.GetComponent <GenericEnemy>();
                    BossGolem    b    = colt.gameObject.GetComponent <BossGolem>();
                    GameObject   en   = null;
                    if (t != null)
                    {
                        en = t.gameObject;
                    }
                    else if (b != null)
                    {
                        en = b.gameObject;
                    }
                    else
                    {
                        continue;
                    }
                    if (HitList.Contains(en))
                    {
                        continue;
                    }

                    // else if (Breakable Ice Wall)
                    // else etc..

                    Vector2 enpos = new Vector2(en.transform.position.x, en.transform.position.y);
                    Vector2 dif   = (enpos - ltpos);
                    float   enang = (Vector2.Angle(ltdir.normalized, dif) / (CONEANGLE * .5f));
                    if ((enang <= 1f) && (dif.magnitude <= ((hitindex == 0) ? INITIALSEGMENTRANGE : (INITIALSEGMENTRANGE * SUBSEQUENTSEGMENTRANGERATIO))))
                    {
                        //Also check for LOS
                        if (Physics2D.Linecast(ltpos, enpos, LayerMask.GetMask("Geometry")).collider != null)
                        {
                            continue;
                        }
                        float dot = Vector2.Dot(ltdir.normalized, dif.normalized);
                        float dv  = (dif.magnitude / dot);
                        if ((besttarget == null) || (dv < (bestdist / bestdot)))
                        {
                            besttarget = en;
                            bestdir    = enang;
                            bestdist   = dif.magnitude;
                            bestdot    = dot;
                            bestdif    = dif;
                        }
                    }
                }

                if (besttarget != null)
                {
                    HitList.Add(besttarget);
                    ltpos = besttarget.transform.position;
                    Vector3 v = Vector3.Reflect(new Vector3(ltdir.x, ltdir.y, 0f), Vector3.Cross(new Vector3(bestdif.normalized.x, bestdif.normalized.y, 0f), Vector3.forward));
                    //* bestdif.magnitude
                    //Vector3.Slerp(new Vector3(ltdir.x,ltdir.y,0f), new Vector3(bestdif.normalized.x, bestdif.normalized.y, 0f), .5f);
                    ExitDirectionList.Add(new Vector2(v.x, v.y));
                    ltdir = new Vector2(v.x, v.y);
                    hitindex++;
                }
                else
                {
                    ExitDirectionList.Add(new Vector3(ltdir.x, ltdir.y, 0f));
                    break;
                }
            } while (true);


            if (HitList.Count > 1)
            {
                //For now, just draw a simple line chain to all of the enemies that you hit
                int          lightningarcpoints = 4;//min = 1
                Vector3[]    positions          = new Vector3[((HitList.Count - 1) * (lightningarcpoints)) + 1];
                Vector3[]    exitlist           = ExitDirectionList.ToArray();
                GameObject[] hitlist            = HitList.ToArray();
                int          i = 0;
                while (i < positions.Length)
                {
                    //Lerp the arc.
                    int   nf = ((i) % lightningarcpoints);
                    int   u  = ((i) / lightningarcpoints);
                    float f  = (((float)nf) / ((float)lightningarcpoints));

                    if (nf == 0)
                    {
                        positions[i] = hitlist[u].transform.position;
                    }
                    else
                    {
                        //Debug.Log(""+positions.Length+" "+i);
                        Vector2 sp = Random.insideUnitCircle;
                        positions[i] = Vector3.Lerp(
                            Vector3.Lerp(hitlist[u].transform.position,
                                         hitlist[u].transform.position + (exitlist[u].normalized * 1f * (hitlist[u].transform.position - hitlist[u + 1].transform.position).magnitude), f),
                            hitlist[u + 1].transform.position, f) + (new Vector3(sp.x, sp.y, 0f) * 1f) * (1f - (Mathf.Abs(f - .5f) / .5f));
                    }



                    i++;
                }


                //LightningSubdivision lsub;
                LightningRenderer.positionCount = positions.Length;
                LightningRenderer.SetPositions(positions);
                LightningRenderer.useWorldSpace = true;



                float dmgu = (UsingFlash ? FlashDamage : (DamagePerSecond * LightningTickDelta));
                for (int h = 0; h < hitlist.Length; h++)
                {
                    GameObject col = hitlist[h];

                    if (col.gameObject.Equals(this.gameObject))
                    {
                        continue;
                    }

                    GenericEnemy en  = col.GetComponent <GenericEnemy>();
                    Vector2      vec = ExitDirectionList[h];//new Vector2((this.transform.position.x - lastposition.x), (this.transform.position.y - lastposition.y));
                    if (en != null)
                    {
                        float dmg = (dmgu * (1f + (1f * (Mathf.Max(en.Health - en.MaxHealth, 0f) / 200f))));
                        //if (col.isTrigger) return;
                        en.TakeDamage(dmg, vec * 1f);
                        Astronaut.TheAstronaut.tickHitMarker(dmg, (en.Health / en.MaxHealth) * (en.Alive ? 1f : 0f), !en.Alive);
                        GameManager.TheGameManager.ignoreTutorialTip(TutorialSystem.TutorialTip.Shoot);
                        //ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                        //GameObject.Destroy(p.gameObject, 1f);
                        //Remove();
                        HitGlow.transform.position        = en.transform.position; HitGlow.Emit(1);
                        HitFlare.transform.position       = en.transform.position; HitFlare.Emit(1);
                        HitElectricity.transform.position = en.transform.position; HitElectricity.Emit(1);
                        ElectricSparks.transform.position = en.transform.position; ElectricSparks.Emit(2);
                        //if (UsingFlash)

                        //return;
                    }

                    IceBlock ib = col.GetComponentInParent <IceBlock>();
                    if (ib != null)
                    {
                        //be.TakeDamage(dmg, vec * 1f);//Damage
                        //ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                        ib.Remove();
                        //ib.Take
                        //GameObject.Destroy(p.gameObject, 1f);

                        //Remove();
                        HitGlow.transform.position        = ib.transform.position; HitGlow.Emit(1);
                        HitFlare.transform.position       = ib.transform.position; HitFlare.Emit(1);
                        HitElectricity.transform.position = ib.transform.position; HitElectricity.Emit(1);
                        ElectricSparks.transform.position = ib.transform.position; ElectricSparks.Emit(2);
                        //if (UsingFlash)
                        //return;
                    }
                    BossGolem bo = col.GetComponent <BossGolem>();
                    if (bo != null)
                    {
                        float dmg = (dmgu * (1f + (1f * (Mathf.Max(bo.Health - bo.MaxHealth, 0f) / 200f))));
                        bo.TakeDamage(dmg, vec * 1f); //Damage
                                                      //Astronaut.TheAstronaut.tickHitMarker(dmg, (bo.Health / bo.MaxHealth) * (bo.Defeated ? 0f : 1f), bo.Defeated);
                                                      //ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                                                      //GameObject.Destroy(p.gameObject, 1f);
                                                      //Remove();
                        HitGlow.transform.position        = bo.transform.position; HitGlow.Emit(1);
                        HitFlare.transform.position       = bo.transform.position; HitFlare.Emit(1);
                        HitElectricity.transform.position = bo.transform.position; HitElectricity.Emit(1);
                        ElectricSparks.transform.position = bo.transform.position; ElectricSparks.Emit(2);
                        //if (UsingFlash)
                        //return;
                    }
                    BreakableIceWall be = col.GetComponent <BreakableIceWall>();
                    if (be != null)
                    {
                        float dmg = (dmgu * (1f + (1f * (Mathf.Max(be.Health - be.MaxHealth, 0f) / 200f))));
                        be.TakeDamage(dmg, vec * 1f);//Damage
                        Astronaut.TheAstronaut.tickHitMarker(dmg, (be.Health / be.MaxHealth) * (be.Alive ? 1f : 0f), !be.Alive);
                        //ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                        //GameObject.Destroy(p.gameObject, 1f);
                        //Remove();

                        HitGlow.transform.position        = be.transform.position; HitGlow.Emit(1);
                        HitFlare.transform.position       = be.transform.position; HitFlare.Emit(1);
                        HitElectricity.transform.position = be.transform.position; HitElectricity.Emit(1);
                        ElectricSparks.transform.position = be.transform.position; ElectricSparks.Emit(2);

                        //if (UsingFlash)
                        //return;
                    }
                }
            }
            else
            {
                // if there were no successful hits, spam lightning in a general direction
                // also, perform basic lightning subdivision as a practice run.
                float   anm     = (((Random.value - .5f)) * ((Mathf.PI * 2f) * (CONEANGLE / 360f)));
                Vector3 crs     = Vector3.Cross(ltdir, Vector3.forward);
                Vector3 misspos = this.transform.position + (((new Vector3(ltdir.x, ltdir.y, 0f) * Mathf.Cos(anm)) + (crs * Mathf.Sin(anm))) * (INITIALSEGMENTRANGE));

                RaycastHit2D rhm = Physics2D.Linecast(ltpos, misspos, LayerMask.GetMask("Geometry"));
                if (rhm.collider != null)
                {
                    misspos = rhm.point;
                }

                int            additionalpoints = 5;
                List <Vector3> misslist         = new List <Vector3>();
                misslist.Add(this.transform.position);
                for (int i = 0; i <= additionalpoints; i++)
                {
                    float   f  = ((float)i / (float)additionalpoints);
                    Vector2 sp = Random.insideUnitCircle;
                    misslist.Add(Vector3.Lerp(ltpos, misspos, f) + (new Vector3(sp.x, sp.y, 0f) * 1f) * (1f - (Mathf.Abs(f - .5f) / .5f)));
                }
                Vector3[] ar = misslist.ToArray();
                LightningRenderer.SetPositions(ar);
                LightningRenderer.positionCount = ar.Length;
                LightningRenderer.useWorldSpace = true;
            }
            //Electrical Glowing
            float   maxrange = 0f;
            Vector3 lpos     = new Vector3();
            for (int o = 0; o < LightningRenderer.positionCount; o++)
            {
                Vector3 p = LightningRenderer.GetPosition(o);
                if (o > 0)
                {
                    maxrange += (lpos - p).magnitude;
                }
                lpos = p;
            }
            if (maxrange > 0f)
            {
                for (int e = 0; e < 8; e++)
                {
                    float r  = Random.value;
                    int   ri = 0;
                    lpos = new Vector3();
                    while (ri < LightningRenderer.positionCount)
                    {
                        Vector3 p = LightningRenderer.GetPosition(ri);
                        if (ri > 0)
                        {
                            float ra = (lpos - p).magnitude;
                            if (ra > 0f)
                            {
                                float re = (ra / maxrange);
                                if ((r < re))
                                {
                                    SegmentGlows.transform.position = Vector3.Lerp(lpos, p, r / re);
                                    SegmentGlows.Emit(1);
                                    break;
                                }
                                else
                                {
                                    r -= re;
                                }
                            }
                            else
                            {
                                //These two points don't count
                            }
                        }
                        lpos = p;
                        ri++;
                    }
                }
            }
            if (UsingFlash)
            {
                FlashTime = Time.time;
                GunGlow.Emit(25);
            }
            else
            {
                GunGlow.Emit(1);
            }

            LightningRenderer.enabled = true;



            //Glow effects on the arc
            float ef      = 0f;
            float elength = 0f;
            int   eindex  = 0;

            while (ef < elength)
            {
                break;
            }
        }
        else
        {
            LightningRenderer.enabled = false;
        }

        GameObject[] newlist = OldHitList;
        //if (LightningTick)
        newlist = HitList.ToArray();

        if (hitlistChanged(newlist))
        {
            //ZUNGIT
        }
        if (LightningTick)
        {
            if ((newlist.Length == 0) || (newlist.Length == 1))
            {
                if (!TeslaGunNoTarget.isPlaying)
                {
                    TeslaGunNoTarget.Play();
                    TeslaGunChangeTargets.Stop();
                    TeslaGunChangeTargets.volume = 1f;
                    TeslaGunChangeTargets.Play();
                }
                TeslaGun1Target.Stop();
                TeslaGunMoreTargets.Stop();
            }
            else if (newlist.Length == 2)
            {
                TeslaGunNoTarget.Stop();
                if (!TeslaGun1Target.isPlaying)
                {
                    TeslaGun1Target.volume = 1f;
                    TeslaGun1Target.Play();
                    TeslaGunChangeTargets.Stop();
                    TeslaGunChangeTargets.volume = 1f;
                    TeslaGunChangeTargets.Play();
                }
                TeslaGunMoreTargets.Stop();
            }
            else if (newlist.Length >= 2)
            {
                TeslaGunNoTarget.Stop();
                TeslaGun1Target.Stop();
                if (!TeslaGunMoreTargets.isPlaying)
                {
                    TeslaGunMoreTargets.volume = 1f;
                    TeslaGunMoreTargets.Play();
                    TeslaGunChangeTargets.Stop();
                    TeslaGunChangeTargets.volume = 1f;
                    TeslaGunChangeTargets.Play();
                }
            }
        }
        else
        {
        }
        OldHitList = newlist;
        //if (((Time.time - lightningticktime) >= .1f)){
        if ((LightningTick && !lastlightningtick))
        {
            TeslaGunStart.Stop();
            TeslaGunStart.Play();
        }
        else
        {
            //TeslaGunNoTarget.Stop();
        }
        //}



        if (LightningTick)
        {
            lightningticktime = Time.time;
            if (!TeslaGunNoTarget.isPlaying)
            {
                TeslaGunNoTarget.Play();
            }
            TeslaGunNoTarget.volume = 1f;
            Am.am.M.crossfade(TeslaGunNoTarget, 0f, .2f);
        }
        if (lastlightningtick && !LightningTick)
        {
            //if (TeslaGunNoTarget.isPlaying) Am.am.M.crossfade(TeslaGunNoTarget, 0f, .2f);
            if (TeslaGun1Target.isPlaying)
            {
                Am.am.M.crossfade(TeslaGun1Target, 0f, .2f);
            }
            if (TeslaGunMoreTargets.isPlaying)
            {
                Am.am.M.crossfade(TeslaGunMoreTargets, 0f, .2f);
            }
        }
        lastlightningtick = LightningTick;
        LightningTick     = false;
    }
Пример #26
0
    private void OnBulletHit(Collider2D col)
    {
        if (col == null)
        {
            return;
        }
        GenericEnemy en  = col.GetComponent <GenericEnemy>();
        Vector2      vec = new Vector2((this.transform.position.x - lastposition.x), (this.transform.position.y - lastposition.y));

        if (en != null)
        {
            //if (col.isTrigger) return;
            en.TakeDamage(Damage, vec * 1f);
            Astronaut.TheAstronaut.tickHitMarker(Damage, (en.Health / en.MaxHealth) * (en.Alive?1f:0f), !en.Alive);
            GameManager.TheGameManager.ignoreTutorialTip(TutorialSystem.TutorialTip.Shoot);
            if (RailSlug)
            {
                ParticleSystem p = GameObject.Instantiate(RailPierceParticles, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                GameObject.Destroy(p.gameObject, 1f);
            }
            else
            {
                ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                GameObject.Destroy(p.gameObject, 1f);
                Remove();
            }
            return;
        }
        IceBlock ib = col.GetComponentInParent <IceBlock>();

        if (ib != null)
        {
            //be.TakeDamage(Damage, vec * 1f);//Damage
            ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
            ib.Remove();
            if (RailSlug)
            {
            }
            else
            {
                GameObject.Destroy(p.gameObject, 1f);

                Remove();
            }
            return;
        }
        BossGolem    bo       = col.GetComponent <BossGolem>();
        bool         weakspot = false;
        BossWeakSpot bwsp     = col.GetComponent <BossWeakSpot>();

        if (bwsp != null)
        {
            bo       = bwsp.MyBossGolem;
            weakspot = true;
        }
        if (bo != null)
        {
            if (col.Equals(bo.MyWeakSpot))
            {
                weakspot = true;
            }
            float dmg = Damage;
            if (weakspot)
            {
                float di = (dmg * 2f);
                if (di >= 1f)
                {
                    bo.CriticalHitEffect.Emit(1);
                    bo.CriticalHitEffectSub.Emit(1);
                    bo.CriticalSparks.Emit((int)(20 * (dmg / 40f)));
                    Astronaut.PlayBossCriticalHitSound(bo.Health / bo.MaxHealth);
                    Astronaut.TheAstronaut.tickHitMarker(dmg, (bo.Health / bo.MaxHealth) * (bo.Defeated ? 1f : 0f), bo.Defeated);
                }
                else
                {
                    bo.damagelayover = (bo.damagelayover + di);
                    if ((bo.damagelayover) >= 1f)
                    {
                        bo.damagelayover -= 1f;
                        bo.CriticalHitEffect.Emit(1);
                        bo.CriticalHitEffectSub.Emit(1);
                        bo.CriticalSparks.Emit(20);
                        Astronaut.PlayBossCriticalHitSound(bo.Health / bo.MaxHealth);
                        Astronaut.TheAstronaut.tickHitMarker(dmg, (bo.Health / bo.MaxHealth) * (bo.Defeated ? 1f : 0f), bo.Defeated);
                    }
                }
                bo.TakeDamage(di, vec * 1f);//Damage
            }
            else
            {
                bo.TakeDamage(dmg, vec * 1f);//Damage
            }
            //Astronaut.TheAstronaut.tickHitMarker(Damage, (bo.Health / bo.MaxHealth) * (bo.Defeated ? 0f : 1f), bo.Defeated);
            weakspot = false;
            if (RailSlug)
            {
            }
            else
            {
                ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                GameObject.Destroy(p.gameObject, 1f);
                Remove();
            }
            return;
        }
        BreakableIceWall be = col.GetComponent <BreakableIceWall>();

        if (be != null)
        {
            be.TakeDamage(Damage, vec * 1f);//Damage
            Astronaut.TheAstronaut.tickHitMarker(Damage, (be.Health / be.MaxHealth) * (be.Alive ? 1f : 0f), !be.Alive);
            if (RailSlug)
            {
            }
            else
            {
                ParticleSystem p = GameObject.Instantiate(DamageImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));
                GameObject.Destroy(p.gameObject, 1f);
                Remove();
            }
            return;
        }

        if (col.gameObject.CompareTag("Water"))
        {
            //Splash
            MyRigidbody.velocity = (MyRigidbody.velocity * .5f);
            Damage *= .5f;
            return;
        }



        ParticleSystem ps = GameObject.Instantiate(GeometryImpact, this.transform.position, Quaternion.LookRotation(-new Vector3(vec.x, vec.y, 0f)));

        GameObject.Destroy(ps.gameObject, 1f);
        //Collision with geometry
        Remove();
    }