Esempio n. 1
0
    /// <summary>
    /// Called on script construction
    /// </summary>
	void Awake()
	{        
		m_SlicedSprite = GetComponent<SlicedSprite>();
        m_RigidBody = m_SlicedSprite.GetComponent<Rigidbody2D>();
        m_Material = m_SlicedSprite.GetComponent<Renderer>().material;
		m_InitialColor = m_Material.color;
	}
Esempio n. 2
0
        private void Initialize()
        {
            Control = new Scrollbar(this.Name);

            Track = new SlicedSprite("Track");
            Control.AttachControl(Track);
            Track.SpriteName       = ColossalSprite.ScrollbarTrack;
            Track.Color            = new Color32(254, 254, 254, 255);
            Track.DisabledColor    = new Color32(254, 254, 254, 255);
            Track.FillAmount       = 1;
            Track.FillDirection    = FillDirection.Horizontal;
            Track.Anchor           = Anchor.All;
            Track.Size             = Control.Size;
            Track.RelativePosition = Vector3.zero;
            Control.TrackControl   = Track;

            Thumb = new SlicedSprite("Thumb");
            Track.AttachControl(Thumb);
            Thumb.SpriteName       = ColossalSprite.ScrollbarThumb;
            Thumb.Color            = new Color32(254, 254, 254, 255);
            Thumb.DisabledColor    = new Color32(254, 254, 254, 255);
            Thumb.FillAmount       = 1;
            Thumb.FillDirection    = FillDirection.Horizontal;
            Thumb.Anchor           = Anchor.All;//Anchor.Top | Anchor.Left | Anchor.Right;
            Thumb.Width            = Track.Width - 6;
            Thumb.RelativePosition = new Vector3(3, 0);
            Control.ThumbControl   = Thumb;
        }
Esempio n. 3
0
 //construct
 //set color fade
 void Awake()
 {
     m_SlicedSprite = GetComponent <SlicedSprite>();
     m_RigidBody    = m_SlicedSprite.GetComponent <Rigidbody2D>();
     m_Material     = m_SlicedSprite.GetComponent <Renderer>().material;
     m_InitialColor = m_Material.color;
 }
        protected void HandleTexturedRect()
        {
            switch (FillMode)
            {
            default:
            case UIFillModes.Tilled:
                ShapeBuffer.TexturedRect(this, Rect, CurrentMaterial.DiffuseTexture, ReverseU, ReverseV);
                break;

            case UIFillModes.Stretch:
                ShapeBuffer.TexturedRect(this, Rect, UVScale, ReverseU, ReverseV);
                break;

            case UIFillModes.StretchMiddle:
                StrechedBuffer.Stretched(this, Rect);
                break;

            case UIFillModes.Stretch4Quad:
                SlicedSprite.FourSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                break;

            case UIFillModes.Fill9Sprite:
                SlicedSprite.NineSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                break;
            }
        }
Esempio n. 5
0
 // Called on script construction
 private void Awake()
 {
     _slicedSprite = GetComponent <SlicedSprite>();
     _rigidBody    = _slicedSprite.GetComponent <Rigidbody2D>();
     _material     = _slicedSprite.GetComponent <Renderer>().material;
     _initialColor = _material.color;
     tag           = "Destroy";
 }
Esempio n. 6
0
    void UpdateDragRotate()
    {
        if (Input.GetMouseButtonDown(0))
        {
            //Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //RaycastHit hitStart;
            //if (Physics.Raycast(ray.origin, ray.direction, out hitStart))
            //{
            //      Debug.Log("start : "  + hitStart.point);
            //    startWorld = hitStart.point;
            //    start = true;
            //}
            startWorld0 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            start       = true;
        }
        if (Input.GetMouseButton(0) && start)
        {
            //Ray rayRun = Camera.main.ScreenPointToRay(Input.mousePosition);
            //RaycastHit hitRun;
            //if (Physics.Raycast(rayRun.origin, rayRun.direction, out hitRun))
            //{
            //    Debug.DrawLine(startWorld, hitRun.point, Color.blue);
            //}
            Vector3 startWorld = new Vector3(startWorld0.x, startWorld0.y, 0);
            Vector3 runWorld0  = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector3 runWorld   = new Vector3(runWorld0.x, runWorld0.y, 0);
            Debug.DrawLine(startWorld, runWorld, Color.blue);
            SlicedSprite curRotateSprit    = curRotateSpriteGo.GetComponent <SlicedSprite>();
            Vector3      spriteCenterWorld = curRotateSprit.transform.TransformPoint(curRotateSprit.centerLocal);
            Debug.DrawLine(spriteCenterWorld, startWorld, Color.green);
            Vector3 v1 = startWorld - spriteCenterWorld;
            // Debug.Log(string.Format("start:{0},run:{1},center:{2}",startWorld,runWorld,spriteCenterWorld));

            Vector3 v2 = Vector3.back;
            Vector3 v3 = Vector3.Normalize(Vector3.Cross(v1, v2));
            Vector3 v4 = runWorld - startWorld;//hitRun.point - startWorld;
            float   f  = Vector3.Dot(v3, v4);
            Vector3 v5 = f * v3;

            Debug.DrawRay(startWorld, v5, Color.red);
            Vector3 endPoint = startWorld + v5 / 3;
            Vector3 v6       = endPoint - spriteCenterWorld;
            Debug.DrawLine(spriteCenterWorld, endPoint, Color.black);
            Quaternion q        = Quaternion.FromToRotation(v1, v6);
            GameObject parentGo = curRotateSprit.parentGo;
            parentGo.transform.localRotation *= q;
            //  curRotateSpriteGo.transform.RotateAround(spriteCenterWorld, Vector3.back, q.eulerAngles.z);
            //Debug.Log("drag .... ") ;
        }
        if (Input.GetMouseButtonUp(0))
        {
            //Vector3 endWorld = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            // Debug.Log("end: " + endWorld);
            start = false;
        }
    }
Esempio n. 7
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            GL.Viewport(0, 0, Width, Height);
            GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

            SlicedSprite buttonSprite = new SlicedSprite(texture, 0, 0, 0, 0, 12, 11, 12, 11);

            //ushort[] indices;
            //VertexPositionColorTexture[] vertices = buttonSprite.GetVertices(200, 200, 300, 300, 0, Color4.White, out indices);
            //VertexBuffer vb = VertexBuffer.Create(vertices[0].VertexFormat, vertices);
            //IndexBuffer ib = IndexBuffer.Create(indices);
            //VertexArray vao = new VertexArray(vb, ib);

            //shader.Bind();
            //Sampler sampler = Sampler.Create(texture);
            //shader.BindUniforms(new Dictionary<string, IUniformValue>() { {"Texture", UniformValue.Create(sampler) }
            //});

            ////_graphicsDevice.RenderState.BlendState = BlendState.AlphaBlend;

            //_graphicsDevice.DrawVertexArray(vao, shader);

            //wireframeShader.Bind();
            //wireframeShader.BindUniforms(new Dictionary<string, IUniformValue>()
            //{
            //  {"MatrixTransform", UniformValue.Create(projectionMatrix)},
            //  {"WIN_SCALE", UniformValue.Create((float)_graphicsDevice.ViewPort.Width, (float)_graphicsDevice.ViewPort.Height)},
            //  {"Diffuse", UniformValue.Create(new Color4(1.0f, 0f, 0f, 1f))}
            //});
            //GL.Disable(EnableCap.DepthTest);
            //_graphicsDevice.DrawVertexArray(vao, wireframeShader);
            //GL.Enable(EnableCap.DepthTest);

            spriteBatch.Begin(SpriteSortMode.Texture, BlendState.NonPremultiplied);
            spriteBatch.Draw(buttonSprite, 100, 100, 100, 100, Color4.White);
            spriteBatch.Draw(buttonSprite, 100, 200, 200, 100, Color4.White);
            spriteBatch.Draw(buttonSprite, 300, 300, 100, 100, Color4.White);
            spriteBatch.End();

            spriteBatch.Begin(SpriteSortMode.Texture, new RenderState()
            {
                BlendState = BlendState.AlphaBlend
            }, null, _font.Shader);
            spriteBatch.DrawString(_font, "Test Text!!", 0, 0);
            spriteBatch.End();

            SwapBuffers();
            DisposalManager.Process();
        }
Esempio n. 8
0
 State CheckIconState()
 {
     for (int i = 0; i < SpriteList.Count; i++)
     {
         SlicedSprite sprite = SpriteList[i];
         if (sprite.Is_Now_Dragging)
         {
             return(State.Drag);
         }
         else if (sprite.ShowIcon)
         {
             curRotateSpriteGo = sprite.gameObject;
             return(State.Rotate);
         }
     }
     return(State.Slice);
 }
Esempio n. 9
0
        protected void HandleTexturedRect()
        {
            switch (FillMode)
            {
            default:     // and titled
                ShapeBuffer.TexturedRect(this, Rect, CurrentMaterial.DiffuseTexture, ReverseU, ReverseV);
                break;

            case UIFillModes.Stretch:
                ShapeBuffer.TexturedRect(this, Rect, UVScale, ReverseU, ReverseV);
                break;

            case UIFillModes.StretchMiddle:
                StrechedBuffer.Stretched(this, Rect);
                break;

            case UIFillModes.Stretch4Quad:
                SlicedSprite.FourSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                break;

            case UIFillModes.Fill9Sprite:
                SlicedSprite.NineSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                break;

            case UIFillModes.SmartStprite:
                if (CurrentMaterial == null || CurrentMaterial.DiffuseTexture == null)
                {
                    ShapeBuffer.TexturedRect(this, Rect, UVScale, ReverseU, ReverseV);
                }
                else
                {
                    if (CurrentMaterial.DiffuseTexture != null && CurrentMaterial.DiffuseTexture.HasMetaData("9Sprite"))
                    {
                        SlicedSprite.NineSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                    }
                    else
                    {
                        SlicedSprite.FourSlice(this, Rect, CurrentMaterial.DiffuseTexture.PixelSize);
                    }
                }
                break;
            }
        }
Esempio n. 10
0
        public MainMenu(string name, StateMachine statemachine) : base(name, statemachine)
        {
            ui = new UIManager();
            Localizer.CultureChanged += Localizer_CultureChanged;
            buttonSprite              = new SlicedSprite("button_texture", "Textures/UI/Button");
            buttonSprite.Top          = 18;
            buttonSprite.Left         = 18;
            buttonSprite.Right        = 46;
            buttonSprite.Bottom       = 46;

            Assetmanager.AquireFont("Fonts/default");
            btnQuit           = new Button(ui, ui);
            btnQuit.Sprite    = buttonSprite;
            btnQuit.Font      = "Fonts/default";
            btnQuit.Position  = new Vector2(Game1.Graphics.PreferredBackBufferWidth / 2 - 100, 400);
            btnQuit.Dimension = new Point(200, 100);
            btnQuit.Click    += BtnQuit_Click;

            RefreshLocalization();
        }
Esempio n. 11
0
        protected override void OnLoad(EventArgs e)
        {
            _graphicsDevice = new GraphicsDevice(this);
            VSync           = VSyncMode.On;

            spriteBatch = new SpriteBatch(_graphicsDevice);

            GL.ClearColor(0.1f, 0.2f, 0.5f, 0.0f);
            GL.Enable(EnableCap.DepthTest);

            ContentManager content = new ContentManager(new ServiceProvider(), @"..\..\..\Content\");

            content.RegisterTypeReader <BitmapFont>(new SpriteFontReader(Shaders.FontShader));
            _font = content.Get <BitmapFont>(@"SourceCodePro16.meb").Content as BitmapFont;

            _graphicsDevice.DebugBatch.DefaultFont = _font;

            System.Drawing.Bitmap bmp = new System.Drawing.Bitmap("checkbox16on.png");
            _checkBoxOn  = Texture2D.Create(bmp);
            bmp          = new System.Drawing.Bitmap("checkbox16off.png");
            _checkBoxOff = Texture2D.Create(bmp);
            bmp          = new System.Drawing.Bitmap("slider16.png");
            _trackSprite = Texture2D.Create(bmp);
            bmp          = new System.Drawing.Bitmap("sliderknob16.png");
            _thumbSprite = Texture2D.Create(bmp);
            bmp          = new System.Drawing.Bitmap("buttons.png");
            Texture2D buttons = Texture2D.Create(bmp);

            bmp = new System.Drawing.Bitmap("disk.png");
            Texture2D disk = Texture2D.Create(bmp);

            //projectionMatrix = Matrix4.CreateOrthographicOffCenter(0, _graphicsDevice.ViewPort.Width, _graphicsDevice.ViewPort.Height, 0, 0, 1);

            world = Matrix4.Scale(0.5f) * Matrix4.CreateTranslation(0, -1.5f, 0);

            _graphicsDevice.Camera = new GuiCamera(_graphicsDevice);
            _graphicsDevice.DebugBatch.ScreenCamera = _graphicsDevice.Camera;
            _graphicsDevice.DebugBatch.WorldCamera  = _graphicsDevice.Camera;

            _guiRoot  = new GuiComponent(_graphicsDevice.Width, _graphicsDevice.Height); // { Position = new Vector2(100, 100) };
            _checkBox = new CheckBox("Test Check Box", new Binding(this, "Check"), new Sprite(_checkBoxOn, 0, 0, 0, 0), new Sprite(_checkBoxOff, 0, 0, 0, 0), _font);
            Label  label       = new Label("test label", _font);                         // { Position = new Vector2(0, 50)};
            Sprite trackSprite = new Sprite(_trackSprite, 0, 0, 0, 0);
            Sprite thumbSprite = new Sprite(_thumbSprite, 0, 0, 0, 0);

            FloatValue = 0f;
            Slider slider = new Slider("Test slider: {0:0.00}", new Binding(this, "FloatValue"), 0f, 1f, trackSprite, thumbSprite, _font);

            SlicedSprite buttonNormal  = new SlicedSprite(buttons, 0, 0, 30, 30, 2);
            SlicedSprite buttonHover   = new SlicedSprite(buttons, 0, 32, 30, 30, 2);
            SlicedSprite buttonPressed = new SlicedSprite(buttons, 0, 64, 30, 30, 2);
            Button       button        = new Button("Button.", buttonNormal, buttonHover, buttonPressed, new Sprite(disk, 0, 0, 0, 0), _font);

            button.Click += (o, ev) => System.Diagnostics.Debug.WriteLine("Button Pressed!!!!");
            StackPanel hpanel = new StackPanel(Dimension.Vertical);
            Panel      panel  = new Panel(Color4.Gray, 1f)
            {
                Color = new Color4(128, 128, 128, 63), Position = new Vector2(100, 100), Margin = 5
            };

            hpanel.AddChild(_checkBox);
            hpanel.AddChild(label);
            hpanel.AddChild(slider);
            hpanel.AddChild(button);
            panel.AddChild(hpanel);
            _guiRoot.AddChild(panel);

            //debugGuis.Add(button);

            Mouse.ButtonUp   += new EventHandler <MouseButtonEventArgs>(OnButtonUp);
            Mouse.ButtonDown += new EventHandler <MouseButtonEventArgs>(OnButtonDown);
            Mouse.Move       += new EventHandler <MouseMoveEventArgs>(OnMouseMove);

            _depthTexture  = new Texture2D(800, 600, PixelInternalFormat.DepthComponent, PixelFormat.DepthComponent, PixelType.Float);
            _screenTexture = new Texture2D(800, 600);
            //_fbo = new FrameBuffer(_graphicsDevice, new Texture2D[] { _screenTexture }, _depthTexture);

            string vsSrc = @"#version 150
uniform mat4 WorldViewProj;
in vec3 Position;
in vec3 Color;
in vec2 TexCoord;
noperspective out vec2 fragTexCoord;
void main() {
  fragTexCoord = TexCoord;
  gl_Position = WorldViewProj * vec4(Position, 1);
}
";

            string fsSrc = @"#version 150
uniform sampler2D Texture;
uniform vec4 Diffuse = vec4(1);
      
noperspective in vec2 fragTexCoord;
      
out vec4 finalColor;
      
void main() {
    float n = 1.0; // camera z near
  float f = 100.0; // camera z far
  float z = texture(Texture, fragTexCoord).x;
  float d = (2.0 * n) / (f + n - z * (f - n));
    finalColor = vec4(d,d,d,1);
}
";

            wireframeShader = new Program(vsSrc, fsSrc);
        }
Esempio n. 12
0
 /// <summary>
 /// Initialise this sliced sprite using an existing SlicedSprite
 /// </summary>
 public void InitFromSlicedSprite(SlicedSprite slicedSprite, PolygonCollider2D polygon)
 {
     InitSprite(slicedSprite.gameObject, polygon, slicedSprite.MinCoords, slicedSprite.MaxCoords, slicedSprite.SpriteBounds, slicedSprite.m_MeshRenderer.sharedMaterial, slicedSprite.Rotated, slicedSprite.HFlipped, slicedSprite.VFlipped);
     m_ParentInstanceID      = slicedSprite.GetInstanceID();
     m_CutsSinceParentObject = slicedSprite.CutsSinceParentObject + 1;
 }
Esempio n. 13
0
    static void CutThiSprite(Transform parentTransform, Vector3 cutEnterPoint, Vector3 cutExitPoint, Vector3 cutStart, Vector3 cutEnd)
    {
        if (!parentTransform)
        {
            return;
        }
        SlicedSprite   parentSlicedSprite = null;
        SpriteRenderer parentUnitySprite  = null;

        parentUnitySprite = parentTransform.GetComponent <SpriteRenderer>();

        if (parentUnitySprite == null)
        {
            parentSlicedSprite = parentTransform.GetComponent <SlicedSprite>();
            if (parentSlicedSprite == null)
            {
                return;
            }
        }

        Vector3 cutEnterLocalPoint = parentTransform.gameObject.transform.InverseTransformPoint(cutEnterPoint);
        Vector3 cutExitLocalPoint  = parentTransform.gameObject.transform.InverseTransformPoint(cutExitPoint);

        Collider2D collider2D = parentTransform.gameObject.GetComponent <Collider2D>();

        Vector2[] polygonPoints = GetPolygonPoints(collider2D);

        Vector3 cutStartLocalPoint = parentTransform.gameObject.transform.InverseTransformPoint(cutStart);
        Vector3 cutEndLocalPoint   = parentTransform.gameObject.transform.InverseTransformPoint(cutEnd);

        if (polygonPoints != null)
        {
            if (IsPointInsidePolygon(cutStartLocalPoint, polygonPoints) ||
                IsPointInsidePolygon(cutEndLocalPoint, polygonPoints))
            {
                if (s_DebugLoggingEnabled)
                {
                    Debug.LogWarning("Failed to slice " + parentTransform.gameObject.name + " - start or end cut point is inside the collision mesh");
                }

                return;;
            }

            if (!s_AllowConvexSlicing && !IsConvex(new List <Vector2>(polygonPoints)))
            {
                if (s_DebugLoggingEnabled)
                {
                    Debug.LogWarning("Failed to slice " + parentTransform.gameObject.name + " - original shape is not convex");
                }

                return;
            }

            List <Vector2> childSprite1Vertices = new List <Vector2>();
            List <Vector2> childSprite2Vertices = new List <Vector2>();

            childSprite1Vertices.Add(cutEnterLocalPoint);
            childSprite1Vertices.Add(cutExitLocalPoint);

            childSprite2Vertices.Add(cutEnterLocalPoint);
            childSprite2Vertices.Add(cutExitLocalPoint);

            for (int vertex = 0; vertex < polygonPoints.Length; vertex++)
            {
                Vector2 point       = polygonPoints[vertex];
                float   determinant = CalculateDeterminant2x3(cutEnterLocalPoint, cutExitLocalPoint, point);
                if (determinant > 0)
                {
                    childSprite1Vertices.Add(point);
                }
                else
                {
                    childSprite2Vertices.Add(point);
                }
            }

            childSprite1Vertices = new List <Vector2>(ArrangeVertices(childSprite1Vertices));
            childSprite2Vertices = new List <Vector2>(ArrangeVertices(childSprite2Vertices));

            if (!AreVerticesAcceptable(childSprite1Vertices) || !AreVerticesAcceptable(childSprite2Vertices))
            {
                return;
            }
            else
            {
                SlicedSprite      childSprite1, childSprite2;
                PolygonCollider2D child1Collider, child2Collider;

                float parentArea = Mathf.Abs(Area(polygonPoints));
                CreateChildSprite(parentTransform, childSprite1Vertices, parentArea, out childSprite1, out child1Collider);
                childSprite1.gameObject.name = parentTransform.gameObject.name + "_child1";

                CreateChildSprite(parentTransform, childSprite2Vertices, parentArea, out childSprite2, out child2Collider);
                childSprite2.gameObject.name = parentTransform.gameObject.name + "_child2";

                if (parentSlicedSprite)
                {
                    childSprite1.InitFromSlicedSprite(parentSlicedSprite, child1Collider);
                    childSprite2.InitFromSlicedSprite(parentSlicedSprite, child2Collider);
                }
                else if (parentUnitySprite)
                {
                    childSprite1.InitFromUnitySprite(parentUnitySprite, child1Collider);
                    childSprite2.InitFromUnitySprite(parentUnitySprite, child2Collider);
                }
                SlicedSprite parentSprite = parentTransform.GetComponent <SlicedSprite>();
                if (parentSprite != null)//初始情况为UnitySprite的所以需要判空
                {
                    SpriteSlicerManager.Instance.SpriteList.Remove(parentSprite);
                }
                SpriteSlicerManager.Instance.SpriteList.Add(childSprite1);
                SpriteSlicerManager.Instance.SpriteList.Add(childSprite2);
                SplitSlices(childSprite1.gameObject, childSprite2.gameObject, cutStart, cutEnd);
                GameObject.Destroy(parentTransform.gameObject);
            }
        }
    }
Esempio n. 14
0
    /// <summary>
    /// Create a child sprite from the given parent sprite, using the provided vertices
    /// </summary>
    static void CreateChildSprite(Transform parentTransform, List <Vector2> spriteVertices, float parentArea, out SlicedSprite slicedSprite, out PolygonCollider2D polygonCollider)
    {
        float childArea = GetArea(spriteVertices);

        GameObject childObject = new GameObject();

        childObject.transform.parent     = parentTransform.parent;
        childObject.transform.position   = parentTransform.position;
        childObject.transform.rotation   = parentTransform.rotation;
        childObject.transform.localScale = parentTransform.localScale;
        childObject.tag = parentTransform.gameObject.tag;
        // Child sprites should inherit the rigid body behaviour of their parents
        //Rigidbody2D childRigidBody = childObject.AddComponent<Rigidbody2D>();
        //childRigidBody.mass = parentRigidBody.mass * (childArea / parentArea);
        //childRigidBody.drag = parentRigidBody.drag;
        //childRigidBody.angularDrag = parentRigidBody.angularDrag;
        //childRigidBody.gravityScale = parentRigidBody.gravityScale;
        //childRigidBody.fixedAngle = parentRigidBody.fixedAngle;
        //childRigidBody.isKinematic = parentRigidBody.isKinematic;
        //childRigidBody.interpolation = parentRigidBody.interpolation;
        //childRigidBody.sleepMode = parentRigidBody.sleepMode;
        //childRigidBody.collisionDetectionMode = parentRigidBody.collisionDetectionMode;
        //childRigidBody.velocity = parentRigidBody.velocity;
        //childRigidBody.angularVelocity = parentRigidBody.angularVelocity;

        polygonCollider        = childObject.AddComponent <PolygonCollider2D>();
        polygonCollider.points = spriteVertices.ToArray();
        slicedSprite           = childObject.AddComponent <SlicedSprite>();
    }