示例#1
0
        /// <summary>
        /// Create a sequence that is attached to the given transform with.
        /// </summary>
        public InputSequence CreateSequence(Transform transform, int difficulty)
        {
            string        inputText = GenerateSequenceText(difficulty);
            InputSequence sequence  = _sequenceOverlay.CreateSequence(inputText, transform);

            return(sequence);
        }
示例#2
0
        public override bool Process(int frame)
        {
            if (m_GradientTexture == null)
            {
                InitTexture();
            }

            CurveToTextureUtility.GradientToTexture(settings.Gradient, ref m_GradientTexture);
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);

            if (settings.ColorSource == RemapColorProcessorSettings.RemapColorSource.sRGBLuminance)
            {
                m_Material.SetFloat("_Mode", 0);
            }
            else if (settings.ColorSource == RemapColorProcessorSettings.RemapColorSource.LinearRGBLuminance)
            {
                m_Material.SetFloat("_Mode", 1);
            }
            else
            {
                m_Material.SetFloat("_Mode", 2);
            }

            m_Material.SetTexture("_Gradient", m_GradientTexture);

            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#3
0
        public void WhenSequenceIsMatched_OldInputsAreCleared()
        {
            var sequence2 = new InputSequence(new List <Input>()
            {
                new Input(JoystickPosition.DOWN),
                new Input(JoystickPosition.DOWN_LEFT)
            });

            buffer.AddInputState(new InputState(JoystickPosition.DOWN));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN_LEFT));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN_LEFT));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN_LEFT));

            buffer.AddInputState(new InputState(JoystickPosition.DOWN));
            buffer.AddInputState(new InputState(JoystickPosition.DOWN_RIGHT));
            buffer.AddInputState(new InputState(JoystickPosition.RIGHT));
            buffer.AddInputState(new InputState(
                                     new HashSet <Button>()
            {
                Button.BUTTON1
            },
                                     JoystickPosition.NEUTRAL));

            Assert.IsTrue(buffer.Match(SEQUENCE));
            Assert.IsFalse(buffer.Match(sequence2));
        }
示例#4
0
 // check if
 private bool AnyChange(InputSequence seqA, InputSequence seqB)
 {
     if (!Enumerable.SequenceEqual(seqA.gK, seqB.gK))
     {
         return(true);
     }
     else if (!Enumerable.SequenceEqual(seqA.vB, seqB.vB))
     {
         return(true);
     }
     else if (!Enumerable.SequenceEqual(seqA.vA, seqB.vA))
     {
         return(true);
     }
     else if (seqA.mP != seqB.mP)
     {
         return(true);
     }
     else if (seqA.mWP != seqB.mWP)
     {
         return(true);
     }
     else if (seqA.mSD != seqB.mSD)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
示例#5
0
        public override bool Process(int frame)
        {
            int   inputlength  = InputSequence.length;
            int   outputlength = GetProcessorSequenceLength();
            float t            = (float)frame / outputlength;

            float Frame;

            if (settings.useCurve)
            {
                Frame = settings.curve.Evaluate(t);
            }
            else
            {
                Frame = t * inputlength;
            }

            float blendFactor = Frame % 1.0f;
            int   Prev        = Mathf.Clamp((int)Mathf.Floor(Frame), 0, inputlength - 1);
            int   Next        = Mathf.Clamp((int)Mathf.Ceil(Frame), 0, inputlength - 1);

            Texture prevtex = InputSequence.RequestFrame(Prev).texture;
            Texture nexttex = InputSequence.RequestFrame(Next).texture;

            m_Material.SetTexture("_MainTex", prevtex);
            m_Material.SetTexture("_AltTex", nexttex);
            m_Material.SetFloat("_BlendFactor", blendFactor);

            ExecuteShaderAndDump(frame, prevtex);
            return(true);
        }
示例#6
0
        protected override void UpdateOutputSize()
        {
            int width  = (int)Mathf.Ceil((float)InputSequence.RequestFrame(0).texture.width / settings.FlipbookNumU);
            int height = (int)Mathf.Ceil((float)InputSequence.RequestFrame(0).texture.height / settings.FlipbookNumV);

            SetOutputSize(width, height);
        }
示例#7
0
        private void AttachSequenceToAsteroid(Asteroid asteroid)
        {
            string        inputText = _texts.FindUniquelyTargetableText();
            InputSequence sequence  = _sequenceOverlay.CreateSequence(inputText, asteroid.transform);

            sequence.OnInputAccepted += delegate { _player.FireAt(asteroid); };
            sequence.OnCompleted     += delegate { asteroid.Explode(); };
        }
示例#8
0
        public override bool Process(int frame)
        {
            int     targetFrame = frame * settings.DecimateBy;
            Texture texture     = InputSequence.RequestFrame(targetFrame).texture;

            m_Material.SetTexture("_MainTex", texture);
            ExecuteShaderAndDump(frame, texture);
            return(true);
        }
示例#9
0
        /* RECORD
         * */
        private void Record(float time)
        {
            currentSequence.init();
            currentSequence.t = time;

            // store only true boolean
            foreach (KeyCode vkey in System.Enum.GetValues(typeof(KeyCode)))
            {
                if (Input.GetKey(vkey))
                {
                    currentSequence.gK.Add(vkey);
                }
                if (Input.GetKeyDown(vkey))
                {
                    currentSequence.gKD.Add(vkey);
                }
                if (Input.GetKeyUp(vkey))
                {
                    currentSequence.gKU.Add(vkey);
                }
            }

            currentSequence.mP = Input.mousePosition;

            currentSequence.mWP = Camera.main.ScreenToWorldPoint(currentSequence.mP);

            currentSequence.mSD = Input.mouseScrollDelta;

            foreach (string virtualAxis in AxisList)
            {
                currentSequence.vA.Add(Input.GetAxis(virtualAxis));
            }

            foreach (string ButtonName in ButtonList)
            {
                if (Input.GetButton(ButtonName))
                {
                    currentSequence.vB.Add(ButtonName);
                }
                if (Input.GetButtonDown(ButtonName))
                {
                    currentSequence.vBD.Add(ButtonName);
                }
                if (Input.GetButtonUp(ButtonName))
                {
                    currentSequence.vBU.Add(ButtonName);
                }
            }

            // only write if something changed
            if (AnyChange(oldSequence, currentSequence))
            {
                //Debug.Log (JsonUtility.ToJson (newSequence));
                inputRecordStream.WriteLine(JsonUtility.ToJson(currentSequence));
                oldSequence = currentSequence;
            }
        }
示例#10
0
        public override bool Process(int frame)
        {
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);
            m_Material.SetInt("_RemoveAlpha", settings.RemoveAlpha?1:0);
            m_Material.SetFloat("_AlphaValue", settings.AlphaValue);
            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#11
0
        public override bool Process(int frame)
        {
            UpdateOutputSize();
            Texture texture = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", texture);
            m_Material.SetInt("_Mode", (int)settings.FrameRotateMode);
            ExecuteShaderAndDump(frame, texture);
            return(true);
        }
示例#12
0
        public override bool Process(int frame)
        {
            Texture tex = InputSequence.RequestFrame(frame).texture;

            SetOutputSize(tex.width, tex.height);
            m_Material.SetTexture("_MainTex", tex);
            m_Material.SetColor("_BackgroundColor", settings.BackgroundColor);
            ExecuteShaderAndDump(frame, tex);
            return(true);
        }
        public override bool Process(int frame)
        {
            Texture texture       = InputSequence.RequestFrame(frame).texture;
            Vector4 kernelAndSize = new Vector4((float)texture.width / (float)settings.Width, (float)texture.height / (float)settings.Height, (float)settings.Width, (float)settings.Height);

            m_Material.SetTexture("_MainTex", texture);
            m_Material.SetVector("_KernelAndSize", kernelAndSize);
            ExecuteShaderAndDump(frame, texture);
            return(true);
        }
示例#14
0
        public override bool Process(int frame)
        {
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);
            m_Material.SetVector("_RGBTint", settings.BWFilterTint);

            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#15
0
        public override bool Process(int frame)
        {
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);
            m_Material.SetColor("_FadeToColor", settings.FadeToColor);
            m_Material.SetFloat("_Ratio", settings.FadeCurve.Evaluate(((float)frame) / GetProcessorSequenceLength()));
            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#16
0
 public override void Do(ActionArgs args)
 {
     if (this.Entity != null && args != null && args is ChangeInputSequenceArgs)
     {
         InputSequence sequence = this.Entity.GetComponent("InputSequence") as InputSequence;
         if (sequence != null)
         {
             sequence.Sequence = ((ChangeInputSequenceArgs)args).NewSequence;
         }
     }
 }
示例#17
0
        private void AddSequenceToObject(GameObject sceneObject)
        {
            // Generate a text sequence with a unique among the other sequences active sequences
            string text = _texts.FindUniquelyTargetableText();

            // Crate a sequence with the given text and object to follow in the scene.
            InputSequence sequence = _sequenceOverlay.CreateSequence(text, sceneObject.transform);

            // Let's make it so that the object is destroyed when the sequence is completed.
            sequence.OnCompleted += delegate { Destroy(sceneObject); };
        }
示例#18
0
        private bool ReadLine() // read a new line in file for the next sequence to play
        {
            string newline = inputPlaybackStream.ReadLine();

            if (newline == null)
            {
                return(false);
            }

            nextSequence = JsonUtility.FromJson <InputSequence>(newline);
            return(true);
        }
示例#19
0
        public override bool Process(int frame)
        {
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);
            m_Material.SetVector("_FixFactors", settings.FixFactors);
            m_Material.SetColor("_FadeToColor", settings.FadeToColor);
            m_Material.SetFloat("_FadeToAlpha", settings.FadeToAlpha);
            m_Material.SetFloat("_Exponent", settings.Exponent);
            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#20
0
        protected override bool DrawSidePanelContent(bool hasChanged)
        {
            var bgColor = m_SerializedObject.FindProperty("BackgroundColor");

            EditorGUI.BeginChangeCheck();

            using (new GUILayout.HorizontalScope())
            {
                EditorGUILayout.PropertyField(bgColor, VFXToolboxGUIUtility.Get("Background Color"));
                if (GUILayout.Button(VFXToolboxGUIUtility.Get("Grab"), GUILayout.Width(40)))
                {
                    if (InputSequence.length > 0)
                    {
                        InputSequence.RequestFrame(0);

                        Color background;

                        if (InputSequence.frames[0].texture is RenderTexture)
                        {
                            background = VFXToolboxUtility.ReadBack((RenderTexture)InputSequence.frames[0].texture)[0];
                        }
                        else
                        {
                            Texture2D     inputFrame = (Texture2D)InputSequence.frames[0].texture;
                            RenderTexture rt         = RenderTexture.GetTemporary(inputFrame.width, inputFrame.height, 0, RenderTextureFormat.ARGBHalf, RenderTextureReadWrite.Linear);
                            Graphics.Blit(inputFrame, rt);
                            background = VFXToolboxUtility.ReadBack(rt)[0];
                            RenderTexture.ReleaseTemporary(rt);
                        }

                        if (QualitySettings.activeColorSpace == ColorSpace.Linear)
                        {
                            background = background.gamma;
                        }

                        bgColor.colorValue = background;
                    }
                }
            }

            if (EditorGUI.EndChangeCheck())
            {
                UpdateOutputSize();
                Invalidate();
                hasChanged = true;
            }
            GUILayout.Space(20);
            EditorGUILayout.HelpBox("Please select a color corresponding to the solid background of the flipbook to try to reconstruct the pixel's color. \n\nThis filter will only work if your flipbook was rendered on a solid color background. Try the Grab button to fetch the upper left pixel of the first frame, or use the color picker.", MessageType.Info);

            return(hasChanged);
        }
示例#21
0
        /* PLAYBACK
         * */
        private void Play(float time)
        {
            if (time >= nextSequence.t)
            {
                oldSequence     = currentSequence;
                currentSequence = nextSequence;
                //Debug.Log (time);

                nextSequence.init();
                if (!ReadLine())
                {
                    Stop();
                    Debug.Log("InputPlayback: EndOfFile");
                }
            }
        }
示例#22
0
        public override bool Process(int frame)
        {
            UpdateOutputSize();
            Texture texture = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", texture);
            m_Material.SetVector("_CropFactors", new Vector4(
                                     (float)settings.Crop_Left / texture.width,
                                     (float)settings.Crop_Right / texture.width,
                                     (float)settings.Crop_Top / texture.height,
                                     (float)settings.Crop_Bottom / texture.height
                                     ));

            ExecuteShaderAndDump(frame, texture);
            return(true);
        }
示例#23
0
        private void AttachSequence(GameObject obj)
        {
            string        textSequence = _texts.FindUniquelyTargetableText();
            InputSequence sequence     = _sequenceOverlay.CreateSequence(textSequence, obj.transform);

            sequence.OnCompleted += delegate
            {
                Destroy(obj);
                if (_respawn)
                {
                    AddSequenceObject();
                }
            };
            sequence.OnRemoval += delegate
            {
                Destroy(obj);
            };
        }
示例#24
0
    private bool ReadLine() // read a new line in file for the next sequence to play
    {
        fs.Position = current_pos;
        string newline = inputPlaybackStream.ReadLine();

        current_pos = fs.Position;

        if (newline == null)
        {
            return(false);
        }
        try {
            nextSequence = JsonUtility.FromJson <InputSequence>(newline);
            return(true);
        } catch {
            return(false);
        }
    }
示例#25
0
        public override bool Process(int frame)
        {
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            if (settings.material != null)
            {
                settings.material.SetTexture("_InputFrame", inputFrame);
                settings.material.SetVector("_FrameData", new Vector4(OutputWidth, OutputHeight, frame, GetProcessorSequenceLength()));
                settings.material.SetVector("_FlipbookData", new Vector4(NumU, NumV, 0, 0));
                ExecuteShaderAndDump(frame, inputFrame, settings.material);
            }
            else
            {
                m_Material.SetTexture("_MainTex", inputFrame);
                ExecuteShaderAndDump(frame, inputFrame);
            }
            return(true);
        }
示例#26
0
 public void GetPositionData()
 {
     if (mode == Mode.PlayBack && running == true)
     {
         if (getTime() >= nextSequence.t)
         {
             oldSequence     = currentSequence;
             currentSequence = nextSequence;
             nextSequence.init();
             if (!ReadLine())
             {
                 eof = true;
                 Stop();
                 level_manager.EndGoal(gameObject);
                 //Debug.Log("InputPlayback: EndOfFile");
             }
         }
     }
 }
示例#27
0
        public override bool Process(int frame)
        {
            if (m_GradientTexture == null)
            {
                InitTexture();
            }

            CurveToTextureUtility.GradientToTexture(settings.Gradient, ref m_GradientTexture);
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);

            m_Material.SetFloat("_Mode", (int)settings.ColorSource);

            m_Material.SetTexture("_Gradient", m_GradientTexture);

            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#28
0
        public override bool Process(int frame)
        {
            if (m_CurveTexture == null)
            {
                InitTexture();
            }

            CurveToTextureUtility.CurveToTexture(settings.AlphaCurve, ref m_CurveTexture);
            Texture inputFrame = InputSequence.RequestFrame(frame).texture;

            m_Material.SetTexture("_MainTex", inputFrame);
            m_Material.SetFloat("_Brightness", settings.Brightness);
            m_Material.SetFloat("_Contrast", settings.Contrast);
            m_Material.SetFloat("_Saturation", settings.Saturation);

            m_Material.SetTexture("_AlphaCurve", m_CurveTexture);

            ExecuteShaderAndDump(frame, inputFrame);
            return(true);
        }
示例#29
0
        public override bool Process(int frame)
        {
            Texture texture = InputSequence.RequestFrame(0).texture;

            m_Material.SetTexture("_MainTex", texture);
            Vector4 rect = new Vector4();

            int u = Mathf.Min(settings.FlipbookNumU, texture.width);
            int v = Mathf.Min(settings.FlipbookNumV, texture.height);

            int x = frame % settings.FlipbookNumU;
            int y = (int)Mathf.Floor((float)frame / u);

            rect.x = (float)x;
            rect.y = (float)(v - 1) - y;
            rect.z = 1.0f / u;
            rect.w = 1.0f / v;

            m_Material.SetVector("_Rect", rect);
            ExecuteShaderAndDump(frame, texture);
            return(true);
        }
示例#30
0
 public void SetupWithSequence(InputSequence sequence) {
     this._currentSequence = sequence;
 }
示例#31
0
        public override bool Process(int frame)
        {
            int length = InputSequence.length;

            RenderTexture backup = RenderTexture.active;

            switch (settings.Mode)
            {
            case AssembleProcessorSettings.AssembleMode.FullSpriteSheet:

                // Blit Every Image inside output
                for (int i = 0; i < (settings.FlipbookNumU * settings.FlipbookNumV); i++)
                {
                    int u = i % settings.FlipbookNumU;
                    int v = (settings.FlipbookNumV - 1) - (int)Mathf.Floor((float)i / settings.FlipbookNumU);

                    Vector2 size = new Vector2(1.0f / settings.FlipbookNumU, 1.0f / settings.FlipbookNumV);
                    int     idx  = Mathf.Clamp(i, 0, length - 1);

                    Texture currentTexture = InputSequence.RequestFrame(idx).texture;

                    Vector4 ClipCoordinates = new Vector4(u * size.x, v * size.y, size.x, size.y);

                    m_Material.SetTexture("_MainTex", currentTexture);
                    m_Material.SetVector("_CC", ClipCoordinates);

                    Graphics.Blit(currentTexture, (RenderTexture)m_OutputSequence.frames[0].texture, m_Material);
                }

                RenderTexture.active = backup;

                break;

            case AssembleProcessorSettings.AssembleMode.VerticalSequence:

                // Blit Every N'th Image inside output
                int cycleLength = InputSequence.length / settings.FlipbookNumV;

                for (int i = 0; i < settings.FlipbookNumV; i++)
                {
                    int u = 0;
                    int v = settings.FlipbookNumV - 1 - i;

                    Vector2 size = new Vector2(1.0f, 1.0f / settings.FlipbookNumV);
                    int     idx  = Mathf.Clamp((i * cycleLength) + frame, 0, length - 1);

                    Texture currentTexture = InputSequence.RequestFrame(idx).texture;

                    Vector4 ClipCoordinates = new Vector4(u * size.x, v * size.y, size.x, size.y);

                    m_Material.SetTexture("_MainTex", currentTexture);
                    m_Material.SetVector("_CC", ClipCoordinates);

                    Graphics.Blit(currentTexture, (RenderTexture)m_OutputSequence.frames[frame].texture, m_Material);
                }

                RenderTexture.active = backup;
                break;
            }

            return(true);
        }