protected override void UpdateFrameInternal() { if (FromLoc != ToLoc) { double maxDistance = Math.Sqrt(((FromLoc - ToLoc) * GraphicsManager.TileSize).DistSquared()); LocHeight = AnimMath.GetArc(maxDistance / 2, ANIM_TIME, ActionTime.ToFrames()); Loc diff = (ToLoc - FromLoc) * GraphicsManager.TileSize; diff = new Loc((int)(diff.X * ActionTime.FractionOf(ANIM_TIME)), (int)(diff.Y * ActionTime.FractionOf(ANIM_TIME))); MapLoc = diff + FromLoc * GraphicsManager.TileSize; } else { MapLoc = FromLoc * GraphicsManager.TileSize; } }
public override void Update(FrameTick elapsedTime) { base.Update(elapsedTime); //update the position of the item in the sky long add = UpdateTick(elapsedTime, Speed); Loc diff = (EndPoint - StartPoint) * GraphicsManager.TileSize; DistanceTraveled += Math.Min((int)add, MaxDistance - DistanceTraveled); MapLoc = StartPoint * GraphicsManager.TileSize + diff * DistanceTraveled / MaxDistance; LocHeight = AnimMath.GetArc(MaxDistance / 2, MaxDistance, DistanceTraveled); //update animation Emitter.SetupEmit(User, MapLoc, User.MapLoc, User.CharDir, LocHeight); //update emittings (list of particles to emit here; place in main particle processor) Emitter.Update(DungeonScene.Instance, elapsedTime); }
protected override void UpdateFrameInternal() { int totalTime = ANIM_TIME; if (ActionTime < totalTime) { double intb = (double)ActionTime.FractionOf(totalTime); MapLoc = new Loc(AnimMath.Lerp(FromLoc.X * GraphicsManager.TileSize, ToLoc.X * GraphicsManager.TileSize, intb), AnimMath.Lerp(FromLoc.Y * GraphicsManager.TileSize, ToLoc.Y * GraphicsManager.TileSize, intb)); double maxDistance = Math.Sqrt(((FromLoc - ToLoc) * GraphicsManager.TileSize).DistSquared()); LocHeight = AnimMath.GetArc(maxDistance / 2, ANIM_TIME, ActionTime.ToFrames()); } else { double intb = (double)(ActionTime - totalTime).FractionOf(BOUNCE_TIME); MapLoc = new Loc(AnimMath.Lerp(ToLoc.X * GraphicsManager.TileSize, RecoilLoc.X * GraphicsManager.TileSize, intb), AnimMath.Lerp(ToLoc.Y * GraphicsManager.TileSize, RecoilLoc.Y * GraphicsManager.TileSize, intb)); LocHeight = AnimMath.GetArc(GraphicsManager.TileSize / 2, FrameTick.FrameToTick(BOUNCE_TIME), (ActionTime - totalTime).Ticks); } }
protected override void UpdateFrameInternal() { int dist = (FromLoc - ToLoc).Dist8(); int totalTime = KNOCKBACK_TIME_PER_TILE * dist; if (ActionTime < totalTime) { double intb = (double)ActionTime.FractionOf(totalTime); MapLoc = new Loc(AnimMath.Lerp(FromLoc.X * GraphicsManager.TileSize, ToLoc.X * GraphicsManager.TileSize, intb), AnimMath.Lerp(FromLoc.Y * GraphicsManager.TileSize, ToLoc.Y * GraphicsManager.TileSize, intb)); LocHeight = 0; } else { double intb = (double)(ActionTime - totalTime).FractionOf(BOUNCE_TIME); MapLoc = new Loc(AnimMath.Lerp(ToLoc.X * GraphicsManager.TileSize, RecoilLoc.X * GraphicsManager.TileSize, intb), AnimMath.Lerp(ToLoc.Y * GraphicsManager.TileSize, RecoilLoc.Y * GraphicsManager.TileSize, intb)); LocHeight = AnimMath.GetArc(GraphicsManager.TileSize / 2, FrameTick.FrameToTick(BOUNCE_TIME), (ActionTime - totalTime).Ticks); } }