private void AddStringDrawer(Vector2 startPosition, string stringToDraw) { int elapsed = 0; bool isScrit = false; Random random = null; Vector2 position = startPosition; EffectDrawer effectDrawer = new EffectDrawer(); if (currentWeapon.IsCrit(int.Parse(stringToDraw))) { random = new Random(); isScrit = true; } effectDrawer.Update = (gameTime) => { if (elapsed > 850) { effectDrawer.Dispose(); } else { elapsed += gameTime.ElapsedGameTime.Milliseconds; position = new Vector2(position.X, position.Y - 1.25f); if (isScrit) { position = new Vector2(Math.Abs(position.X + (float)random.NextDouble() * 5), position.Y - Math.Abs((float)random.NextDouble() * 5)); } } }; effectDrawer.Draw = (spriteBatch) => { if (isScrit) { bool negate = random.NextDouble() >= 0.5; float value = MathHelper.Clamp((float)random.NextDouble(), 0.0f, 0.15f); float rotation = (negate ? -value : value); spriteBatch.DrawString(spriteFont, stringToDraw, position, Color.Red, rotation, spriteFont.MeasureString(stringToDraw) / 2, 2.0f, SpriteEffects.None, 0.0f); } else { spriteBatch.DrawString(spriteFont, stringToDraw, position, Color.Red); } }; effectDrawer.Dispose = () => { effectDrawers.Remove(effectDrawer); }; effectDrawers.Add(effectDrawer); }
void CustomDrawer(ref Boost pBoost, int pIndex) { Boost.Effect tEffect = pBoost.Effects[pIndex]; BaseEffect tBaseEffect = null; if (tEffect.EffectToRun == null) { tBaseEffect = BaseEffect.GetEffectObject(tEffect.Type); } else { tBaseEffect = tEffect.EffectToRun; } EffectDrawer.DrawTypeList(ref tBaseEffect, tEffect.Type); }