Draw skeleton for gfmdl
This commit is contained in:
parent
0fbb18ac85
commit
6f22257113
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -87,11 +87,11 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
public void Load(System.IO.Stream stream)
|
public void Load(System.IO.Stream stream)
|
||||||
{
|
{
|
||||||
|
Text = FileName;
|
||||||
DrawableContainer.Name = FileName;
|
DrawableContainer.Name = FileName;
|
||||||
|
|
||||||
header = new Header();
|
header = new Header();
|
||||||
header.Read(new FileReader(stream));
|
header.Read(new FileReader(stream), this);
|
||||||
DrawableContainer.Drawables.Add(header.Skeleton);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
public void Unload()
|
public void Unload()
|
||||||
@ -114,9 +114,10 @@ namespace FirstPlugin
|
|||||||
public List<string> TextureMaps = new List<string>();
|
public List<string> TextureMaps = new List<string>();
|
||||||
public List<string> Materials = new List<string>();
|
public List<string> Materials = new List<string>();
|
||||||
|
|
||||||
public void Read(FileReader reader)
|
public void Read(FileReader reader, GFBMDL Root)
|
||||||
{
|
{
|
||||||
Skeleton = new STSkeleton();
|
Skeleton = new STSkeleton();
|
||||||
|
Root.DrawableContainer.Drawables.Add(Skeleton);
|
||||||
|
|
||||||
reader.SetByteOrder(false);
|
reader.SetByteOrder(false);
|
||||||
|
|
||||||
@ -147,9 +148,10 @@ namespace FirstPlugin
|
|||||||
|
|
||||||
if (BoneDataOffset != 0)
|
if (BoneDataOffset != 0)
|
||||||
{
|
{
|
||||||
|
Root.Nodes.Add("Skeleton");
|
||||||
|
|
||||||
reader.Seek(BoneDataOffset, SeekOrigin.Begin);
|
reader.Seek(BoneDataOffset, SeekOrigin.Begin);
|
||||||
uint Count = reader.ReadUInt32();
|
uint Count = reader.ReadUInt32();
|
||||||
Console.WriteLine($"BoneCount {Count}");
|
|
||||||
|
|
||||||
for (int i = 0; i < Count; i++)
|
for (int i = 0; i < Count; i++)
|
||||||
{
|
{
|
||||||
@ -157,7 +159,16 @@ namespace FirstPlugin
|
|||||||
bone.Read(reader);
|
bone.Read(reader);
|
||||||
Skeleton.bones.Add(bone);
|
Skeleton.bones.Add(bone);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var bone in Skeleton.bones)
|
||||||
|
{
|
||||||
|
if (bone.Parent == null)
|
||||||
|
Root.Nodes[0].Nodes.Add(bone);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Skeleton.update();
|
||||||
|
Skeleton.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Write(FileWriter writer)
|
public void Write(FileWriter writer)
|
||||||
@ -180,7 +191,7 @@ namespace FirstPlugin
|
|||||||
reader.SeekBegin(BoneDataOffset);
|
reader.SeekBegin(BoneDataOffset);
|
||||||
long InfoPosition = reader.Position;
|
long InfoPosition = reader.Position;
|
||||||
|
|
||||||
uint BoneInfoOffset = reader.ReadUInt32();
|
int BoneInfoOffset = reader.ReadInt32();
|
||||||
|
|
||||||
//Read the info section for position data
|
//Read the info section for position data
|
||||||
reader.SeekBegin(InfoPosition - BoneInfoOffset);
|
reader.SeekBegin(InfoPosition - BoneInfoOffset);
|
||||||
@ -188,47 +199,56 @@ namespace FirstPlugin
|
|||||||
BoneInfo = new BoneInfo();
|
BoneInfo = new BoneInfo();
|
||||||
BoneInfo.Read(reader);
|
BoneInfo.Read(reader);
|
||||||
|
|
||||||
|
RotationType = BoneRotationType.Euler;
|
||||||
|
Checked = true;
|
||||||
|
|
||||||
if (BoneInfo.NamePosition != 0)
|
if (BoneInfo.NamePosition != 0)
|
||||||
{
|
{
|
||||||
reader.SeekBegin(DataPosition + BoneInfo.NamePosition);
|
reader.SeekBegin(InfoPosition + BoneInfo.NamePosition);
|
||||||
uint NameLength = reader.ReadUInt32();
|
uint NameLength = reader.ReadUInt32();
|
||||||
Text = reader.ReadString((int)NameLength);
|
Text = reader.ReadString((int)NameLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoneInfo.RotationPosition != 0)
|
if (BoneInfo.RotationPosition != 0)
|
||||||
{
|
{
|
||||||
reader.SeekBegin(DataPosition + BoneInfo.RotationPosition);
|
reader.SeekBegin(InfoPosition + BoneInfo.RotationPosition);
|
||||||
float RotationX = reader.ReadSingle();
|
float RotationX = reader.ReadSingle();
|
||||||
float RotationY = reader.ReadSingle();
|
float RotationY = reader.ReadSingle();
|
||||||
float RotationZ = reader.ReadSingle();
|
float RotationZ = reader.ReadSingle();
|
||||||
rotation = new float[] { RotationX,RotationY, RotationZ };
|
rotation = new float[] { RotationX,RotationY, RotationZ };
|
||||||
|
|
||||||
|
Console.WriteLine($"RotationX {RotationX} RotationY {RotationY} RotationX {RotationX} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoneInfo.TranslationPosition != 0)
|
if (BoneInfo.TranslationPosition != 0)
|
||||||
{
|
{
|
||||||
reader.SeekBegin(DataPosition + BoneInfo.RotationPosition);
|
reader.SeekBegin(InfoPosition + BoneInfo.TranslationPosition);
|
||||||
float TranslateX = reader.ReadSingle();
|
float TranslateX = reader.ReadSingle();
|
||||||
float TranslateY = reader.ReadSingle();
|
float TranslateY = reader.ReadSingle();
|
||||||
float TranslateZ = reader.ReadSingle();
|
float TranslateZ = reader.ReadSingle();
|
||||||
position = new float[] { TranslateX, TranslateY, TranslateZ };
|
position = new float[] { TranslateX, TranslateY, TranslateZ };
|
||||||
|
|
||||||
|
Console.WriteLine($"TranslateX {TranslateX} TranslateY {TranslateY} TranslateZ {TranslateZ} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoneInfo.ScalePosition != 0)
|
if (BoneInfo.ScalePosition != 0)
|
||||||
{
|
{
|
||||||
reader.SeekBegin(DataPosition + BoneInfo.ScalePosition);
|
reader.SeekBegin(InfoPosition + BoneInfo.ScalePosition);
|
||||||
float ScaleX = reader.ReadSingle();
|
float ScaleX = reader.ReadSingle();
|
||||||
float ScaleY = reader.ReadSingle();
|
float ScaleY = reader.ReadSingle();
|
||||||
float ScaleZ = reader.ReadSingle();
|
float ScaleZ = reader.ReadSingle();
|
||||||
scale = new float[] { ScaleX, ScaleY, ScaleZ };
|
scale = new float[] { ScaleX, ScaleY, ScaleZ };
|
||||||
|
|
||||||
|
Console.WriteLine($"ScaleX {ScaleX} ScaleY {ScaleX} ScaleZ {ScaleX} ");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (BoneInfo.ParentPosition != 0)
|
if (BoneInfo.ParentPosition != 0)
|
||||||
{
|
{
|
||||||
reader.SeekBegin(DataPosition + BoneInfo.ParentPosition);
|
reader.SeekBegin(InfoPosition + BoneInfo.ParentPosition);
|
||||||
parentIndex = reader.ReadInt32();
|
parentIndex = reader.ReadInt32();
|
||||||
}
|
}
|
||||||
|
|
||||||
Console.WriteLine("BONE " + Text);
|
Console.WriteLine($"parentIndex {parentIndex} {Text}");
|
||||||
|
|
||||||
//Seek back to next bone in array
|
//Seek back to next bone in array
|
||||||
reader.SeekBegin(DataPosition + sizeof(uint));
|
reader.SeekBegin(DataPosition + sizeof(uint));
|
||||||
@ -244,7 +264,7 @@ namespace FirstPlugin
|
|||||||
internal ushort Unknown2Position { get; set; }
|
internal ushort Unknown2Position { get; set; }
|
||||||
internal ushort ParentPosition { get; set; }
|
internal ushort ParentPosition { get; set; }
|
||||||
internal ushort Unknown3Position { get; set; }
|
internal ushort Unknown3Position { get; set; }
|
||||||
internal ushort IsVisablePosition { get; set; }
|
internal ushort IsVisiblePosition { get; set; }
|
||||||
internal ushort ScalePosition { get; set; }
|
internal ushort ScalePosition { get; set; }
|
||||||
internal ushort RotationPosition { get; set; }
|
internal ushort RotationPosition { get; set; }
|
||||||
internal ushort TranslationPosition { get; set; }
|
internal ushort TranslationPosition { get; set; }
|
||||||
@ -259,12 +279,25 @@ namespace FirstPlugin
|
|||||||
Unknown2Position = reader.ReadUInt16();
|
Unknown2Position = reader.ReadUInt16();
|
||||||
ParentPosition = reader.ReadUInt16();
|
ParentPosition = reader.ReadUInt16();
|
||||||
Unknown3Position = reader.ReadUInt16(); //Padding
|
Unknown3Position = reader.ReadUInt16(); //Padding
|
||||||
IsVisablePosition = reader.ReadUInt16(); //Points to byte. 0 or 1 for visibilty
|
IsVisiblePosition = reader.ReadUInt16(); //Points to byte. 0 or 1 for visibilty
|
||||||
ScalePosition = reader.ReadUInt16();
|
ScalePosition = reader.ReadUInt16();
|
||||||
RotationPosition = reader.ReadUInt16();
|
RotationPosition = reader.ReadUInt16();
|
||||||
TranslationPosition = reader.ReadUInt16();
|
TranslationPosition = reader.ReadUInt16();
|
||||||
Unknown4Position = reader.ReadUInt16(); //Padding
|
Unknown4Position = reader.ReadUInt16(); //Padding
|
||||||
Unknown5Position = reader.ReadUInt16(); //Padding
|
Unknown5Position = reader.ReadUInt16(); //Padding
|
||||||
|
|
||||||
|
/* Console.WriteLine($"SectionSize {SectionSize}");
|
||||||
|
Console.WriteLine($"NamePosition {NamePosition}");
|
||||||
|
Console.WriteLine($"UnknownPosition {UnknownPosition}");
|
||||||
|
Console.WriteLine($"Unknown2Position {Unknown2Position}");
|
||||||
|
Console.WriteLine($"ParentPosition {ParentPosition}");
|
||||||
|
Console.WriteLine($"Unknown3Position {Unknown3Position}");
|
||||||
|
Console.WriteLine($"IsVisiblePosition {IsVisiblePosition}");
|
||||||
|
Console.WriteLine($"ScalePosition {ScalePosition}");
|
||||||
|
Console.WriteLine($"RotationPosition {RotationPosition}");
|
||||||
|
Console.WriteLine($"TranslationPosition {TranslationPosition}");
|
||||||
|
Console.WriteLine($"Unknown4Position {Unknown4Position}");
|
||||||
|
Console.WriteLine($"Unknown5Position {Unknown5Position}");*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user