/// <summary> /// Initializes rendering /// </summary> private void InitRendering() { // set model scale JointManager.ModelScale = ModelScale; // clear hidden dobjs JointManager.DOBJManager.HiddenDOBJs.Clear(); // don't render bones by default JointManager._settings.RenderBones = false; // reset model visibility ResetModelVis(); // load the model parts LoadModelParts(); // enable preview box previewBox.Visible = true; // reselect action if (actionList.SelectedItem is Action action) { SelectAction(action); } // load bone table if plco is found //string DummyModelFile = "PLMrNr.dat"; //int DummyModelExternalId = 0; /*var plcoFile = Path.Combine(Path.GetDirectoryName(MainForm.Instance.FilePath), "PlCo.dat"); * var plmrFile = Path.Combine(Path.GetDirectoryName(MainForm.Instance.FilePath), DummyModelFile); * if (File.Exists(plcoFile) && File.Exists(plmrFile)) * { * ThrowDummyManager.SetJOBJ(new HSDRawFile(plmrFile).Roots[0].Data as HSD_JOBJ); * * ThrowDummyManager._settings.RenderBones = false; * * ThrowDummyManager.DOBJManager.OverlayColor = new Vector3(1.5f, 1.5f, 1.5f); * * // load bone lookup table * var plco = new HSDRawFile(plcoFile).Roots[0].Data as SBM_ftLoadCommonData; * var lookuptable = plco.BoneTables[DummyModelExternalId]._s.GetReference<HSDByteArray>(0x04); * ThrowDummyLookupTable.Clear(); * for (int i = 0; i < 54; i++) * { * var bone = lookuptable[i]; * if (bone != 255 && !ThrowDummyLookupTable.ContainsKey(bone)) * ThrowDummyLookupTable.Add(bone, i); * } * } * else*/ { ThrowDummyManager.SetJOBJ(DummyThrowModel.GenerateThrowDummy()); } }
/// <summary> /// /// </summary> /// <param name="offset"></param> /// <param name="size"></param> private void LoadAnimation(string symbol) { // clear animation JointManager.SetFigaTree(null); // check if animation exists if (symbol == null || !SymbolToAnimation.ContainsKey(symbol)) { return; } // load animation var anim = new HSDRawFile(SymbolToAnimation[symbol]); if (anim.Roots[0].Data is HSD_FigaTree tree) { var name = new Action() { Symbol = anim.Roots[0].Name }.ToString(); JointManager.SetFigaTree(tree); _animEditor.SetJoint(JointManager.GetJOBJ(0), JointManager.Animation); viewport.MaxFrame = tree.FrameCount; ThrowDummyManager.CleanupRendering(); ThrowDummyManager = new JOBJManager(); //AnimationName = name; // load throw dummy for thrown animations if (name.Contains("Throw") && !name.Contains("Taro")) { // find thrown anim Action throwAction = null; foreach (Action a in actionList.Items) { if (a.Symbol != null && a.Symbol.Contains("Taro") && a.Symbol.Contains(name) && !a.Symbol.Equals(anim.Roots[0].Name)) { throwAction = a; break; } } if (throwAction != null && throwAction.Symbol != null && SymbolToAnimation.ContainsKey(throwAction.Symbol)) { // load throw dummy ThrowDummyManager.SetJOBJ(DummyThrowModel.GenerateThrowDummy()); // load throw animation var tanim = new HSDRawFile(SymbolToAnimation[throwAction.Symbol]); if (tanim.Roots[0].Data is HSD_FigaTree tree2) { ThrowDummyManager.SetFigaTree(tree2); } } } } }