コード例 #1
0
        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;
            }
        }
コード例 #2
0
ファイル: Hitbox.cs プロジェクト: Parakoopa/RogueEssence
        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);
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
        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);
            }
        }