コード例 #1
0
ファイル: VmdCreator.Dance.cs プロジェクト: gagho0/yeahhhhhhh
        private static TimedList <int, int> CollectSeekFrames([CanBeNull] ScenarioObject scenario, int formationNumber)
        {
            var result = new TimedList <int, int>();

            if (scenario == null)
            {
                return(result);
            }

            if (scenario.HasSeekFrameEvents())
            {
                var events = scenario.Scenario.WhereToArray(s => s.Type == ScenarioDataType.DanceAnimationSeekFrame);

                foreach (var ev in events)
                {
                    Debug.Assert(ev != null, nameof(ev) + " != null");

                    if (ev.Idol != formationNumber + 10)
                    {
                        continue;
                    }

                    var frameIndex  = (int)Math.Round(ev.AbsoluteTime * FrameRate.Mltd);
                    var targetFrame = ev.SeekFrame;

                    result.AddOrUpdate(frameIndex, targetFrame);
                }
            }

            return(result);
        }
コード例 #2
0
ファイル: VmdCreator.Dance.cs プロジェクト: gagho0/yeahhhhhhh
        private static TimedList <int, Vector4[]> CollectFormationChanges([CanBeNull] ScenarioObject scenario, AppealType appealType)
        {
            var result = new TimedList <int, Vector4[]>();

            if (scenario == null)
            {
                return(result);
            }

            if (scenario.HasFormationChangeEvents())
            {
                var events = scenario.Scenario.WhereToArray(s => s.Type == ScenarioDataType.FormationChange);

                foreach (var ev in events)
                {
                    Debug.Assert(ev != null, nameof(ev) + " != null");

                    // Layer=0: applied to all appeal variants (including no appeal)
                    // Layer>0: applied to that appeal only
                    if (ev.Layer == 0 || ev.Layer == (int)appealType)
                    {
                        var formations = ev.Formation;
                        Debug.Assert(formations != null && formations.Length > 0);

                        var frameIndex = (int)Math.Round(ev.AbsoluteTime * FrameRate.Mltd);

                        var f = new Vector4[formations.Length];

                        for (var i = 0; i < formations.Length; i += 1)
                        {
                            var v = formations[i];
                            f[i] = new Vector4(v.X, v.Y, v.Z, v.W);
                        }

                        result.AddOrUpdate(frameIndex, f);
                    }
                }
            }

            return(result);
        }