Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        private void CreateHitboxPrimitive(ParamData.AtkParam atkParam, ParamData.AtkParam.Hit hit, Color c, string primText, bool showText)
        {
            lock (_lock_hitboxes)
            {
                if (!HitboxPrimitiveInfos.ContainsKey(atkParam))
                {
                    HitboxPrimitiveInfos.Add(atkParam, new HitboxPrimInfo());
                }

                //if (MODEL.IS_PLAYER)
                //{
                //    hit.ShiftDmyPolyIDIntoPlayerWpnDmyPolyID(HitboxPrimitiveInfos[atkParam].IsLeftHandAtk || IsViewingLeftHandHit);
                //}

                //if (hit.DmyPoly1 == -1 && hit.DmyPoly2 == -1)
                //    return;

                if (hit.IsCapsule)
                {
                    var capsule = new DbgPrimWireCapsule(12, c)
                    {
                        Category       = DbgPrimCategory.DummyPolyHelper,
                        EnableDraw     = false,
                        OverrideColor  = c,
                        Name           = showText ? primText : "",
                        EnableNameDraw = false,
                        NameColor      = c,
                    };
                    MODEL.DbgPrimDrawer.AddPrimitive(capsule);
                    HitboxPrimitiveInfos[atkParam].Primitives.Add(capsule);
                }
                else
                {
                    var sphere = new DbgPrimWireSphere(Transform.Default, 1, 12, 12, Color.White)
                    {
                        Category       = DbgPrimCategory.DummyPolyHelper,
                        EnableDraw     = false,
                        OverrideColor  = c,
                        Name           = showText ? primText : "",
                        EnableNameDraw = false,
                        NameColor      = c,
                    };
                    MODEL.DbgPrimDrawer.AddPrimitive(sphere);
                    HitboxPrimitiveInfos[atkParam].Primitives.Add(sphere);
                }
            }
        }
Ejemplo n.º 3
0
        public void ShowAttackOnDummyPoly(ParamData.AtkParam atk, int dummyPolyID)
        {
            if (!DummyPolyByRefID.ContainsKey(dummyPolyID))
            {
                return;
            }

            foreach (var dmy in DummyPolyByRefID[dummyPolyID])
            {
                dmy.ShowAttack = atk;

                if (!CurrentShowAttackQueueForClearAll.Contains(dmy))
                {
                    CurrentShowAttackQueueForClearAll.Enqueue(dmy);
                }
            }
        }
Ejemplo n.º 4
0
        public void DeactivateHitbox(ParamData.AtkParam attack)
        {
            lock (_lock_hitboxes)
            {
                if (HitboxPrimitiveInfos.ContainsKey(attack))
                {
                    HitboxPrimitiveInfos[attack].Deactivate();
                }
            }

            //if (MODEL.ChrAsm != null)
            //{
            //    if (MODEL.ChrAsm.RightWeaponModel != null)
            //        MODEL.ChrAsm.RightWeaponModel.DummyPolyMan.DeactivateHitbox(attack);

            //    if (MODEL.ChrAsm.LeftWeaponModel != null)
            //        MODEL.ChrAsm.LeftWeaponModel.DummyPolyMan.DeactivateHitbox(attack);
            //}
        }
Ejemplo n.º 5
0
        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);
            }
        }
Ejemplo n.º 6
0
        private void UpdateHitboxPrimitive(ParamData.AtkParam atkParam)
        {
            if (!HitboxPrimitiveInfos.ContainsKey(atkParam))
            {
                return;
            }

            for (int i = 0; i < atkParam.Hits.Length; i++)
            {
                if (i >= HitboxPrimitiveInfos[atkParam].Primitives.Count)
                {
                    break;
                }

                if (!HitboxPrimitiveInfos[atkParam].Primitives[i].EnableDraw)
                {
                    continue;
                }

                //if (MODEL.IS_PLAYER)
                //    atkParam.Hits[i].ShiftDmyPolyIDIntoPlayerWpnDmyPolyID(HitboxPrimitiveInfos[atkParam].IsLeftHandAtk);

                if (HitboxPrimitiveInfos[atkParam].Primitives[i] is DbgPrimWireCapsule capsulePrim)
                {
                    //if (atkParam.Hits[i].DmyPoly1 == -1)
                    //    continue;

                    var a = GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly1,
                                                         HitboxPrimitiveInfos[atkParam].IsLeftHandAtk);
                    var b = GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly2,
                                                         HitboxPrimitiveInfos[atkParam].IsLeftHandAtk);

                    //if (a == null || b == null)
                    //{
                    //    a = MODEL.ParentModelForChrAsm?.DummyPolyMan?.GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly1);
                    //    b = MODEL.ParentModelForChrAsm?.DummyPolyMan?.GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly2);
                    //}

                    if (a != null && b != null)
                    {
                        capsulePrim.UpdateCapsuleEndPoints(a.Value, b.Value, atkParam.Hits[i].Radius);
                    }
                    else
                    {
                        capsulePrim.UpdateCapsuleEndPoints(Vector3.Zero, Vector3.Zero, 0);
                    }
                }
                else if (HitboxPrimitiveInfos[atkParam].Primitives[i] is DbgPrimWireSphere spherePrim)
                {
                    //if (atkParam.Hits[i].DmyPoly1 == -1)
                    //    continue;

                    var dmyPos = GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly1,
                                                              HitboxPrimitiveInfos[atkParam].IsLeftHandAtk);
                    var dmyMatrix = GetDummyPolyAbsoluteMatrix(atkParam.Hits[i].DmyPoly1,
                                                               HitboxPrimitiveInfos[atkParam].IsLeftHandAtk);

                    //if (dmyPos == null || dmyMatrix == null)
                    //{
                    //    dmyPos = MODEL.ParentModelForChrAsm?.DummyPolyMan?.GetDummyPolyAbsolutePosition(atkParam.Hits[i].DmyPoly1);
                    //    dmyMatrix = MODEL.ParentModelForChrAsm?.DummyPolyMan?.GetDummyPolyAbsoluteMatrix(atkParam.Hits[i].DmyPoly1);
                    //}

                    if (dmyPos != null && dmyMatrix != null)
                    {
                        var dmyRot = Quaternion.CreateFromRotationMatrix(dmyMatrix.Value);
                        dmyRot.Normalize();
                        spherePrim.Transform = new Transform(//Matrix.CreateRotationX(MathHelper.PiOver2) *
                            Matrix.CreateScale(atkParam.Hits[i].Radius)
                            * Matrix.CreateFromQuaternion(dmyRot)
                            * Matrix.CreateTranslation(dmyPos.Value));
                    }
                    else
                    {
                        spherePrim.Transform = new Transform(Vector3.Zero, Vector3.Zero, Vector3.Zero);
                    }
                }
            }
        }