public override void ApplyDamageSkill(Unit attacker, Unit defender) { var gravityEffect = new GravityEffect(); gravityEffect.ApplyEffect(defender); defender.UnitEffects.Add(gravityEffect); }
public override void Effect(GameObject target) { if (target.GetComponent <GravityEffect> () == null) { target.AddComponent <GravityEffect> (); GravityEffect eff = target.GetComponent <GravityEffect> (); eff.SetDuration(3); } }
public void ToBytes(BinaryWriter writer) { writer.Write(basePos.X); writer.Write(basePos.Y); writer.Write(basePos.Z); writer.Write(DieInAir); writer.Write(DieInLiquid); writer.Write(SwimOnLiquid); for (int i = 0; i < 4; i++) { HsvaColor[i].ToBytes(writer); } GravityEffect.ToBytes(writer); LifeLength.ToBytes(writer); for (int i = 0; i < 3; i++) { PosOffset[i].ToBytes(writer); } Quantity.ToBytes(writer); Size.ToBytes(writer); for (int i = 0; i < 3; i++) { Velocity[i].ToBytes(writer); } writer.Write((byte)ParticleModel); writer.Write(VertexFlags); writer.Write(OpacityEvolve == null); if (OpacityEvolve != null) { OpacityEvolve.ToBytes(writer); } writer.Write(RedEvolve == null); if (RedEvolve != null) { RedEvolve.ToBytes(writer); } writer.Write(GreenEvolve == null); if (GreenEvolve != null) { GreenEvolve.ToBytes(writer); } writer.Write(BlueEvolve == null); if (BlueEvolve != null) { BlueEvolve.ToBytes(writer); } SizeEvolve.ToBytes(writer); writer.Write(SelfPropelled); writer.Write(TerrainCollision); writer.Write(ColorByBlock); writer.Write(VelocityEvolve != null); if (VelocityEvolve != null) { for (int i = 0; i < 3; i++) { VelocityEvolve[i].ToBytes(writer); } } SecondarySpawnInterval.ToBytes(writer); if (SecondaryParticles == null) { writer.Write(0); } else { writer.Write(SecondaryParticles.Length); for (int i = 0; i < SecondaryParticles.Length; i++) { SecondaryParticles[i].ToBytes(writer); } } if (DeathParticles == null) { writer.Write(0); } else { writer.Write(DeathParticles.Length); for (int i = 0; i < DeathParticles.Length; i++) { DeathParticles[i].ToBytes(writer); } } writer.Write(WindAffectednes); }
// Update is called once per frame void Update() { if (Random.Range(0f, 100f) < 1) { Debug.Log("Add effect"); GravityEffect gravityEffect = new GravityEffect(); gravityEffect.position = new Vector2(displacementTextureSize.x / 2, displacementTextureSize.y / 2); gravityEffect.size = 128; gravityEffect.startStrength = 0; gravityEffect.engageStrength = 0.75f; gravityEffect.endStrength = 0; gravityEffect.startTime = Time.time; gravityEffect.engageTime = 0.5f; gravityEffect.stayTime = 0.5f; gravityEffect.disengageTime = 0.5f; gravityEffects.Add(gravityEffect); } for (int i = 0; i < pixelBufferX.Length; i++) { pixelBufferX[i] = 128; pixelBufferY[i] = 128; } List <GravityEffect> effectsToRemove = new List <GravityEffect>(); foreach (GravityEffect gravityEffect in gravityEffects) { float phaseStartTime; float phaseEndTime; float phaseStartStrength; float phaseEndStrength; if (gravityEffect.startTime + gravityEffect.engageTime > Time.time) { phaseStartTime = gravityEffect.startTime; phaseEndTime = gravityEffect.startTime + gravityEffect.engageTime; phaseStartStrength = gravityEffect.startStrength; phaseEndStrength = gravityEffect.engageStrength; } else if (gravityEffect.startTime + gravityEffect.engageTime + gravityEffect.stayTime > Time.time) { phaseStartTime = gravityEffect.startTime + gravityEffect.engageTime; phaseEndTime = gravityEffect.startTime + gravityEffect.engageTime + gravityEffect.stayTime; phaseStartStrength = gravityEffect.engageStrength; phaseEndStrength = gravityEffect.engageStrength; } else if (gravityEffect.startTime + gravityEffect.engageTime + gravityEffect.stayTime + gravityEffect.disengageTime > Time.time) { phaseStartTime = gravityEffect.startTime + gravityEffect.engageTime + gravityEffect.stayTime; phaseEndTime = gravityEffect.startTime + gravityEffect.engageTime + gravityEffect.stayTime + gravityEffect.disengageTime; phaseStartStrength = gravityEffect.engageStrength; phaseEndStrength = gravityEffect.endStrength; } else { effectsToRemove.Add(gravityEffect); continue; } float phaseTime = (Time.time - phaseStartTime) / (phaseEndTime - phaseStartTime); float strength = phaseStartStrength * phaseTime + phaseEndStrength * (1 - phaseTime); for (int x = -gravityEffect.size; x < gravityEffect.size; x++) { for (int y = -gravityEffect.size; y < gravityEffect.size; y++) { Vector2 pixelPosition = new Vector2(gravityEffect.position.x + x, gravityEffect.position.y + y); if (pixelPosition.x < 0 || pixelPosition.x > displacementTextureSize.x) { continue; } if (pixelPosition.y < 0 || pixelPosition.y > displacementTextureSize.y) { continue; } Vector2 dist = new Vector2(x, y); if (dist.magnitude > gravityEffect.size) { continue; } float offset = (1 - dist.magnitude / gravityEffect.size) * strength; pixelBufferX[(int)(pixelPosition.x * displacementTextureSize.x + pixelPosition.y)] = 255; //(byte)(128 + 127 * offset * dist.normalized.x); pixelBufferY[(int)(pixelPosition.x * displacementTextureSize.x + pixelPosition.y)] = 255; //(byte)(128 + 127 * offset * dist.normalized.y); } } } foreach (GravityEffect gravityEffect in effectsToRemove) { gravityEffects.Remove(gravityEffect); } displacementTextureX.LoadRawTextureData(pixelBufferX); displacementTextureX.Apply(); displacementTextureY.LoadRawTextureData(pixelBufferY); displacementTextureY.Apply(); }
//Change card.effectType and this public Effect[] GetEffects(Card.EffectType[] effectNames) { Effect[] effects = new Effect[effectNames.Length]; for (int i = 0; i < effectNames.Length; i++) { switch (effectNames[i]) { case Card.EffectType.VitDamage: effects[i] = new VitDamageEffect(); break; case Card.EffectType.ShieldDamage: effects[i] = new ShieldDamageEffect(); break; case Card.EffectType.VitDamageAll: effects[i] = new VitDamageAll(); break; case Card.EffectType.ShieldDamageAll: effects[i] = new ShieldDamageAll(); break; case Card.EffectType.PiercingDamage: effects[i] = new PiercingDamageEffect(); break; case Card.EffectType.PiercingDamageAll: effects[i] = new PiercingDamageAll(); break; case Card.EffectType.SetKnockBackDamage: effects[i] = new SetKnockBackDamage(); break; case Card.EffectType.ForcedMovement: effects[i] = new ForcedMovementEffect(); break; case Card.EffectType.TauntEffect: effects[i] = new TauntEffect(); break; case Card.EffectType.GetMissingHealth: effects[i] = new GetMissingHealth(); break; case Card.EffectType.Buff: effects[i] = new ApplyBuffEffect(); break; case Card.EffectType.Cleanse: effects[i] = new CleanseEffect(); break; case Card.EffectType.CreateObject: effects[i] = new CreateObjectEffect(); break; case Card.EffectType.GetCurrentAttack: effects[i] = new GetCurrentAttackEffect(); break; case Card.EffectType.DrawCards: effects[i] = new DrawCardEffect(); break; case Card.EffectType.GetCurrentShield: effects[i] = new GetCurrentShield(); break; case Card.EffectType.GetBonusShield: effects[i] = new GetBonusArmorEffect(); break; case Card.EffectType.GetNumberOfTargetsInRangeEffect: effects[i] = new GetNumberOfTargetsInRangeEffect(); break; case Card.EffectType.GetDamageDoneEffect: effects[i] = new GetDamageDoneEffect(); break; case Card.EffectType.GetNumberOfCardsPlayedInTurn: effects[i] = new GetNumberOfCardsPlayedEffect(); break; case Card.EffectType.Swap: effects[i] = new SwapEffect(); break; case Card.EffectType.Teleport: effects[i] = new TeleportEffect(); break; case Card.EffectType.ManaGain: effects[i] = new ManaGainEffect(); break; case Card.EffectType.EnergyGain: effects[i] = new EnergyGainEffect(); break; case Card.EffectType.SetDuration: effects[i] = new SetDurationEffect(); break; case Card.EffectType.GetNumberInStack: effects[i] = new GetNumberInStackEffect(); break; case Card.EffectType.GravityEffect: effects[i] = new GravityEffect(); break; case Card.EffectType.CardCostReductionDrawn: effects[i] = new CardCostReductionDrawn(); break; case Card.EffectType.DrawManaCards: effects[i] = new DrawManaCardEffect(); break; case Card.EffectType.Sacrifice: effects[i] = new SacrificeEffect(); break; case Card.EffectType.GetNumberOfAttackers: effects[i] = new GetNumberOfAttackersEffect(); break; case Card.EffectType.ModifyTempValue: effects[i] = new ModifyTempValueEffect(); break; default: effects[i] = null; break; } } return(effects); }