Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

158 lines
3.6 KiB
C#

using System;
using Server;
using Server.Items;
namespace Solaris.BoardGames
{
//a gamepiece behaves much like an addon component
public class GamePiece : Item
{
//offset from the boardgame control item
public Point3D Offset;
//reference to the LOSBlocker used to block line of sight thru this gamepiece
public LOSBlocker _Blocker;
//reference to the boardgame control item that this piece belongs to
public BoardGameControlItem BoardGameControlItem;
//randomize itemid constructor
public GamePiece( int itemidmin, int itemidmax, string name ) : this( Utility.RandomMinMax( itemidmin, itemidmax ), name )
{
}
//randomize itemid constructor
public GamePiece( int itemidmin, int itemidmax, string name, bool blocklos ) : this( Utility.RandomMinMax( itemidmin, itemidmax ), name, blocklos )
{
}
//default no block los constructor
public GamePiece( int itemid, string name ) : this( itemid, name, false )
{
}
//master constructor
public GamePiece( int itemid, string name, bool blocklos ) : base( itemid )
{
Movable = false;
Name = name;
if( blocklos )
{
_Blocker = new LOSBlocker();
}
}
//deserialize constructor
public GamePiece( Serial serial ) : base( serial )
{
}
public void RegisterToBoardGameControlItem( BoardGameControlItem boardgamecontrolitem, Point3D offset )
{
BoardGameControlItem = boardgamecontrolitem;
Offset = offset;
UpdatePosition();
}
//move the item based on its position with respect to the boardgame control item
public void UpdatePosition()
{
if( BoardGameControlItem != null )
{
MoveToWorld( new Point3D( BoardGameControlItem.X + BoardGameControlItem.BoardOffset.X + Offset.X, BoardGameControlItem.Y + BoardGameControlItem.BoardOffset.Y + Offset.Y, BoardGameControlItem.Z + BoardGameControlItem.BoardOffset.Z + Offset.Z ), BoardGameControlItem.BoardMap );
}
else
{
Delete();
}
}
public override void OnLocationChange( Point3D old )
{
if( BoardGameControlItem != null )
{
BoardGameControlItem.Location = new Point3D( X - BoardGameControlItem.BoardOffset.X - Offset.X, Y - BoardGameControlItem.BoardOffset.Y - Offset.Y, Z - BoardGameControlItem.BoardOffset.Z - Offset.Z );
}
if( _Blocker != null )
{
_Blocker.MoveToWorld( Location, Map );
}
}
public override void OnMapChange()
{
if( BoardGameControlItem != null && BoardGameControlItem.BoardMap != Map )
{
BoardGameControlItem.BoardMap = Map;
}
if( _Blocker != null )
{
_Blocker.MoveToWorld( Location, Map );
}
}
public override void OnAfterDelete()
{
base.OnAfterDelete();
if( BoardGameControlItem != null )
{
BoardGameControlItem.Delete();
}
if( _Blocker != null )
{
_Blocker.Delete();
}
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( 1 );
writer.Write( (Item)_Blocker );
writer.Write( (Item)BoardGameControlItem );
writer.Write( Offset.X );
writer.Write( Offset.Y );
writer.Write( Offset.Z );
}
public override void Deserialize( GenericReader reader )
{
base.Deserialize( reader );
int version = reader.ReadInt();
switch( version )
{
default:
case 1:
{
_Blocker = (LOSBlocker)reader.ReadItem();
goto case 0;
}
case 0:
{
BoardGameControlItem = (BoardGameControlItem)reader.ReadItem();
Offset.X = reader.ReadInt();
Offset.Y = reader.ReadInt();
Offset.Z = reader.ReadInt();
break;
}
}
}
}
}