public override void HandleEvent(bool DownStream, Backend.Events eventID, params object[] data)
{
if (DownStream)
{
switch (eventID)
{
case Backend.Events.MoveActor:
{
int id = (int)data[0];
Backend.Coords coords = (Backend.Coords)data[3];
if ((data.Length > 4) && (data[4] is Backend.Coords))
_actors[id].position = _map2screen((Backend.Coords)data[4]); // Teleport user
_actors[id].target = _map2screen(coords);
};
break;
case Backend.Events.Magic:
_actors[(int)data[0]].effect = new MapEffect(_environment[2][2], new Backend.Coords(_actors[(int)data[0]].position.x + 7, _actors[(int)data[0]].position.y + 2));
break;
case Backend.Events.ExplodeProjectile:
if (data[2] != null)
{
int id = ((Backend.Actor)data[2]).id;
_actors[id].effect = new MapEffect(_environment[2][0], new Backend.Coords(_actors[id].position.x + 7, _actors[id].position.y + 2));
}
else
{
addEffect(2, _map2screen((Backend.Coords)data[1]));
}
RemoveProjectile(((ProjectileTile)data[0]).id);
break;
case Backend.Events.AnimateActor:
{
int id = (int)data[0];
if (id < _map.actors.Count)
{
Backend.Activity activity = (Backend.Activity)data[1];
bool delay = false;
bool isLock = true;
if (data.Length > 2) delay = (bool)data[2];
if (data.Length > 3)
_parent.HandleEvent(false, Backend.Events.MoveActor, id, (Backend.Direction)data[3], _map.actors[id].moveIndex, _map.actors[id].tile.coords);
if ((activity == Backend.Activity.Die) || (activity == Backend.Activity.Hit))
{
_actors[id].effect = new MapEffect(_environment[2][1], new Backend.Coords(_actors[id].position.x + 7, _actors[id].position.y + 2));
}
if (delay)
{
_actors[id].PlayNowOrAfterMove(activity, isLock);
}
else
{
_actors[id].EndMoveAndPlay(activity, isLock);
};
}
/*bool waitForAnim = (bool)data[2];*/
}
break;
}
}
else
{
_parent.HandleEvent(true, eventID, data);
}
}