mirror of
https://github.com/islehorse/HISP.git
synced 2025-04-06 05:05:40 +12:00
91 lines
2.4 KiB
C#
Executable file
91 lines
2.4 KiB
C#
Executable file
using HISP.Server;
|
|
using System;
|
|
using System.Threading;
|
|
|
|
namespace HISP.Player
|
|
{
|
|
public class Dance : IDisposable
|
|
{
|
|
public const int DanceSpeed = 1000;
|
|
private Timer danceTimer;
|
|
public string Moves;
|
|
public int MoveIndex;
|
|
private User baseUser;
|
|
|
|
public Dance(User BaseUser, string DanceMoves)
|
|
{
|
|
baseUser = BaseUser;
|
|
baseUser.ActiveDance = this;
|
|
Moves = DanceMoves.ToLower();
|
|
MoveIndex = -1;
|
|
danceTimer = new Timer(new TimerCallback(onDanceTick), null, DanceSpeed, DanceSpeed);
|
|
}
|
|
|
|
private void onDanceTick(object state)
|
|
{
|
|
|
|
MoveIndex++;
|
|
if (MoveIndex >= Moves.Length)
|
|
goto done;
|
|
|
|
|
|
int onHorse = 0;
|
|
int facing = baseUser.Facing;
|
|
while (facing >= 5)
|
|
{
|
|
facing -= 5;
|
|
onHorse++;
|
|
}
|
|
|
|
char moveInDir = Moves[MoveIndex];
|
|
|
|
int direction;
|
|
|
|
switch(moveInDir)
|
|
{
|
|
case 'u':
|
|
direction = PacketBuilder.DIRECTION_UP;
|
|
break;
|
|
case 'd':
|
|
direction = PacketBuilder.DIRECTION_DOWN;
|
|
break;
|
|
case 'l':
|
|
direction = PacketBuilder.DIRECTION_LEFT;
|
|
break;
|
|
case 'r':
|
|
direction = PacketBuilder.DIRECTION_RIGHT;
|
|
break;
|
|
default:
|
|
goto done;
|
|
}
|
|
|
|
|
|
baseUser.Facing = direction + (onHorse * 5);
|
|
|
|
byte[] moveResponse = PacketBuilder.CreateMovement(baseUser.X, baseUser.Y, baseUser.CharacterId, baseUser.Facing, PacketBuilder.DIRECTION_NONE, false);
|
|
baseUser.LoggedinClient.SendPacket(moveResponse);
|
|
|
|
GameServer.UpdateUserFacingAndLocation(baseUser);
|
|
|
|
done:;
|
|
if (MoveIndex < Moves.Length)
|
|
{
|
|
danceTimer.Change(DanceSpeed, DanceSpeed);
|
|
}
|
|
else
|
|
{
|
|
this.Dispose();
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
baseUser.ActiveDance = null;
|
|
baseUser = null;
|
|
Moves = null;
|
|
danceTimer.Dispose();
|
|
danceTimer = null;
|
|
MoveIndex = -1;
|
|
}
|
|
}
|
|
}
|