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>(); }
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); } }
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); } } }
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; }
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; } }
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); } } }
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; }
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); }
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(); }
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); }
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; } }
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); }
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; } } }
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); } }
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); } } }
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; } }
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 ); }
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); } } }
protected override void HitRay(IceBlock hit) { hit.Head.TickFire(); }
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(); }
protected abstract void HitRay(IceBlock hit);
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); } } }
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; }
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(); }