Add ability to use external animations

This commit is contained in:
skawo
2022-04-09 16:45:15 +02:00
committed by tom-overton
parent e223bde0bc
commit 733734738b
5 changed files with 74 additions and 5 deletions
+3 -3
View File
@@ -18,7 +18,7 @@ namespace Z64.Forms
public partial class ObjectAnalyzerForm : MicrosoftFontForm
{
byte[] _data;
Z64Object _obj;
public Z64Object _obj;
int _segment;
Z64Game _game;
@@ -350,7 +350,7 @@ namespace Z64.Forms
anims.Add((Z64Object.AnimationHolder)e);
});
SkeletonViewerForm form = new SkeletonViewerForm(_game);
SkeletonViewerForm form = new SkeletonViewerForm(_game, _segment);
form.SetSegment(_segment, F3DZEX.Memory.Segment.FromBytes("[Current Object]", _data));
form.SetSkeleton(skel, anims);
form.Show();
@@ -366,7 +366,7 @@ namespace Z64.Forms
anims.Add((Z64Object.AnimationHolder)e);
});
SkeletonViewerForm form = new SkeletonViewerForm(_game);
SkeletonViewerForm form = new SkeletonViewerForm(_game, _segment);
form.SetSegment(_segment, F3DZEX.Memory.Segment.FromBytes("[Current Object]", _data));
form.SetSkeleton(skel, anims);
form.Show();
+1
View File
@@ -168,6 +168,7 @@ namespace Z64.Forms
this.listBox_anims.Size = new System.Drawing.Size(172, 212);
this.listBox_anims.TabIndex = 11;
this.listBox_anims.SelectedIndexChanged += new System.EventHandler(this.listBox_anims_SelectedIndexChanged);
this.listBox_anims.DoubleClick += new System.EventHandler(this.listBox_anims_DoubleClick);
//
// trackBar_anim
//
+50 -2
View File
@@ -48,11 +48,17 @@ namespace Z64.Forms
short[] _frameData;
AnimationJointIndicesHolder.JointIndex[] _curJoints;
public SkeletonViewerForm(Z64Game game)
byte[] _animFile;
int _curSegment = 6;
public SkeletonViewerForm(Z64Game game, int curSegment)
{
_game = game;
_curSegment = curSegment;
_rendererCfg = new F3DZEX.Render.Renderer.Config();
InitializeComponent();
Toolkit.Init();
@@ -68,7 +74,7 @@ namespace Z64.Forms
{
for (int i = 8; i < 16; i++)
{
if (i != 13)
if (i != 13 || _skel is SkeletonHolder)
_renderer.Memory.Segments[i] = F3DZEX.Memory.Segment.FromFill("Empty Dlist", new byte[] { 0xDF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 });
}
}
@@ -279,6 +285,11 @@ namespace Z64.Forms
trackBar_anim.Maximum = _curAnim.FrameCount - 1;
trackBar_anim.Value = 0;
var Saved = _renderer.Memory.Segments[_curSegment];
if (_curAnim.extAnim)
_renderer.Memory.Segments[_curSegment] = F3DZEX.Memory.Segment.FromBytes("", _animFile);
byte[] buff = _renderer.Memory.ReadBytes(_curAnim.JointIndices, (_limbs.Count + 1) * AnimationJointIndicesHolder.ENTRY_SIZE);
_curJoints = new AnimationJointIndicesHolder("joints", buff).JointIndices;
@@ -293,6 +304,8 @@ namespace Z64.Forms
buff = _renderer.Memory.ReadBytes(_curAnim.FrameData, (max < _curAnim.StaticIndexMax ? max + 1 : _curAnim.FrameCount + max) * 2);
_frameData = new AnimationFrameDataHolder("framedata", buff).FrameData;
_renderer.Memory.Segments[_curSegment] = Saved;
UpdateMatrixBuf();
}
@@ -525,5 +538,40 @@ namespace Z64.Forms
button_playAnim.BackgroundImage = Properties.Resources.play_icon;
button_playbackAnim.BackgroundImage = Properties.Resources.playback_icon;
}
private void listBox_anims_DoubleClick(object sender, EventArgs e)
{
_timer.Stop();
_playState = PlayState.Pause;
button_playAnim.BackgroundImage = Properties.Resources.play_icon;
button_playbackAnim.BackgroundImage = Properties.Resources.playback_icon;
OpenFileDialog of = new OpenFileDialog();
DialogResult DR = of.ShowDialog();
if (DR == DialogResult.OK)
{
_animFile = File.ReadAllBytes(of.FileName);
using (var form = new ObjectAnalyzerForm(_game, _animFile, _curSegment))
{
_anims.Clear();
form._obj.Entries.ForEach(e =>
{
if (e is Z64Object.AnimationHolder)
{
(e as Z64Object.AnimationHolder).extAnim = true;
(e as Z64Object.AnimationHolder).Name = "ext_" + (e as Z64Object.AnimationHolder).Name;
_anims.Add((Z64Object.AnimationHolder)e);
}
});
}
listBox_anims.Items.Clear();
_anims.ForEach(a => listBox_anims.Items.Add(a.Name));
}
}
}
}
+18
View File
@@ -13,6 +13,13 @@ namespace Z64
{
static class Program
{
[System.Runtime.InteropServices.DllImport("nvapi64.dll", EntryPoint = "fake")]
static extern int LoadNvApi64();
[System.Runtime.InteropServices.DllImport("nvapi.dll", EntryPoint = "fake")]
static extern int LoadNvApi32();
/// <summary>
/// Point d'entrée principal de l'application.
/// </summary>
@@ -21,9 +28,20 @@ namespace Z64
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
try
{
if (Environment.Is64BitProcess)
LoadNvApi64();
else
LoadNvApi32();
}
catch { }
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}
+2
View File
@@ -380,6 +380,8 @@ namespace Z64
public SegmentedAddress JointIndices { get; set; }
public ushort StaticIndexMax { get; set; }
public bool extAnim { get; set; }
public AnimationHolder(string name, byte[] data) : base(name)
{
SetData(data);