private static int GetFilteredDmyPolyID(ParamData.AtkParam.DummyPolySource dmyFilter, int id) { if (id < 0) { return(-1); } int check = id / 1000; id = id % 1000; if (dmyFilter == DummyPolySource.None) { return(-1); } else if (dmyFilter == DummyPolySource.Body) { return((check < 10) ? id : -1); } else if (dmyFilter == DummyPolySource.RightWeapon) { return((check == 10 || check == 12) ? id : -1); } else if (dmyFilter == DummyPolySource.LeftWeapon) { return((check == 11 || check == 13 || check == 20) ? id : -1); } return(-1); }
public void SetAttackVisibility(ParamData.AtkParam atk, bool visible, NewChrAsm asm, int dummyPolyOverride, ParamData.AtkParam.DummyPolySource defaultDummyPolySource) { if (dummyPolyOverride >= 0) { var fakeHitRadius = atk.Hits[0].Radius; var fakeHitType = atk.Hits[0].HitType; var fakeHit = new ParamData.AtkParam.Hit() { DmyPoly1 = (short)dummyPolyOverride, DmyPoly2 = -1, Radius = fakeHitRadius, HitType = fakeHitType, }; ShowAttackOnDummyPoly(atk, dummyPolyOverride); SetHitVisibility(fakeHit, visible); } else { bool isFirstValidDmyPoly = true; for (int i = 0; i < atk.Hits.Length; i++) { int dmyPoly1 = atk.Hits[i].DmyPoly1; if (dmyPoly1 == -1) { continue; } var dmyPolySrcToUse = defaultDummyPolySource; if (atk.HitSourceType == 1) { dmyPolySrcToUse = ParamData.AtkParam.DummyPolySource.Body; } if (visible && isFirstValidDmyPoly && dmyPoly1 != -1) { if (asm != null) { var dummyPolySrcOfAtk = atk.Hits[i].GetDmyPoly1SpawnPlace(asm, dmyPolySrcToUse); dummyPolySrcOfAtk.ShowAttackOnDummyPoly(atk, dmyPoly1 % 1000); } else { ShowAttackOnDummyPoly(atk, dmyPoly1); } isFirstValidDmyPoly = false; } var actualHit = atk.Hits[i]; actualHit.DummyPolySourceSpawnedOn = dmyPolySrcToUse; SetHitVisibility(actualHit, visible); } } }
public DummyPolyBladeSFX(int ffxid, int startDummyPolyID, int endDummyPolyID, ParamData.AtkParam.DummyPolySource dmySource, Func <bool> checkIfAliveFunc) { FFXID = ffxid; StartDummyPolyID = startDummyPolyID; EndDummyPolyID = endDummyPolyID; DmyPolySource = dmySource; CheckIfAliveFunc = checkIfAliveFunc; }
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); } } }
public void SetHitVisibility(ParamData.AtkParam.Hit hit, bool visible, ParamData.AtkParam.DummyPolySource dmyFilter) { lock (_lock_everything_monkaS) { if (HitPrims.ContainsKey(hit)) { foreach (var prim in HitPrims[hit]) { prim.EnableDraw = visible; } } else { AddNewHitPrim(hit, dmyFilter, visible); } if (visible && !VisibleHitsToHideForHideAll.Contains(hit)) { VisibleHitsToHideForHideAll.Enqueue(hit); } } }
public void SetAttackVisibility(ParamData.AtkParam atk, bool visible, ParamData.AtkParam.DummyPolySource dmyFilter) { bool isFirstValidDmyPoly = true; for (int i = 0; i < atk.Hits.Length; i++) { int dmyPoly1 = atk.Hits[i].GetFilteredDmyPoly1(dmyFilter); if (dmyPoly1 == -1) { continue; } if (visible && isFirstValidDmyPoly && dmyPoly1 != -1 && DummyPolyByRefID.ContainsKey(dmyPoly1)) { ShowAttackOnDummyPoly(atk, dmyPoly1); isFirstValidDmyPoly = false; } SetHitVisibility(atk.Hits[i], visible, dmyFilter); } }
public int GetFilteredDmyPoly2(ParamData.AtkParam.DummyPolySource dmyFilter) { return(GetFilteredDmyPolyID(dmyFilter, DmyPoly2)); }