private void AddNewHitPrim(ParamData.AtkParam.Hit hit, ParamData.AtkParam.DummyPolySource dmyFilter, bool visible = false, bool dontUpdate = false) { if (!HitPrims.ContainsKey(hit)) { HitPrims.Add(hit, new List <IDbgPrim>()); } if (!HitFilters.ContainsKey(hit)) { HitFilters.Add(hit, dmyFilter); } else { HitFilters[hit] = dmyFilter; } if (hit.IsCapsule) { HitPrims[hit].Add(new DbgPrimWireCapsule(hit.GetColor()) { EnableDraw = visible, Category = DbgPrimCategory.DummyPolyHelper, //OverrideColor = hit.GetColor(), }); } else { if (DummyPolyByRefID.ContainsKey(hit.DmyPoly1)) { foreach (var dmy in DummyPolyByRefID[hit.DmyPoly1]) { HitPrims[hit].Add(new DbgPrimWireSphere(new Transform(Matrix.CreateScale(hit.Radius) * dmy.ReferenceMatrix), Color.White) { EnableDraw = visible, Category = DbgPrimCategory.DummyPolyHelper, OverrideColor = hit.GetColor(), }); } } } lock (_lock_everything_monkaS) { if (visible && !VisibleHitsToHideForHideAll.Contains(hit)) { VisibleHitsToHideForHideAll.Enqueue(hit); } if (!dontUpdate) { UpdateHitPrim(hit); } } }
//private Dictionary<ParamData.AtkParam.Hit, ParamData.AtkParam.DummyPolySource> HitFilters // = new Dictionary<ParamData.AtkParam.Hit, ParamData.AtkParam.DummyPolySource>(); //private Dictionary<DummyPolyBladeSFX, ParamData.AtkParam.DummyPolySource> BladeSfxHitFilters // = new Dictionary<DummyPolyBladeSFX, ParamData.AtkParam.DummyPolySource>(); private void UpdateHitPrim(ParamData.AtkParam.Hit hit) { lock (_lock_everything_monkaS) { var dmyA = hit.GetDmyPoly1Locations(MODEL, hit.DummyPolySourceSpawnedOn); var dmyB = hit.GetDmyPoly2Locations(MODEL, hit.DummyPolySourceSpawnedOn); if (hit.IsCapsule) { ((DbgPrimWireCapsule)HitPrims[hit][0]).UpdateCapsuleEndPoints(Vector3.Transform(Vector3.Zero, dmyA[0]), Vector3.Transform(Vector3.Zero, dmyB[0]), hit.Radius); } else { if (dmyA.Count > HitPrims[hit].Count) { AddNewHitPrim(hit, dontUpdate: true); } for (int i = 0; i < Math.Min(HitPrims[hit].Count, dmyA.Count); i++) { Matrix m = dmyA[i]; Quaternion q = Quaternion.CreateFromRotationMatrix(m); Matrix rm = Matrix.CreateFromQuaternion(Quaternion.Normalize(q)); Matrix tm = Matrix.CreateTranslation(Vector3.Transform(Vector3.Zero, m)); HitPrims[hit][i].Transform = new Transform(Matrix.CreateScale(hit.Radius) * rm * tm); } } for (int i = 0; i < HitPrims[hit].Count; i++) { HitPrims[hit][i].OverrideColor = hit.GetColor(); } } }