using Microsoft.Xna.Framework;
using System;
using System.IO;
namespace FF8
{
public class Entry //Rectangle + File
{
#region Fields
public byte[] UNK;
public Vector2 Location;
public Vector2 Size;
private Loc loc;
public Vector2 Offset;
public Vector2 End;
#endregion Fields
public string ToStringHeader = "{File},{Part},{CustomPallet},{Location.X},{Location.Y},{Size.X},{Size.Y},{Offset.X},{Offset.Y},{End.X},{End.Y},{Tile.X},{Tile.Y},{Fill.X},{Fill.Y},{Snap_Right},{Snap_Bottom}\n";
public override string ToString()
{
return $"{File},{Part},{CustomPallet},{Location.X},{Location.Y},{Size.X},{Size.Y},{Offset.X},{Offset.Y},{End.X},{End.Y},{Tile.X},{Tile.Y},{Fill.X},{Fill.Y},{Snap_Right},{Snap_Bottom}\n";
}
#region Constructors
public Entry()
{
UNK = new byte[2];
File = 0;
Part = 1;
}
#endregion Constructors
#region Properties
public ushort CurrentPos { get; set; }
public sbyte CustomPallet { get; internal set; } = -1;
public byte File { get; set; }
//public Loc GetLoc => loc;
public Rectangle GetRectangle => new Rectangle(Location.ToPoint(),Size.ToPoint());
///
/// point where you want to stop drawing from right side so -8 would stop 8*scale pixels from edge
///
//public sbyte Offset_X2 { get; internal set; }
///
/// point where you want to stop drawing from bottom side so -8 would stop 8*scale pixels
/// from edge
///
//public sbyte Offset_Y2 { get; internal set; }
public byte Part { get; set; } = 1;
public bool Snap_Bottom { get; internal set; } = false;
public bool Snap_Right { get; internal set; } = false;
///
/// Vector2.Zero = no tile, Vector2.One = tile x & y, Vector.UnitX = tile x, Vector.UnitY = tile y
///
public Vector2 Tile { get; internal set; } = Vector2.Zero;
public float Height { get =>Size.Y; internal set=> Size.Y=value; }
public float Width { get=>Size.X; internal set=> Size.X=value; }
public float Y { get => Location.Y; internal set => Location.Y = value; }
public float X { get => Location.X; internal set => Location.X = value; }
public Vector2 Fill { get; internal set; }
#endregion Properties
#region Methods
public void LoadfromStreamSP2( BinaryReader br, UInt16 loc, Entry prev, ref byte fid)
{
if (loc > 0)
br.BaseStream.Seek(loc + 4, SeekOrigin.Begin);
CurrentPos = loc;
Location.X = br.ReadByte();
Location.Y = br.ReadByte();
UNK = br.ReadBytes(2);
Size.X = br.ReadByte();
Offset.X = br.ReadSByte();
Size.Y = br.ReadByte();
Offset.Y = br.ReadSByte();
if (prev != null && Location.Y < prev.Y)
fid++;
File = fid;
}
public void SetLoc(Loc value) => loc = value;
internal void LoadfromStreamSP1(BinaryReader br)
{
CurrentPos = (ushort)br.BaseStream.Position;
Location.X = br.ReadByte();
Location.Y = br.ReadByte();
UNK = br.ReadBytes(2);
Size.X = br.ReadByte();
Offset.X = br.ReadSByte();
Size.Y = br.ReadByte();
Offset.Y = br.ReadSByte();
}
#endregion Methods
}
}