Esempio n. 1
0
        public void ProcessInput(FCgInputFrame inputFrame)
        {
            int  and = 0;
            bool or  = false;

            int count = inputFrame.Inputs.Count;

            for (int i = count - 1; i >= 0; --i)
            {
                FCgInput input = inputFrame.Inputs[i];

                // Check And
                int andCount = AndInputs.Count;

                for (int j = and; j < andCount; ++j)
                {
                    if (input.Action == AndInputs[j].Action &&
                        input.Event == AndInputs[j].Event)
                    {
                        ++and;
                    }
                }
                // Check Or
                int orCount = OrInputs.Count;

                for (int j = 0; j < orCount; ++j)
                {
                    or |= input.Action == OrInputs[j].Action && input.Event == OrInputs[j].Event;

                    if (or)
                    {
                        break;
                    }
                }

                Completed = (and > 0 && and == andCount) || or;

                if (Completed)
                {
                    if (Consume)
                    {
                        inputFrame.Inputs.RemoveAt(i);
                    }
                    CompletedTime = inputFrame.Time;
                    break;
                }
            }
        }
Esempio n. 2
0
        public void Copy(FCgInputFrame rhs)
        {
            Time      = rhs.Time;
            RealTime  = rhs.RealTime;
            DeltaTime = rhs.DeltaTime;
            Frame     = rhs.Frame;

            Inputs.Clear();

            int count = rhs.Inputs.Count;

            for (int i = 0; i < count; ++i)
            {
                Inputs.Add(rhs.Inputs[i]);
            }
        }
Esempio n. 3
0
        public override bool Equals(object obj)
        {
            if (!(obj is FCgInputFrame))
            {
                return(false);
            }

            FCgInputFrame rhs = (FCgInputFrame)obj;

            if (Time != rhs.Time)
            {
                return(false);
            }
            if (RealTime != rhs.RealTime)
            {
                return(false);
            }
            if (DeltaTime != rhs.DeltaTime)
            {
                return(false);
            }
            if (Frame != rhs.Frame)
            {
                return(false);
            }

            if (Inputs.Count != rhs.Inputs.Count)
            {
                return(false);
            }

            int count = Inputs.Count;

            for (int i = 0; i < count; ++i)
            {
                if (Inputs[i] != rhs.Inputs[i])
                {
                    return(false);
                }
            }
            return(true);
        }
Esempio n. 4
0
        public void ProcessInput(FCgInputFrame inputFrame)
        {
            float currentTime = inputFrame.Time;

            // Check if Cooldown has Expired
            if (!Active)
            {
                if (currentTime - CompletedTime >= Cooldown)
                {
                    Reset();
                }
                else
                {
                    return;
                }
            }
            // Check if ALL Phrases are Completed
            int count = Phrases.Count;
            int index = 0;

            if (UseInterval)
            {
                //float elapsedTime = 0.0f;
                float earliestCompletedTime = currentTime;

                for (index = 0; index < count; ++index)
                {
                    if (Phrases[index].Completed)
                    {
                        if (Phrases[index].CompletedTime < earliestCompletedTime)
                        {
                            earliestCompletedTime = Phrases[index].CompletedTime;
                        }

                        if (currentTime - earliestCompletedTime > Interval)
                        {
                            Reset();

                            index = 0;
                            break;
                        }
                    }

                    Phrases[index].ProcessInput(inputFrame);

                    if (index < count - 1 || !Phrases[index].Completed)
                    {
                        break;
                    }
                }
            }
            else
            {
                for (index = 0; index < count; ++index)
                {
                    if (Phrases[index].Completed)
                    {
                        continue;
                    }

                    Phrases[index].ProcessInput(inputFrame);

                    if (index < count - 1 || !Phrases[index].Completed)
                    {
                        break;
                    }
                }

                if (index != count)
                {
                    Reset();
                }
            }
            // Check if Completed
            if (index == count)
            {
                Completed     = true;
                CompletedTime = currentTime;
                Active        = false;
            }
        }
Esempio n. 5
0
        public void ProcessInput(FCgInputFrame inputFrame)
        {
            float currentTime = inputFrame.Time;

            // Check if ALL Words are Completed
            int count = Words.Count;
            int index = 0;

            if (UseInterval)
            {
                //float elapsedTime = 0.0f;
                float earliestCompletedTime = currentTime;

                for (index = 0; index < count; ++index)
                {
                    if (Words[index].Completed)
                    {
                        if (Words[index].CompletedTime < earliestCompletedTime)
                        {
                            earliestCompletedTime = Words[index].CompletedTime;
                        }

                        if (currentTime - earliestCompletedTime > Interval)
                        {
                            Reset();

                            index = 0;
                            break;
                        }
                    }

                    Words[index].ProcessInput(inputFrame);

                    if (index < count - 1 || !Words[index].Completed)
                    {
                        break;
                    }
                }
            }
            else
            {
                for (index = 0; index < count; ++index)
                {
                    if (Words[index].Completed)
                    {
                        continue;
                    }

                    Words[index].ProcessInput(inputFrame);

                    if (index < count - 1 || !Words[index].Completed)
                    {
                        break;
                    }
                }

                if (index != count)
                {
                    Reset();
                }
            }
            // Check if Completed
            if (index > 0 && index == count)
            {
                Completed     = true;
                CompletedTime = currentTime;
            }
        }