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 override IEnumerable <Wait> RoutineUse(Creature user, object target) { if (target is Creature targetCreature) { Consume(); ShowSkill(user); user.VisualPose = user.FlickPose(CreaturePose.Cast, CreaturePose.Stand, 70); yield return(user.WaitSome(50)); var effect = new FlareCharge(user.World, SpriteLoader.Instance.AddSprite("content/cinder_ender"), user, () => targetCreature.VisualTarget, 200); yield return(user.WaitSome(50)); new ScreenShakeRandom(user.World, 2, 150, LerpHelper.Invert(LerpHelper.Linear)); yield return(new WaitEffect(effect)); new ScreenFlashLocal(user.World, () => ColorMatrix.Ender(), targetCreature.VisualTarget, 60, 150, 80, 50); new EnderNuke(user.World, SpriteLoader.Instance.AddSprite("content/nuke_ender"), targetCreature.VisualTarget, 0.6f, 80); new ScreenShakeRandom(user.World, 8, 80, LerpHelper.QuarticIn); //new BigExplosion(user.World, () => target.VisualTarget, (pos, time) => new EnderExplosion(user.World, pos, Vector2.Zero, time)); yield return(user.WaitSome(10)); var wait = user.Attack(targetCreature, SkillUtil.SafeNormalize(targetCreature.VisualTarget - user.VisualTarget), FlareAttack); yield return(wait); yield return(user.WaitSome(20)); } }
void Show() { print("Should show"); // print ("Line reference color is : " + _linesReferenceColor); StartCoroutine(LerpHelper.ColorFade(_lineMaterial, _lineColor, StateManager._instance._lerpTime, "Quintic", (0.7f * StateManager._instance._lerpTime))); }
void Hide() { // first, save the current scale _referenceScale = this.gameObject.transform.localScale; // Make the UI disappear StartCoroutine(LerpHelper.LerpScaleWithEasing(this.gameObject, this.gameObject.transform.localScale, Vector3.zero, _lerpTime, "Quintic", false, (0.7f * _lerpTime) + _randomOffset)); }
private void Awake() { this._lerpHelper = new LerpHelper(0, 1, 0.01f, 1f, LerpHelper.LerpType.Hermite) { Speed = this._speed }; }
public override void Draw(Scene scene) { var ui = SpriteLoader.Instance.AddSprite("content/ui_box"); int offset = (scene.Viewport.Width - Width) / 2; int widthInterior = Width - CardWidth; int segmentWidth = widthInterior / (Actions.Length - 1); for (int i = 0; i < Actions.Length; i++) { var action = Actions[i]; if (action == null) { continue; } int height = Height; if (!action.Enabled()) { height = height * 4 / 5; } height += (int)MathHelper.Lerp(0, 30, (float)LerpHelper.QuadraticOut(0, 1, action.HoverFrame.Slide)); int x = offset + i * segmentWidth; int y = scene.Viewport.Height - (int)MathHelper.Lerp(0, height, (float)LerpHelper.ElasticOut(0, 1, action.Frame.Slide)); CardUIs[i].Draw(FontRenderer, x, y, 1); //DrawLabelledUI(scene, ui, ui, new Rectangle(x, y, CardWidth, height + 40), action.Name); //scene.DrawText(action.Description, new Vector2(x, y), Alignment.Center, new TextParameters().SetColor(Color.White, Color.Black).SetConstraints(CardWidth, height)); } }
IEnumerator OpenDoor() { if (keyProgress == null) { keyProgress = Instantiate <Transform>(keyProgressPrefab); keyProgress.transform.position = key.transform.position.SwapZ(10); keyProgress.localScale = Vector3.zero; } LerpDelegate openFunc = delegate(float openFraction) { openProgress = openFraction; SetBallSize(openProgress); SetDoorAlpha(1 - openProgress); }; IEnumerator lerpCoroutine = LerpHelper.Lerp(openFunc, secondsToOpen); while (lerpCoroutine.MoveNext()) { yield return(null); } //yield return StartCoroutine(LerpHelper.Lerp(openFunc, secondsToOpen)); doorOpened = true; door.SetActive(false); }
public void Steppy(float addAngle) { var active = Curio.GetActionHolder(ActionSlot.Active); var passive = Curio.GetActionHolder(ActionSlot.Passive); var orientable = Curio.GetBehavior <BehaviorOrientable>(); var tile = Curio.GetMainTile(); var actions = new List <ActionWrapper>(); if (!tile.IsChasm()) { if (Momentum.Amount >= 16) { var direction = Util.RotateVector(Momentum.Direction, addAngle); var offset = direction.ToTileOffset(); var slide = MathHelper.Clamp(Momentum.Amount / 32f, 0, 1); var speed = (float)LerpHelper.QuadraticOut(0.1f, 0.5f, slide); var time = 1 / speed; var neighbor = tile.GetNeighborOrNull(offset.X, offset.Y); if (neighbor != null && !neighbor.IsSolid()) { actions.Add(new ActionClearStab(Curio).InSlot(ActionSlot.Active)); actions.Add(new ActionChangeMomentum(Curio, -4).InSlot(ActionSlot.Active)); actions.Add(new ActionMoveForward(Curio, direction, 5).InSlot(ActionSlot.Active)); } } } actions.Apply(Curio); }
public void AddDefaultMove(List <ActionWrapper> actions) { var tile = Curio.GetMainTile(); if (tile == null) { return; } if (Momentum.Amount > 0) { var offset = Momentum.Direction.ToTileOffset(); var slide = MathHelper.Clamp(Momentum.Amount / 32f, 0, 1); var speed = (float)LerpHelper.QuadraticOut(0.1f, 0.5f, slide); var time = 1 / speed; var neighbor = tile.GetNeighborOrNull(offset.X, offset.Y); if (neighbor == null || neighbor.IsSolid()) { if (neighbor != null && (Momentum.Amount > 10 || (neighbor.IsSpiky() && Momentum.Amount > 2))) { actions.Add(new ActionCollision(Curio, neighbor, 10).InSlot(ActionSlot.Passive)); } actions.Add(new ActionStop(Curio).InSlot(ActionSlot.Passive)); } else { actions.Add(new ActionMoveForward(Curio, Momentum.Direction, time).InSlot(ActionSlot.Passive)); } } else if (tile.HasBehaviors <BehaviorChasm>()) { actions.Add(new ActionFall(Curio, 30).InSlot(ActionSlot.Passive)); } }
public override void Draw(SceneGame scene, DrawPass pass) { var posBag = Vector2.Transform(PositionBag, Matrix.Invert(scene.WorldTransform)); var offset = Offset * (float)Math.Sin(Frame / FrameEnd * Math.PI); Item.DrawIcon(scene, Vector2.Lerp(PositionWorld, posBag, (float)LerpHelper.CircularIn(0, 1, Frame / FrameEnd)) + offset); }
private IEnumerable <Wait> RoutineQuake(Creature user, Tile impactTile, int radius, ICollection <Tile> tiles) { var tileSet = impactTile.GetNearby(radius).Where(tile => tile.Opaque).Where(tile => GetSquareDistance(impactTile, tile) <= radius * radius).Shuffle(Random); int chargeTime = 60; List <Tile> damageTiles = new List <Tile>(); foreach (Tile tile in tileSet) { tile.VisualUnderColor = ChargeColor(user, chargeTime); if (!tiles.Contains(tile)) { damageTiles.Add(tile); } tiles.Add(tile); } new ScreenShakeRandom(user.World, 4, chargeTime + 60, LerpHelper.Invert(LerpHelper.Linear)); yield return(user.WaitSome(chargeTime)); new LightningField(user.World, SpriteLoader.Instance.AddSprite("content/lightning_ender"), tileSet, 60); yield return(user.WaitSome(60)); new ScreenShakeRandom(user.World, 8, 60, LerpHelper.Linear); foreach (Tile tile in tileSet) { Vector2 offset = new Vector2(-0.5f + Random.NextFloat(), -0.5f + Random.NextFloat()) * 16; if (Random.NextDouble() < 0.7) { new EnderExplosion(user.World, tile.VisualTarget + offset, Vector2.Zero, 0, Random.Next(14) + 6); } tile.VisualUnderColor = () => Color.TransparentBlack; tile.MakeFloor(); } }
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); } }
protected static int GetFrameOffset(PoseData poseData) { int frameOffset = 0; switch (poseData.Pose) { case (CreaturePose.Stand): frameOffset = 1; break; case (CreaturePose.Walk): double lerp = LerpHelper.ForwardReverse(0, 2, (poseData.Frame / 50.0) % 1); frameOffset = (int)Math.Round(lerp); break; case (CreaturePose.Attack): frameOffset = 3; break; case (CreaturePose.Cast): frameOffset = 4; break; } return(frameOffset); }
// Hide the lines void Hide() { // _linesSharedMaterial = _lineMaterial; // _linesReferenceColor = _linesSharedMaterial.color; StartCoroutine(LerpHelper.ColorFade(_lineMaterial, Color.clear, StateManager._instance._lerpTime, "Quintic", 0.0f)); }
public void Run() { Random random = new Random(); var world = Origin.GetWorld(); var alive = Target.GetBehavior <BehaviorAlive>(); var sword = Origin.GetBehavior <BehaviorSword>(); var bloodfire = Origin.GetBehavior <BehaviorSkillBloodfireBlade>(); bloodfire.Extinguish(); new TimeFade(world, 0.05f, LerpHelper.ExponentialIn, 40); Target.GetFlashHelper()?.AddFlash(ColorMatrix.Flat(Color.White), 5); Target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.QuadraticOut, 5); new HitStop(world, 0, 5); alive.SetDamage(alive.HP); Target.GetFlashHelper()?.AddFlash(ColorMatrix.Translate(new Color(255, 64, 16)), LerpHelper.Invert(LerpHelper.QuadraticOut), (int)ExplosionTime.EndTime, false); Target.GetShakeHelper()?.AddShakeRandom(3, LerpHelper.Invert(LerpHelper.QuadraticOut), (int)ExplosionTime.EndTime, false); if (alive.CurrentDead) { if (Origin == world.PlayerCurio) { world.RunStats.Kills += 1; } } if (sword != null) { sword.HasBlood = false; } }
float GetFalloff() { float timeFalloff = GetTimeFalloff(); Creature player = World.Player; if (player == null) { return(0.0f); } Vector2 dist = player.VisualTarget - Position; float length = dist.Length(); if (length < FullRadius) { return(1.0f * timeFalloff); } else if (length < FullRadius + FalloffRadius) { return((float)LerpHelper.CubicIn(1, 0, (length - FullRadius) / FalloffRadius) * timeFalloff); } else { return(0.0f); } }
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); } } }
private float DarkRadius(float a, float b, float slide, float split) { float startSlide = Util.ReverseLerp(slide, 0f, split); float endSlide = Util.ReverseLerp(slide, split, 1f); return(slide < 0.2f ? (float)LerpHelper.QuadraticOut(a, b, startSlide) : (float)LerpHelper.QuadraticIn(b, a, endSlide)); }
public override void Activate(Creature creature) { var cloak = new Cloak(creature, 10); cloak.OnUpdate += (c) => { float size = 0.15f + 0.15f * Random.NextFloat(); size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime)); if (c.Frame.Time % 2 == 0) { var pos = c.Creature.VisualTarget; int totaltime = 5 + Random.Next(10); float bigSize = 1.5f + Random.NextFloat(); Color color = Color.Lerp(Color.White, Color.Gray, Random.NextFloat()); new ParticleCutter(World, totaltime + Random.Next(4)) { Sprite = SpriteLoader.Instance.AddSprite("content/cutter"), FadeSlide = 0.75f, Position = pos, Angle = Random.NextAngle(), RotationStart = -MathHelper.TwoPi / totaltime, RotationEnd = -(MathHelper.TwoPi / totaltime) * 0.5f, AngleLerp = LerpHelper.Linear, Scale = size, ScaleEnd = size * bigSize, ScaleLerp = LerpHelper.CircularOut, Color = color, Pass = DrawPass.EffectAdditive, }; } }; }
public static List <Vector2> GetWingPositions(Vector2 position, float slide) { List <Vector2> positions = new List <Vector2>(); positions.AddRange(GetWingPositions(position, 9, (float)LerpHelper.QuadraticIn(0, 1, slide), slide)); positions.AddRange(GetWingPositions(position, 9, (float)LerpHelper.QuadraticIn(0, -1, slide), slide)); return(positions); }
public void ExitToRight() { var from = rect.anchoredPosition; var to = positionRight; moving = new LerpHelper <Vector2>(from, to, Vector2.Lerp, speed, Vector2.Distance(from, to)); screenPosition = ScreenPosition.Left; }
public void PlayEraseHeight(float from, float to, float eraseSeconds) { StartCoroutine(LerpHelper.LerpCoroutine(eraseSeconds, _percentage => { this.ratioHeight = Mathf.Lerp(from, to, _percentage); CutImage(); })); }
public override void Activate(Creature creature) { var fire_small = SpriteLoader.Instance.AddSprite("content/fire_small"); var cloak = new Cloak(creature, 10); cloak.OnUpdate += (c) => { float size = 0.15f + 0.15f * Random.NextFloat(); size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime)); if (c.Frame.Time % 1 == 0) { var pos = c.Creature.VisualTarget; int totaltime = 5 + Random.Next(10); float bigSize = 1.5f + Random.NextFloat(); Color color = new Color(255, 64, 16); new ParticleCutter(World, totaltime + Random.Next(4)) { Sprite = SpriteLoader.Instance.AddSprite("content/cutter"), FadeSlide = 0.75f, Position = pos, Angle = Random.NextAngle(), RotationStart = -MathHelper.TwoPi / totaltime, RotationEnd = -(MathHelper.TwoPi / totaltime) * 0.5f, AngleLerp = LerpHelper.Linear, Scale = size, ScaleEnd = size * bigSize, ScaleLerp = LerpHelper.CircularOut, Color = color, Pass = DrawPass.EffectAdditive, }; } }; for (int i = 0; i < 3; i++) { float angle = Random.NextFloat() * MathHelper.TwoPi; float distance = 12 + Random.NextFloat() * 12; int time = Random.Next(10) + 20; var waterParticle = new ParticleThrow(World, null, creature.VisualTarget, creature.VisualTarget + Util.AngleToVector(angle) * distance, 16 + Random.NextFloat() * 8, LerpHelper.Linear, LerpHelper.QuadraticOut, time, 0.7f) { Scale = Random.NextFloat() * 0.75f + 0.25f, Pass = DrawPass.EffectAdditive, }; waterParticle.OnUpdate += (particle) => { if (particle.Frame.Time % 4 == i % 4) { var explosion = new ParticleExplosion(World, fire_small, Vector2.Zero, LerpHelper.Linear, LerpHelper.Linear, 10) { Position = particle.Position, }; } }; } }
public void LerpTo(Vector2 anchoredPosition) { lerpPosition = new LerpHelper <Vector2>( rectTransform.anchoredPosition, anchoredPosition, Vector2.Lerp, 3000, Vector2.Distance(anchoredPosition, rectTransform.anchoredPosition)); }
public void Hide() { GetComponent <RectTransform>().anchoredPosition = positionLeft; screenPosition = ScreenPosition.Left; if (moving != null) { moving = null; } }
public void Show() { GetComponent <RectTransform>().anchoredPosition = Vector2.zero; screenPosition = ScreenPosition.Center; if (moving != null) { moving = null; } OnEnter(transitionedFrom); }
public void FixedUpdate() { if (CurrentProgress <= 0 && Direction == -1 || CurrentProgress >= TransitionDuration && Direction == 1) { return; } CurrentProgress += Direction * Time.deltaTime; transform.localPosition = Vector3.Lerp(StartPosition, EndPosition, LerpHelper.SmoothStep2(CurrentProgress / TransitionDuration)); }
void Start() { if (_fadeOut) { IEnumerator disappear = LerpHelper.LerpScaleWithEasing(this.gameObject, this.gameObject.transform.localScale, new Vector3(0.0f, 0.0f, 0.0f), _fadeOutTime, "Quintic", true, _lifeTime); StartCoroutine(disappear); } else { Destroy(this.gameObject, _lifeTime); } }
public override void Activate(Creature creature) { var particle = SpriteLoader.Instance.AddSprite("content/rock"); var cloak = new Cloak(creature, 10); cloak.OnUpdate += (c) => { float size = 0.15f + 0.15f * Random.NextFloat(); size *= (float)LerpHelper.CircularOut(1, 0.5, c.Frame.GetSubSlide(10, c.Frame.EndTime)); if (c.Frame.Time % 1 == 0) { var pos = c.Creature.VisualTarget; int totaltime = 5 + Random.Next(10); float bigSize = 1.5f + Random.NextFloat(); Color color = new Color(64, 128, 255); new ParticleCutter(World, totaltime + Random.Next(4)) { Sprite = SpriteLoader.Instance.AddSprite("content/cutter"), FadeSlide = 0.75f, Position = pos, Angle = Random.NextAngle(), RotationStart = -MathHelper.TwoPi / totaltime, RotationEnd = -(MathHelper.TwoPi / totaltime) * 0.5f, AngleLerp = LerpHelper.Linear, Scale = size, ScaleEnd = size * bigSize, ScaleLerp = LerpHelper.CircularOut, Color = color, Pass = DrawPass.EffectAdditive, }; } if (c.Frame.Time % 2 == 0) { for (int i = 0; i < 3; i++) { float angle = Random.NextFloat() * MathHelper.TwoPi; float distance = 12 + Random.NextFloat() * 12; int time = Random.Next(10) + 10; var iceParticle = new ParticleThrow(World, particle, creature.VisualTarget + Util.AngleToVector(angle) * 4, creature.VisualTarget + Util.AngleToVector(angle) * distance, 4 + Random.NextFloat() * 8, LerpHelper.Linear, LerpHelper.QuadraticOut, time, 0.7f) { SubImage = Random.Next(particle.SubImageCount), Angle = Random.NextAngle(), ColorMatrix = ColorMatrix.TwoColorLight(Color.Blue, Color.White), Pass = DrawPass.EffectAdditive, }; } } }; }
public virtual void Update() { if (moving != null) { moving.Update(Time.deltaTime); rect.anchoredPosition = moving.Lerp(); if (moving.IsDone()) { moving = null; } } }