예제 #1
0
        private List <RaceState> GenerateRaceStatesFor25FPS(RaceResult raceResult)
        {
            List <RaceState> raceStates;

            raceStates = new List <RaceState>();

            RaceState raceStateA;
            RaceState raceStateB;

            int    raceStateIndex = 0;
            double time           = 0;
            double stopTime       = Math.Ceiling(raceResult.RaceStates.Last().Time);

            int timeIndex = 0;

            raceStateA = raceResult.RaceStates[0];
            raceStateB = raceResult.RaceStates[1];

            while (time < stopTime)
            {
                int frameIndex;

                for (frameIndex = 0; frameIndex < 25; frameIndex++)
                {
                    time = timeIndex + frameIndex / 25.0;

                    while (((raceStateIndex + 1) < raceResult.RaceStates.Count) && (time >= raceResult.RaceStates[raceStateIndex + 1].Time))
                    {
                        raceStateIndex++;

                        if (raceStateIndex < raceResult.RaceStates.Count)
                        {
                            raceStateA = raceStateB;
                            raceStateB = raceResult.RaceStates[raceStateIndex + 1];
                        }
                    }

                    RaceState raceStateForFrame;

                    //raceStateForFrame = raceResult.RaceStates[raceStateIndex].Copy();
                    //raceStateForFrame.Time = time;
                    raceStateForFrame = RaceState.CreateInterpolation(raceStateA, raceStateB, time);

                    //raceStateA = raceResult.RaceStates[raceStateIndex];
                    //raceStateB = raceResult.RaceStates[raceStateIndex + 1];

                    raceStates.Add(raceStateForFrame);
                }

                timeIndex++;
                time = timeIndex;
            }

            return(raceStates);
        }