/// <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; }
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; }
//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; } }
// Called on script construction private void Awake() { _slicedSprite = GetComponent <SlicedSprite>(); _rigidBody = _slicedSprite.GetComponent <Rigidbody2D>(); _material = _slicedSprite.GetComponent <Renderer>().material; _initialColor = _material.color; tag = "Destroy"; }
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; } }
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(); }
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); }
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; } }
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(); }
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); }
/// <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; }
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); } } }
/// <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>(); }