Exemple #1
0
        public override void Update(FrameTick elapsedTime)
        {
            base.Update(elapsedTime);

            //get the new origin of the hitbox
            long add       = UpdateTick(elapsedTime, Speed);
            int  addedDist = Math.Min((int)add, MaxDistance * GraphicsManager.TileSize - DistanceTraveled);
            Loc  newOrigin = MapLoc + Dir.GetLoc() * (addedDist * reverse);

            //set the new origin
            MapLoc            = newOrigin;
            DistanceTraveled += addedDist;


            //update animation
            Emitter.SetupEmit(User, MapLoc, User.MapLoc, Dir, LocHeight);
            //update emittings (list of particles to emit here; place in main particle processor)
            Emitter.Update(DungeonScene.Instance, elapsedTime);

            //check to see if this hitbox needs to expire
            if (DistanceTraveled >= MaxDistance * GraphicsManager.TileSize)
            {
                if (Boomerang && reverse == 1)
                {
                    reverse          = -1;
                    DistanceTraveled = GraphicsManager.TileSize / 2;
                }
                //else
                //    Finished = true;
            }
        }
Exemple #2
0
 public ArcingHitbox(Character user, Loc startPoint, AnimData anim, FiniteEmitter tileEmitter, AttachPointEmitter emitter, Loc endPoint, int speed, int item, int delay)
     : base(user, startPoint * GraphicsManager.TileSize, tileEmitter, delay)
 {
     StartPoint  = startPoint;
     EndPoint    = endPoint;
     ItemAnim    = item;
     MaxDistance = (int)Math.Sqrt(((EndPoint - StartPoint) * GraphicsManager.TileSize).DistSquared());
     Speed       = (speed > 0) ? speed : Math.Max(1, (int)Math.Ceiling((double)MaxDistance / GraphicsManager.TileSize * GraphicsManager.MAX_FPS));
     Anim        = new AnimData(anim);
     Emitter     = (AttachPointEmitter)emitter.Clone();
     Emitter.SetupEmit(User, MapLoc, User.MapLoc, user.CharDir, LocHeight);
 }
Exemple #3
0
        public override void Update(FrameTick elapsedTime)
        {
            base.Update(elapsedTime);
            //get the new origin of the hitbox from the owner
            MapLoc = User.MapLoc;

            if (HitboxDone)
            {
                timeLingered += elapsedTime;
            }

            //update animation
            Emitter.SetupEmit(User, MapLoc, StartPoint * GraphicsManager.TileSize, Dir, LocHeight);
            //update emittings (list of particles to emit here; place in main particle processor)
            Emitter.Update(DungeonScene.Instance, elapsedTime);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 //the class will be in charge of its own hitbox movement
 //however, the current-action member of its owner may terminate early and remove this hitbox prematurely.
 //the owner class will guarantee that this hitbox will cover all the right places, as well as disposing this hitbox
 public AttachedCircleHitbox(Character user, Alignment targetAlignments, bool hitTiles, bool burstOnWall, Loc startPoint, AnimData anim, int animOffset,
                             FiniteEmitter tileEmitter, AttachPointEmitter emitter, int maxDistance, int dashTime, Dir8 dir, bool wide, int delay)
     : base(user, startPoint * GraphicsManager.TileSize, tileEmitter, delay)
 {
     TargetAlignments = targetAlignments;
     HitTiles         = hitTiles;
     BurstOnWall      = burstOnWall;
     StartPoint       = startPoint;
     MaxDistance      = maxDistance;
     DashTime         = dashTime;
     Dir        = dir;
     Wide       = wide;
     Anim       = new AnimData(anim);
     AnimOffset = animOffset;
     Emitter    = (AttachPointEmitter)emitter.Clone();
     Emitter.SetupEmit(User, MapLoc, MapLoc, user.CharDir, LocHeight);
 }
Exemple #6
0
 public CircleSweepHitbox(Character user, Alignment targetAlignments, bool hitTiles, bool burstOnWall, Loc startPoint, AnimData anim, FiniteEmitter tileEmitter,
                          AttachPointEmitter emitter, int speed, int delay, Dir8 dir, int maxDistance, bool boomerang, int item)
     : base(user, startPoint * GraphicsManager.TileSize + dir.GetLoc() * GraphicsManager.TileSize / 2, tileEmitter, delay)
 {
     TargetAlignments = targetAlignments;
     HitTiles         = hitTiles;
     BurstOnWall      = burstOnWall;
     StartPoint       = startPoint;
     Dir = dir;
     DistanceTraveled = GraphicsManager.TileSize / 2;
     MaxDistance      = maxDistance;
     Boomerang        = boomerang;
     Speed            = (speed > 0) ? speed : Math.Max(1, (int)Math.Ceiling((double)(MaxDistance - 0.5 + (Boomerang ? MaxDistance : 0)) * GraphicsManager.MAX_FPS));
     ItemAnim         = item;
     reverse          = 1;
     Anim             = new AnimData(anim);
     Emitter          = (AttachPointEmitter)emitter.Clone();
     Emitter.SetupEmit(User, MapLoc, User.MapLoc, user.CharDir, LocHeight);
 }