예제 #1
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);
    }
예제 #2
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);
            }
        }
    }
    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;
    }
예제 #4
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();
    }
예제 #5
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();
    }