public void TransformMonster(MonsterRenderer renderer, ref Rectangle drawFrom, ref Rectangle drawTo) { if (currentEffect != null && currentEffect is TransformSprite) { ((TransformSprite)currentEffect).UpdateSpritePosition(renderer, ref drawFrom, ref drawTo); } }
public Monster(FightScene fightScene) { Hitpoint.Val = 30; this.fightScene = fightScene; GameObject gObject = GameObject.FindGameObjectsWithTag("Placeholder").Single(o => o.name == "Monster"); this.renderer = gObject.AddComponent <MonsterRenderer> (); this.renderer.Register(this); Hitpoint.OnChange += (oldVal, newVal) => { if (newVal < oldVal) { this.renderer.Shake(); } if (newVal <= 0) { onDeath(); } }; this.States = new StatesBar(gObject); }
public Leaves(MonsterRenderer renderer, int delay, int param = 0, int startAt = 0, int stopEarly = int.MaxValue) : base(renderer, delay, param, startAt, stopEarly) { leaves = new List <Leaf>(); leaves.Add(new Leaf(32, -24, 5)); leaves.Add(new Leaf(144, -80, 16)); leaves.Add(new Leaf(192, -128, 10)); }
public Animation(MonsterRenderer renderer, int delay, int param, int startAt, int stopEarly) { this.renderer = renderer; this.delay = delay; this.param = param; this.StartAt = startAt; this.StopEarly = stopEarly; }
public void UpdateSpritePosition(MonsterRenderer renderer, ref Rectangle drawFrom, ref Rectangle drawTo) { if (this.renderer != renderer || skip) { return; } switch (transformation) { case SpriteTransformation.SlideDown: drawFrom = new Rectangle(drawFrom.X, drawFrom.Y, drawFrom.Width, drawFrom.Height - (int)(((decimal)frameCounter) * 16)); drawTo = new Rectangle(drawTo.X, drawTo.Y + ((int)frameCounter) * 16, drawTo.Width, drawFrom.Height); break; case SpriteTransformation.SlideUp: drawFrom = new Rectangle(drawFrom.X, drawFrom.Y, drawFrom.Width, (int)(((decimal)frameCounter) * 16)); drawTo = new Rectangle(drawTo.X, drawTo.Y + drawTo.Height - ((int)frameCounter) * 16, drawTo.Width, drawFrom.Height); break; case SpriteTransformation.Shrink: drawTo = new Rectangle(drawTo.X + frameCounter * drawTo.Width / 32, drawTo.Y + frameCounter * drawTo.Height / 16, drawTo.Width - frameCounter * drawTo.Width / 16, drawTo.Height - frameCounter * drawTo.Height / 16); break; case SpriteTransformation.Stretch: drawTo = new Rectangle(drawTo.X + drawTo.Width / 2 - frameCounter * drawTo.Width / 32, drawTo.Y + drawTo.Height - frameCounter * drawTo.Height / 16, frameCounter * drawTo.Width / 16, frameCounter * drawTo.Height / 16); break; case SpriteTransformation.SlideOff: drawTo.Offset(frameCounter * 16 * renderer.ScreenEdgeDirection, 0); break; case SpriteTransformation.ShiftBackward: drawTo.Offset(frameCounter * 12 * renderer.ScreenEdgeDirection, 0); break; case SpriteTransformation.Flatten: drawTo = new Rectangle(drawTo.X + frameCounter * 12, drawTo.Y, drawTo.Width - frameCounter * 24, drawFrom.Height); break; case SpriteTransformation.SlideOffTop: drawFrom = new Rectangle(drawFrom.X, drawFrom.Y + Math.Max(0, frameCounter * 16 - 112), drawFrom.Width, drawFrom.Height - Math.Max(0, frameCounter * 16 - 112)); drawTo = new Rectangle(drawTo.X, drawTo.Y - Math.Min(frameCounter * 16, 112), drawTo.Width, drawFrom.Height); break; case SpriteTransformation.SlideBackDown: drawFrom = new Rectangle(drawFrom.X, drawFrom.Y + drawFrom.Height - Math.Min(drawFrom.Height, frameCounter * 16), drawFrom.Width, Math.Min(drawFrom.Height, frameCounter * 16)); drawTo = new Rectangle(drawTo.X, Math.Min(drawTo.Y, drawTo.Y - 112 + Math.Min(112, Math.Max(0, frameCounter * 16 - drawTo.Height))), drawTo.Width, drawFrom.Height); break; case SpriteTransformation.ShakeInPlace: if (frameCounter % 6 < 3) { drawTo.Offset(64 * renderer.ScreenEdgeDirection, 0); } break; } }
public bool EffectNeedsMonDefaultPalette(MonsterRenderer renderer) { if (currentEffect != null && currentEffect is Animation) { return(((Animation)currentEffect).UseMonDefaultPalette(renderer)); } return(false); }
public Petals(MonsterRenderer renderer, int delay, int param = 0, int startAt = 0, int stopEarly = int.MaxValue) : base(renderer, delay, param, startAt, stopEarly) { petals = new List <Petal>(); petals.Add(new Petal(32, -24, 5, 0)); petals.Add(new Petal(144, -80, 16, 1)); petals.Add(new Petal(100, 64, 2, 0)); petals.Add(new Petal(400, 16, 12, 1)); petals.Add(new Petal(512, 72, 9, 0)); petals.Add(new Petal(540, 88, 11, 1)); petals.Add(new Petal(92, 176, 4, 0)); petals.Add(new Petal(280, 120, 15, 1)); petals.Add(new Petal(240, 328, 1, 0)); petals.Add(new Petal(192, -128, 10, 1)); }
public void QueueSpecialEffects(Sequence sequence, MonsterRenderer self, MonsterRenderer foe) { foreach (SpecialEffects.Effect effect in sequence.Effects) { switch (effect.Type) { case SpecialEffectType.Sequence: QueueSpecialEffects(effect.Sequence, self, foe); break; case SpecialEffectType.ScreenTransform: queue.Enqueue(new TransformScreen(parent, effect.ScreenTransformation, effect.Offset, effect.Parallel)); break; case SpecialEffectType.SpriteTransform: queue.Enqueue(new TransformSprite(effect.SpriteTransformation, effect.Who == Who.Self ? self : foe)); break; case SpecialEffectType.PaletteSwap: queue.Enqueue(new SwapPalette(effect.Palette)); break; case SpecialEffectType.Delay: queue.Enqueue(new Delay(effect.DelayFrames)); break; case SpecialEffectType.Animation: ConstructorInfo constructor = effect.SpriteAnimation.GetConstructor(new Type[] { typeof(MonsterRenderer), typeof(int), typeof(int), typeof(int), typeof(int) }); queue.Enqueue((Animation)constructor.Invoke(new object[] { effect.Who == Who.Self ? self : foe, effect.DelayFrames, effect.Param, effect.StartAt, effect.StopEarly })); break; case SpecialEffectType.Temporary: break; } } }
public Halo(MonsterRenderer renderer, int delay, int param = 0, int startAt = 0, int stopEarly = int.MaxValue) : base(renderer, delay, param, startAt, stopEarly) { }
public override bool UseMonDefaultPalette(MonsterRenderer renderer) { return(renderer == this.renderer); }
public override bool UseMonDefaultPalette(MonsterRenderer renderer) { return(param == 0 && renderer != this.renderer); }
public TransformSprite(SpriteTransformation transformation, MonsterRenderer renderer) { this.transformation = transformation; this.renderer = renderer; skip = false; }
public virtual bool UseMonDefaultPalette(MonsterRenderer renderer) { return(false); }
public ExplosionSingle(MonsterRenderer renderer, int delay, int param = 0, int startAt = 0, int stopEarly = int.MaxValue) : base(renderer, delay, param, startAt, stopEarly) { }
private void battle_BattleEvent(object sender, BattleEventArgs e) { HUD display = e.Monster == battle.PlayerCurrent ? (HUD)selfHUD : (HUD)foeHUD; MonsterRenderer current = e.Monster == battle.PlayerCurrent ? (MonsterRenderer)selfRenderer : (MonsterRenderer)foeRenderer; MonsterRenderer opponent = current == selfRenderer ? (MonsterRenderer)foeRenderer : (MonsterRenderer)selfRenderer; Panel previousFocus = hasFocus; syncronize.Reset(); if (e.Type == BattleEventType.MonHPChanged) { hasFocus = display; display.AnimateHPChange(e.HPBefore, e.HPAfter); } else if (e.Type == BattleEventType.MonFainted) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Fainted"], current, opponent); } else if (e.Type == BattleEventType.MonRecalled) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Recalled"], current, opponent); } else if (e.Type == BattleEventType.MonSentOut) { hasFocus = specialEffectManager; display.UpdateStatus(); specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Sent Out"], current, opponent); } else if (e.Type == BattleEventType.MonSpawned) { hasFocus = specialEffectManager; display.UpdateStatus(); specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Sent Out"], current, opponent); } else if (e.Type == BattleEventType.AttackHit || e.Type == BattleEventType.RecurringAttackHit) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new Delay(30)); if (e.Monster.SubstituteHP > 0 && e.Move.Name != "Substitute") { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Substitute Pre-Attack"], current, opponent); } Sequence seq = null; if (e.Type == BattleEventType.RecurringAttackHit && Sequence.Sequences.ContainsKey(e.Move.Name + " Recurring")) { seq = Sequence.Sequences[e.Move.Name + " Recurring"]; } else if (Sequence.Sequences.ContainsKey(e.Move.Name)) { seq = Sequence.Sequences[e.Move.Name]; } if (seq != null) { specialEffectManager.QueueSpecialEffects(seq, current, opponent); } else { specialEffectManager.QueueSpecialEffect(new Delay(30)); } switch (e.Move.AttackType) { case AttackType.Damaging: specialEffectManager.QueueSpecialEffects(Sequence.Sequences[e.Monster == battle.PlayerCurrent ? "Player Damaging" : "Enemy Damaging"], current, opponent); break; case AttackType.DamagingWithEffectChance: specialEffectManager.QueueSpecialEffects(Sequence.Sequences[e.Monster == battle.PlayerCurrent ? "Player Damaging With Effect Chance" : "Enemy Damaging With Effect Chance"], current, opponent); break; case AttackType.NonDamaging: specialEffectManager.QueueSpecialEffects(Sequence.Sequences[e.Monster == battle.PlayerCurrent ? "Player Non-Damaging" : "Enemy Non-Damaging"], current, opponent); break; default: specialEffectManager.QueueSpecialEffect(new Delay(20)); break; } if (e.Monster.SubstituteHP > 0 && e.Move.Name != "Substitute") { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Substitute Post-Attack"], current, opponent); } } else if (e.Type == BattleEventType.AttackMissed) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new TransformSprite(SpriteTransformation.Show, current)); specialEffectManager.QueueSpecialEffect(new Delay(50)); } else if (e.Type == BattleEventType.AttackCharged) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new Delay(30)); if (Sequence.Sequences.ContainsKey(e.Move.Name + " Charge")) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences[e.Move.Name + " Charge"], current, opponent); } else { specialEffectManager.QueueSpecialEffect(new Delay(30)); } } else if (e.Type == BattleEventType.StatusAilment) { hasFocus = specialEffectManager; if (e.Status == StatusCondition.Sleep) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Asleep"], current, opponent); } else if (e.Status == StatusCondition.Confusion) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Confused"], current, opponent); } else if (e.Status == StatusCondition.Seeded) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Seeded"], current, opponent); } else if (e.Status == StatusCondition.Burn) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Burned"], current, opponent); } else if (e.Status == StatusCondition.Poison || e.Status == StatusCondition.BadlyPoisoned) { specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Poisoned"], current, opponent); } else { throw new Exception(); } } else if (e.Type == BattleEventType.MonTransformed) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new TransformSprite(SpriteTransformation.Show, current)); } else if (e.Type == BattleEventType.SubstituteBroke) { hasFocus = specialEffectManager; display.UpdateStatus(); specialEffectManager.QueueSpecialEffects(Sequence.Sequences["Substitute Broke"], current, opponent); } else if (e.Type == BattleEventType.MonCrashed) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new TransformScreen(this, ScreenTransformation.ShakeHorizontallyFast, 4, false)); } else if (e.Type == BattleEventType.MonHurtItself) { hasFocus = specialEffectManager; specialEffectManager.QueueSpecialEffect(new Animations.DoublePow(current, 8)); } else if (e.Type == BattleEventType.MonStatusUpdate) { display.UpdateStatus(); } else { throw new Exception(); } if (e.Type != BattleEventType.MonStatusUpdate) { syncronize.WaitOne(); } hasFocus = previousFocus; }