public override void DrawArcObject(SceneGame scene, DrawPass pass) { var spriteWraith = SpriteLoader.Instance.AddSprite("content/wraith"); var spriteWraithTrail = SpriteLoader.Instance.AddSprite("content/wraith_trail"); var tile = Curio.GetMainTile(); var startPos = Source; var endPos = tile.VisualTarget; Vector2 curve(float slide) { var a = Vector2.Lerp(startPos, startPos + VelocityStart, (float)LerpHelper.Quadratic(0, 1, slide)); var b = Vector2.Lerp(endPos + VelocityEnd, endPos, (float)LerpHelper.Quadratic(0, 1, slide)); return(Vector2.Lerp(a, b, (float)LerpHelper.Quadratic(0, 1, slide))); } Color colorStart = new Color(215, 63, 36); Color colorEnd = new Color(118, 39, 102); if (pass == DrawPass.Effect) { int segments = 5; for (int i = 0; i < segments; i++) { float trailSlide = (float)i / (segments - 1); float trailPos = (float)LerpHelper.QuadraticOut(Frame.Slide - 0.05f, Frame.Slide, trailSlide); Vector2 pos = curve(trailPos); scene.DrawSpriteExt(spriteWraithTrail, 0, pos - spriteWraithTrail.Middle, spriteWraithTrail.Middle, 0, Vector2.One, SpriteEffects.None, Color.Lerp(colorStart.WithAlpha(0), colorEnd, trailSlide), 0); } } if (pass == DrawPass.EffectAdditive) { scene.DrawSpriteExt(spriteWraith, 0, curve(Frame.Slide) - spriteWraith.Middle, spriteWraith.Middle, 0, Vector2.One, SpriteEffects.None, colorStart, 0); } }
private void DrawWing(SceneGame scene, SpriteReference sprite, Color color, int segments, float directionMod, float distanceMod, Microsoft.Xna.Framework.Graphics.SpriteEffects mirror) { //new Color(244, 211, 23) //SpriteReference hand = SpriteLoader.Instance.AddSprite("content/hand"); int index = 0; for (int i = 1; i <= segments; i++) { int subSegments = 9; float angle = directionMod * MathHelper.ToRadians(90 - i * 5); float distance = (float)LerpHelper.Quadratic(10, distanceMod * 50, (float)i / segments); Vector2 pivot = VisualPosition() + Util.AngleToVector(angle) * distance; scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index), sprite.Middle, angle + directionMod * MathHelper.PiOver4, Vector2.One, mirror, color, 0); index++; for (int e = 0; e <= subSegments; e++) { float subSegmentSlide = (float)e / (subSegments + 1); float subAngle = angle - directionMod * MathHelper.ToRadians(i * 2); float subDistance = distanceMod * e * 5; float visAngle = subAngle + directionMod * MathHelper.PiOver2 + directionMod * MathHelper.ToRadians(i * -10); scene.DrawSpriteExt(sprite, 0, pivot + GetHandOffset(index) + Util.AngleToVector(subAngle) * subDistance, sprite.Middle, visAngle, Vector2.One, mirror, color * MathHelper.Lerp(0.3f, 1, subSegmentSlide), 0); index++; } } }
public virtual void DrawMace(SceneGame scene, Vector2 pos, Vector2 offset, int chains) { var mace = SpriteLoader.Instance.AddSprite("content/mace"); var chain = SpriteLoader.Instance.AddSprite("content/mace_chain"); for (int i = 0; i < chains; i++) { scene.DrawSpriteExt(chain, 0, pos + offset * ((float)i / chains) - chain.Middle, chain.Middle, 0, new Vector2(1), SpriteEffects.None, Color.White, 0); } scene.DrawSpriteExt(mace, 0, pos + offset - mace.Middle, mace.Middle, 0, new Vector2(1), SpriteEffects.None, Color.White, 0); }
public override void Draw(ICurio curio, SceneGame scene, DrawPass pass) { var spriteHelmet = SpriteLoader.Instance.AddSprite("content/nemesis_helmet"); var spriteBodyForward = SpriteLoader.Instance.AddSprite("content/nemesis_forward"); var spriteBodyBack = SpriteLoader.Instance.AddSprite("content/nemesis_back"); var spriteWings = SpriteLoader.Instance.AddSprite("content/nemesis_wings"); var spriteParry = SpriteLoader.Instance.AddSprite("content/nemesis_parry"); var alive = curio.GetBehavior <BehaviorAlive>(); var nemesis = curio.GetBehavior <BehaviorNemesis>(); if (alive.Armor > 0) { spriteBodyForward = SpriteLoader.Instance.AddSprite("content/nemesis_forward_armor"); spriteBodyBack = SpriteLoader.Instance.AddSprite("content/nemesis_back_armor"); } var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var color = curio.GetColor(); var angleBody = curio.GetVisualAngle(); scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (transform, projection) => { scene.SetupColorMatrix(color); }); SpriteReference spriteBody; float headPos = MathHelper.Lerp(-4, 4, nemesis.ForwardBack); if (nemesis.ForwardBack > 0.5f) { spriteBody = spriteBodyForward; } else { spriteBody = spriteBodyBack; } scene.DrawSpriteExt(spriteBody, 0, center + offset - spriteBody.Middle, spriteBody.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); scene.DrawSpriteExt(spriteHelmet, 0, center + offset + Util.AngleToVector(angleBody) * headPos - spriteHelmet.Middle, spriteHelmet.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); if (nemesis.State == NemesisState.Parry) { scene.DrawSpriteExt(spriteParry, 0, center + offset - spriteParry.Middle, spriteParry.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); } if (nemesis.ForwardBack > 0.5f && nemesis.WingsOpen > 0f) { Color wingColor = Color.Lerp(Color.Red, Color.Black, nemesis.WingsOpen); scene.DrawSpriteExt(spriteWings, 0, center + offset - spriteWings.Middle, spriteWings.Middle, angleBody, new Vector2(1), SpriteEffects.None, wingColor, 0); } scene.PopSpriteBatch(); }
public override void Draw(SceneGame scene, DrawPass pass) { if (Sprite == null) { return; } if (ColorMatrix.HasValue) { scene.PushSpriteBatch(shaderSetup: (matrix, projection) => { scene.SetupColorMatrix(ColorMatrix.Value, matrix, projection); }); } Vector2 nextPosition = Position; int i = 0; foreach (var trailPos in TrailPositions) { Vector2 currentPosition = Vector2.Lerp(trailPos, nextPosition, 0.5f); float lerpSlide = Util.ReverseLerp(Slide, 0.5f, 1.0f); Color color = Color.Lerp(Color, ColorEnd, (float)i / (TrailPositions.Count - 1)); color = Color.Lerp(color, Color.TransparentBlack, (float)ColorLerp(0, 1, lerpSlide)); scene.DrawSpriteExt(Sprite, SubImage, currentPosition - Sprite.Middle, Sprite.Middle, Angle, new Vector2(Scale), Mirror, color, 0); nextPosition = currentPosition; i++; } if (ColorMatrix.HasValue) { scene.PopSpriteBatch(); } }
public override void Draw(SceneGame scene, DrawPass pass) { var flash = SpriteLoader.Instance.AddSprite("content/flash"); float size = MathHelper.Lerp(1.0f, 0.0f, Frame / FrameEnd); scene.DrawSpriteExt(flash, 0, Position - flash.Middle, flash.Middle, Frame * 0.1f, new Vector2(size), SpriteEffects.None, Color.White, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var fireBig = SpriteLoader.Instance.AddSprite("content/fire_big"); var middle = new Vector2(8, 12); scene.DrawSpriteExt(fireBig, scene.AnimationFrame(fireBig, Frame, FrameEnd), Position - middle, middle, Angle, SpriteEffects.None, 0); }
private void DrawMace(ICurio curio, SceneGame scene, DrawPass pass) { var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var angleBody = curio.GetVisualAngle(); var mace = curio.GetBehavior <BehaviorMace>(); if (mace != null && (!mace.Upswing.Done || !mace.MaceReturn.Done)) { var weaponAngle = (float)LerpHelper.QuadraticOut(0, 1, mace.Upswing.Slide); var weaponScale = (float)LerpHelper.QuadraticOut(0.5, 1.0, mace.Upswing.Slide); var weaponStartPos = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 2) * 8; var weaponEndPos = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 3) * 10; var weaponPos = center + offset + Vector2.Lerp(weaponStartPos, weaponEndPos, (float)LerpHelper.QuadraticOut(0, 1, mace.Upswing.Slide)); scene.DrawSpriteExt(SpriteWeapon, 0, weaponPos - SpriteWeapon.Middle, SpriteWeapon.Middle, angleBody + weaponAngle, new Vector2(weaponScale), SpriteEffects.None, Color.White, 0); if (!mace.Upswing.Done) { mace.DrawMace(scene, weaponPos, Util.AngleToVector(mace.UpswingAngle) * (float)LerpHelper.QuadraticOut(0, 12, mace.MaceReturn.Slide), 2); } if (!mace.MaceReturn.Done) { var maceOffset = mace.MacePosition - weaponPos; mace.DrawMace(scene, weaponPos, Vector2.Lerp(maceOffset, Vector2.Zero, (float)LerpHelper.QuadraticOut(0, 1, mace.MaceReturn.Slide)), 8); } } }
public override void Draw(SceneGame scene, DrawPass pass) { var wallGun = SpriteLoader.Instance.AddSprite("content/wall_gun"); var wallGunBase = SpriteLoader.Instance.AddSprite("content/wall_gun_base"); scene.DrawSpriteExt(wallGun, 0, Position - wallGun.Middle + VisualOffset(), wallGun.Middle, Angle, SpriteEffects.None, 1); }
public override void Draw(SceneGame scene, DrawPass pass) { var fireball = SpriteLoader.Instance.AddSprite("content/fireball_big"); var middle = new Vector2(8, 4); scene.DrawSpriteExt(fireball, (int)Frame, Position - middle, middle, Util.VectorToAngle(Velocity), SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var statusStunned = SpriteLoader.Instance.AddSprite("content/status_stunned"); float radius = 8; float circleSpeed = 0.15f; var offset = new Vector2(radius * (float)Math.Sin(Frame * Math.PI * circleSpeed), (radius / 2) * (float)Math.Cos(Frame * Math.PI * circleSpeed)); scene.DrawSpriteExt(statusStunned, (int)(Frame * 0.3f), HeadPosition + offset - statusStunned.Middle, statusStunned.Middle, 0, SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var bombsigil = SpriteLoader.Instance.AddSprite("content/orb_orange_firesigil"); for (int i = 0; i < Effect.Stacks; i++) { scene.DrawSpriteExt(bombsigil, 0, Position + 16 * AngleToVector(((float)i / Effect.Stacks) * MathHelper.TwoPi) - bombsigil.Middle, bombsigil.Middle, ((float)i / Effect.Stacks) * MathHelper.TwoPi, SpriteEffects.None, 0); } }
public override void Draw(SceneGame scene, DrawPass pass) { var punchStraight = SpriteLoader.Instance.AddSprite("content/punch"); var punchAngle = Angle; if (Mirror.HasFlag(SpriteEffects.FlipHorizontally)) { punchAngle = -punchAngle; } scene.DrawSpriteExt(punchStraight, scene.AnimationFrame(punchStraight, Frame, FrameEnd), Position - punchStraight.Middle, punchStraight.Middle, punchAngle, Mirror, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var statusSlowed = SpriteLoader.Instance.AddSprite("content/status_slowed"); float slide = (Frame * 0.01f) % 1; float angle = 0; if (slide < 0.1f) { angle = MathHelper.Lerp(0, MathHelper.Pi, slide / 0.1f); } scene.DrawSpriteExt(statusSlowed, 0, HeadPosition - statusSlowed.Middle, statusSlowed.Middle, angle, SpriteEffects.None, 0); }
public void Draw(SceneGame scene, DrawPass pass) { var heart = SpriteLoader.Instance.AddSprite("content/heart"); var basePos = GetBase(); var tipPos = GetTip(); scene.FlushSpriteBatch(); scene.DrawGrappleLine(basePos, tipPos, VisualAmplitude(), scene.Frame * 0.1f, 8, 100, LerpHelper.QuarticOut, new Color(255, 128, 128), scene.NonPremultiplied); if (HasHeart) { scene.DrawSpriteExt(heart, 0, tipPos - heart.Middle, heart.Middle, 0, SpriteEffects.None, 0); } }
public override void Draw(SceneGame scene, DrawPass pass) { var runeBackground = SpriteLoader.Instance.AddSprite("content/magic_death3"); var runeA = SpriteLoader.Instance.AddSprite("content/magic_death2"); var runeB = SpriteLoader.Instance.AddSprite("content/magic_death"); float lerp = (float)LerpHelper.CubicOut(1, 0, Frame / FrameEnd); Color color = new Color(1, 1, 1, lerp); if (pass == DrawPass.EffectDeath) { scene.SpriteBatch.Begin(samplerState: SamplerState.PointClamp, blendState: BlendState.Additive, rasterizerState: RasterizerState.CullNone, transformMatrix: scene.WorldTransform); scene.DrawSpriteExt(runeA, 0, Position - runeA.Middle, runeA.Middle, 0, Vector2.One, SpriteEffects.None, color, 0); scene.DrawSpriteExt(runeA, 0, Position - runeA.Middle, runeA.Middle, 0, Vector2.One, SpriteEffects.None, color, 0); scene.DrawSpriteExt(runeB, 0, Position - runeB.Middle, runeB.Middle, 0, Vector2.One, SpriteEffects.None, color, 0); scene.SpriteBatch.End(); } else { scene.DrawSpriteExt(runeBackground, 0, Position - runeBackground.Middle, runeBackground.Middle, 0, Vector2.One, SpriteEffects.None, color, 0); } }
public override void Draw(ICurio curio, SceneGame scene, DrawPass pass) { var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var color = curio.GetColor(); var angleBody = curio.GetVisualAngle(); scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (transform, projection) => { scene.SetupColorMatrix(color); }); scene.DrawSpriteExt(Sprite, 0, center + offset - Sprite.Middle, Sprite.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); scene.PopSpriteBatch(); }
protected void DrawWeaponAsIcon(SceneGame scene, SpriteReference sprite, int frame, Vector2 position) { Vector2 scale; if (sprite.Width >= 16) { scale = new Vector2(14 * Sqrt2 / sprite.Width); } else { scale = Vector2.One; } scene.DrawSpriteExt(sprite, frame, position - sprite.Middle, sprite.Middle, MathHelper.ToRadians(-45), scale, SpriteEffects.None, Color.White, 0); }
private void DrawDagger(ICurio curio, SceneGame scene, DrawPass pass) { var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var angleBody = curio.GetVisualAngle(); var dagger = curio.GetBehavior <BehaviorDagger>(); if (dagger != null && !dagger.Upswing.Done) { var weaponAngle = (float)LerpHelper.QuadraticOut(0, 1, dagger.Upswing.Slide); var weaponScale = (float)LerpHelper.QuadraticOut(0.5, 1.0, dagger.Upswing.Slide); var weaponStartPos = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 2) * 8; var weaponEndPos = Util.AngleToVector(angleBody + MathHelper.PiOver4 * 3) * 10; var weaponPos = center + offset + Vector2.Lerp(weaponStartPos, weaponEndPos, (float)LerpHelper.QuadraticOut(0, 1, dagger.Upswing.Slide)); scene.DrawSpriteExt(SpriteWeapon, 0, weaponPos - SpriteWeapon.Middle, SpriteWeapon.Middle, angleBody + weaponAngle, new Vector2(weaponScale), SpriteEffects.None, Color.White, 0); } }
public override void Draw(ICurio curio, SceneGame scene, DrawPass pass) { var spriteIdle = SpriteLoader.Instance.AddSprite("content/rat_idle"); var spriteMove = SpriteLoader.Instance.AddSprite("content/rat_move"); var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var color = curio.GetColor(); var angleBody = curio.GetVisualAngle(); var pathfinder = curio.GetBehavior <BehaviorPathfinder>(); scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (transform, projection) => { scene.SetupColorMatrix(color); }); var spriteBody = pathfinder.HasPath ? spriteMove : spriteIdle; scene.DrawSpriteExt(spriteBody, 0, center + offset - spriteBody.Middle, spriteBody.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); scene.PopSpriteBatch(); }
public override void Draw(SceneGame scene, DrawPass pass) { if (Sprite == null) { return; } if (ColorMatrix.HasValue) { scene.PushSpriteBatch(shaderSetup: (matrix, projection) => { scene.SetupColorMatrix(ColorMatrix.Value, matrix, projection); }); } scene.DrawSpriteExt(Sprite, SubImage, Position - Sprite.Middle, Sprite.Middle, Angle, new Vector2(Scale), Mirror, Color, 0); if (ColorMatrix.HasValue) { scene.PopSpriteBatch(); } }
public override void Draw(ICurio curio, SceneGame scene, DrawPass pass) { var body = SpriteBody; var alive = curio.GetBehavior <BehaviorAlive>(); if (alive.Armor > 0) { body = SpriteLoader.Instance.AddSprite($"{SpriteBody.FileName}_armor"); } var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var color = curio.GetColor(); var angleBody = curio.GetVisualAngle(); scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (transform, projection) => { scene.SetupColorMatrix(color); }); scene.DrawSpriteExt(body, 0, center + offset - SpriteBody.Middle, SpriteBody.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); DrawDagger(curio, scene, pass); DrawMace(curio, scene, pass); scene.PopSpriteBatch(); }
public override void Draw(ICurio curio, SceneGame scene, DrawPass pass) { var spriteHead = SpriteLoader.Instance.AddSprite("content/lich_head"); var spriteBody = SpriteLoader.Instance.AddSprite("content/lich_body"); var spriteHeart = SpriteLoader.Instance.AddSprite("content/lich_heart"); var spriteWeapon = SpriteLoader.Instance.AddSprite("content/lich_weapon"); var center = curio.GetVisualPosition() + new Vector2(8, 8); var offset = curio.GetOffset(); var color = curio.GetColor(); var angleBody = curio.GetVisualAngle(); var lich = curio.GetBehavior <BehaviorLich>(); scene.PushSpriteBatch(shader: scene.Shader, shaderSetup: (transform, projection) => { scene.SetupColorMatrix(color); }); if (pass == DrawPass.EffectLow) { scene.DrawSpriteExt(spriteBody, 0, center - spriteBody.Middle, spriteBody.Middle, scene.Frame * 0.1f, new Vector2(1), SpriteEffects.None, Color.Red, 0); scene.DrawSpriteExt(spriteBody, 0, center - spriteBody.Middle, spriteBody.Middle, scene.Frame * 0.2f, new Vector2(0.8f), SpriteEffects.None, Color.DarkRed, 0); var weaponMiddle = new Vector2(spriteWeapon.Width / 2, spriteWeapon.Height * 2 / 3); var weaponOffset = Util.AngleToVector(lich.SwordAngle); scene.DrawSpriteExt(spriteWeapon, 0, center + Util.AngleToVector(angleBody) + weaponOffset * 8 - weaponMiddle, weaponMiddle, lich.SwordAngle, new Vector2(lich.SwordScale), SpriteEffects.None, Color.White, 0); scene.DrawSpriteExt(spriteBody, 0, center - spriteBody.Middle, spriteBody.Middle, scene.Frame * 0.3f, new Vector2(0.6f), SpriteEffects.None, Color.Black, 0); } if (pass == DrawPass.Creature) { if (!curio.IsHeartless()) { scene.DrawSpriteExt(spriteHeart, 0, center + offset - spriteHeart.Middle, spriteHeart.Middle, 0, new Vector2(1), SpriteEffects.None, Color.White, 0); } } if (pass == DrawPass.Effect) { var headOffset = Util.AngleToVector(angleBody) * -8; scene.DrawSpriteExt(spriteHead, 0, center + headOffset + offset - spriteHead.Middle, spriteHead.Middle, angleBody, new Vector2(1), SpriteEffects.None, Color.White, 0); } scene.PopSpriteBatch(); }
public override void Draw(SceneGame scene, DrawPass pass) { var knife = SpriteLoader.Instance.AddSprite("content/knife"); scene.DrawSpriteExt(knife, 0, Position - knife.Middle, knife.Middle, Rotation * Frame, SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var crit = SpriteLoader.Instance.AddSprite("content/crit"); scene.DrawSpriteExt(crit, scene.AnimationFrame(crit, Frame, FrameEnd), Position - crit.Middle, crit.Middle, Angle, SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var wallBreak = SpriteLoader.Instance.AddSprite("content/rockfall_end"); scene.DrawSpriteExt(wallBreak, scene.AnimationFrame(wallBreak, Frame, FrameEnd), Position - wallBreak.Middle, wallBreak.Middle, 0, Vector2.One, SpriteEffects.None, Color, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var sawsprite = SpriteLoader.Instance.AddSprite("content/orb_red_saw"); scene.DrawSpriteExt(sawsprite, 0, Position - sawsprite.Middle, sawsprite.Middle, Angle, SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var statusPoisoned = SpriteLoader.Instance.AddSprite("content/status_poisoned"); scene.DrawSpriteExt(statusPoisoned, (int)(Frame * 0.25f), HeadPosition - statusPoisoned.Middle, statusPoisoned.Middle, 0, SpriteEffects.None, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var snakeHeadOpen = SpriteLoader.Instance.AddSprite("content/snake_open"); scene.DrawSpriteExt(snakeHeadOpen, 0, Position - snakeHeadOpen.Middle, snakeHeadOpen.Middle, Rotation * Frame, Mirror, 0); }
public override void Draw(SceneGame scene, DrawPass pass) { var bloodSpatter = SpriteLoader.Instance.AddSprite("content/blood_spatter"); scene.DrawSpriteExt(bloodSpatter, scene.AnimationFrame(bloodSpatter, Frame, FrameEnd), Position - bloodSpatter.Middle, bloodSpatter.Middle, Angle, SpriteEffects.None, 0); }