Exemplo n.º 1
0
        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);
                }
            }
        }
Exemplo n.º 2
0
        //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();
                }
            }
        }