Esempio n. 1
0
        public static void ConstructOffsetsFromAnchor(tk2dSpriteDefinition def, tk2dBaseSprite.Anchor anchor, Vector2?scale = null, bool fixesScale = false, bool changesCollider = true)
        {
            if (!scale.HasValue)
            {
                scale = new Vector2?(def.position3);
            }
            if (fixesScale)
            {
                Vector2 fixedScale = scale.Value - def.position0.XY();
                scale = new Vector2?(fixedScale);
            }
            float xOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.LowerCenter || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.UpperCenter)
            {
                xOffset = -(scale.Value.x / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.LowerRight || anchor == tk2dBaseSprite.Anchor.MiddleRight || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                xOffset = -scale.Value.x;
            }
            float yOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.MiddleLeft || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.MiddleLeft)
            {
                yOffset = -(scale.Value.y / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.UpperLeft || anchor == tk2dBaseSprite.Anchor.UpperCenter || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                yOffset = -scale.Value.y;
            }
            MakeOffset(def, new Vector2(xOffset, yOffset), changesCollider);
        }
    public override void OnInspectorGUI()
    {
        tk2dSpriteFromTexture target = (tk2dSpriteFromTexture)this.target;

        tk2dGuiUtility.LookLikeInspector();

        EditorGUI.BeginChangeCheck();

        Texture texture = EditorGUILayout.ObjectField("Texture", target.texture, typeof(Texture), false) as Texture;

        if (texture == null)
        {
            tk2dGuiUtility.LookLikeControls();
            tk2dGuiUtility.InfoBox("Drag a texture into the texture slot above.", tk2dGuiUtility.WarningLevel.Error);
        }

        tk2dBaseSprite.Anchor    anchor = target.anchor;
        tk2dSpriteCollectionSize spriteCollectionSize = new tk2dSpriteCollectionSize();

        spriteCollectionSize.CopyFrom(target.spriteCollectionSize);

        if (texture != null)
        {
            anchor = (tk2dBaseSprite.Anchor)EditorGUILayout.EnumPopup("Anchor", target.anchor);
            tk2dGuiUtility.SpriteCollectionSize(spriteCollectionSize);
        }

        if (EditorGUI.EndChangeCheck())
        {
            tk2dUndo.RecordObject(target, "Sprite From Texture");
            target.Create(spriteCollectionSize, texture, anchor);
        }
    }
    public void Create( tk2dSpriteCollectionSize spriteCollectionSize, Texture texture, tk2dBaseSprite.Anchor anchor )
    {
        DestroyInternal();
        if (texture != null) {
            // Copy values
            this.spriteCollectionSize.CopyFrom( spriteCollectionSize );
            this.texture = texture;
            this.anchor = anchor;

            Vector2 anchorPos = tk2dSpriteGeomGen.GetAnchorOffset( anchor, texture.width, texture.height );
            spriteCollection = tk2dRuntime.SpriteCollectionGenerator.CreateFromTexture(
                gameObject,
                texture,
                spriteCollectionSize,
                new Vector2(texture.width, texture.height),
                new string[] { "unnamed" } ,
                new Rect[] { new Rect(0, 0, texture.width, texture.height) },
                null,
                new Vector2[] { anchorPos },
                new bool[] { false } );

            // don't want to save or see this
            spriteCollection.hideFlags = HideFlags.HideInInspector;

            string objName = "SpriteFromTexture " + texture.name;
            spriteCollection.spriteCollectionName = objName;
            spriteCollection.spriteDefinitions[0].material.name = objName;
            spriteCollection.spriteDefinitions[0].material.hideFlags = HideFlags.DontSave | HideFlags.HideInInspector;

            Sprite.SetSprite( spriteCollection, 0 );
        }
    }
Esempio n. 4
0
        // Token: 0x06000099 RID: 153 RVA: 0x00007FFC File Offset: 0x000061FC
        public static void ConstructOffsetsFromAnchor(this tk2dSpriteDefinition def, tk2dBaseSprite.Anchor anchor, Vector2 scale)
        {
            float x    = 0f;
            bool  flag = anchor == tk2dBaseSprite.Anchor.LowerCenter || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.UpperCenter;

            if (flag)
            {
                x = -(scale.x / 2f);
            }
            else
            {
                bool flag2 = anchor == tk2dBaseSprite.Anchor.LowerRight || anchor == tk2dBaseSprite.Anchor.MiddleRight || anchor == tk2dBaseSprite.Anchor.UpperRight;
                if (flag2)
                {
                    x = -scale.x;
                }
            }
            float y     = 0f;
            bool  flag3 = anchor == tk2dBaseSprite.Anchor.MiddleLeft || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.MiddleLeft;

            if (flag3)
            {
                y = -(scale.y / 2f);
            }
            else
            {
                bool flag4 = anchor == tk2dBaseSprite.Anchor.UpperLeft || anchor == tk2dBaseSprite.Anchor.UpperCenter || anchor == tk2dBaseSprite.Anchor.UpperRight;
                if (flag4)
                {
                    y = -scale.y;
                }
            }
            def.MakeOffset(new Vector2(x, y));
        }
 public void Create(tk2dSpriteCollectionSize spriteCollectionSize, Texture texture, tk2dBaseSprite.Anchor anchor)
 {
     this.DestroyInternal();
     if (texture != null)
     {
         this.spriteCollectionSize.CopyFrom(spriteCollectionSize);
         this.texture = texture;
         this.anchor = anchor;
         GameObject parentObject = new GameObject("tk2dSpriteFromTexture - " + texture.name);
         parentObject.transform.localPosition = Vector3.zero;
         parentObject.transform.localRotation = Quaternion.identity;
         parentObject.transform.localScale = Vector3.one;
         parentObject.hideFlags = HideFlags.DontSave;
         Vector2 vector = tk2dSpriteGeomGen.GetAnchorOffset(anchor, (float) texture.width, (float) texture.height);
         string[] names = new string[] { "unnamed" };
         Rect[] regions = new Rect[] { new Rect(0f, 0f, (float) texture.width, (float) texture.height) };
         Vector2[] anchors = new Vector2[] { vector };
         this.spriteCollection = SpriteCollectionGenerator.CreateFromTexture(parentObject, texture, spriteCollectionSize, new Vector2((float) texture.width, (float) texture.height), names, regions, null, anchors, new bool[1]);
         string str = "SpriteFromTexture " + texture.name;
         this.spriteCollection.spriteCollectionName = str;
         this.spriteCollection.spriteDefinitions[0].material.name = str;
         this.spriteCollection.spriteDefinitions[0].material.hideFlags = HideFlags.DontSave | HideFlags.HideInInspector;
         this.Sprite.SetSprite(this.spriteCollection, 0);
     }
 }
Esempio n. 6
0
    public override void OnInspectorGUI()
    {
        tk2dSpriteFromTexture target = (tk2dSpriteFromTexture)this.target;

        EditorGUIUtility.LookLikeInspector();

        EditorGUI.BeginChangeCheck();

        Texture texture = EditorGUILayout.ObjectField("Texture", target.texture, typeof(Texture), false) as Texture;

        tk2dBaseSprite.Anchor    anchor = target.anchor;
        tk2dSpriteCollectionSize spriteCollectionSize = new tk2dSpriteCollectionSize();

        spriteCollectionSize.CopyFrom(target.spriteCollectionSize);

        if (texture != null)
        {
            anchor = (tk2dBaseSprite.Anchor)EditorGUILayout.EnumPopup("Anchor", target.anchor);
            SpriteCollectionSizeField(spriteCollectionSize);
        }

        if (EditorGUI.EndChangeCheck())
        {
            Undo.RegisterUndo(target, "Sprite From Texture");
            target.Create(spriteCollectionSize, texture, anchor);
        }
    }
	public void Create( tk2dSpriteCollectionSize spriteCollectionSize, Texture texture, tk2dBaseSprite.Anchor anchor ) {
		DestroyInternal();
		if (texture != null) {
			// Copy values
			this.spriteCollectionSize.CopyFrom( spriteCollectionSize );
			this.texture = texture;
			this.anchor = anchor;

			GameObject go = new GameObject("tk2dSpriteFromTexture - " + texture.name);
			go.transform.localPosition = Vector3.zero;
			go.transform.localRotation = Quaternion.identity;
			go.transform.localScale = Vector3.one;
			go.hideFlags = HideFlags.DontSave;
			
			Vector2 anchorPos = tk2dSpriteGeomGen.GetAnchorOffset( anchor, texture.width, texture.height );
			spriteCollection = tk2dRuntime.SpriteCollectionGenerator.CreateFromTexture(
				go, 
				texture, 
				spriteCollectionSize,
				new Vector2(texture.width, texture.height),
				new string[] { "unnamed" } ,
				new Rect[] { new Rect(0, 0, texture.width, texture.height) },
				null,
				new Vector2[] { anchorPos },
				new bool[] { false } );

			string objName = "SpriteFromTexture " + texture.name;
			spriteCollection.spriteCollectionName = objName;
			spriteCollection.spriteDefinitions[0].material.name = objName;
			spriteCollection.spriteDefinitions[0].material.hideFlags = HideFlags.DontSave | HideFlags.HideInInspector;

			Sprite.SetSprite( spriteCollection, 0 );
		}
	}
Esempio n. 8
0
    public void Create(tk2dSpriteCollectionSize spriteCollectionSize, Texture texture, tk2dBaseSprite.Anchor anchor)
    {
        DestroyInternal();
        if (texture != null)
        {
            // Copy values
            this.spriteCollectionSize.CopyFrom(spriteCollectionSize);
            this.texture = texture;
            this.anchor  = anchor;

            Vector2 anchorPos = tk2dSpriteGeomGen.GetAnchorOffset(anchor, texture.width, texture.height);
            spriteCollection = tk2dRuntime.SpriteCollectionGenerator.CreateFromTexture(
                gameObject,
                texture,
                spriteCollectionSize,
                new Vector2(texture.width, texture.height),
                new string[] { "unnamed" },
                new Rect[] { new Rect(0, 0, texture.width, texture.height) },
                null,
                new Vector2[] { anchorPos },
                new bool[] { false });

            // don't want to save or see this
            spriteCollection.hideFlags = HideFlags.HideInInspector;

            string objName = "SpriteFromTexture " + texture.name;
            spriteCollection.spriteCollectionName = objName;
            spriteCollection.spriteDefinitions[0].material.name      = objName;
            spriteCollection.spriteDefinitions[0].material.hideFlags = HideFlags.DontSave | HideFlags.HideInInspector;

            Sprite.SetSprite(spriteCollection, 0);
        }
    }
Esempio n. 9
0
        public static void ConstructOffsetsFromAnchor(this tk2dSpriteDefinition def, tk2dBaseSprite.Anchor anchor, Vector2?scale = null, bool fixesScale = false, bool changesCollider = true)
        {
            if (!scale.HasValue)
            {
                scale = new Vector2?(def.position3);
            }
            if (fixesScale)
            {
                Vector2 fixedScale = scale.Value - def.position0.XY();
                scale = new Vector2?(fixedScale);
            }
            float xOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.LowerCenter || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.UpperCenter)
            {
                xOffset = -(scale.Value.x / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.LowerRight || anchor == tk2dBaseSprite.Anchor.MiddleRight || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                xOffset = -scale.Value.x;
            }
            float yOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.MiddleLeft || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.MiddleLeft)
            {
                yOffset = -(scale.Value.y / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.UpperLeft || anchor == tk2dBaseSprite.Anchor.UpperCenter || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                yOffset = -scale.Value.y;
            }
            def.MakeOffset(new Vector2(xOffset, yOffset), false);
            if (changesCollider && def.colliderVertices != null && def.colliderVertices.Length > 0)
            {
                float colliderXOffset = 0;
                if (anchor == tk2dBaseSprite.Anchor.LowerLeft || anchor == tk2dBaseSprite.Anchor.MiddleLeft || anchor == tk2dBaseSprite.Anchor.UpperLeft)
                {
                    colliderXOffset = (scale.Value.x / 2f);
                }
                else if (anchor == tk2dBaseSprite.Anchor.LowerRight || anchor == tk2dBaseSprite.Anchor.MiddleRight || anchor == tk2dBaseSprite.Anchor.UpperRight)
                {
                    colliderXOffset = -(scale.Value.x / 2f);
                }
                float colliderYOffset = 0;
                if (anchor == tk2dBaseSprite.Anchor.LowerLeft || anchor == tk2dBaseSprite.Anchor.LowerCenter || anchor == tk2dBaseSprite.Anchor.LowerRight)
                {
                    colliderYOffset = (scale.Value.y / 2f);
                }
                else if (anchor == tk2dBaseSprite.Anchor.UpperLeft || anchor == tk2dBaseSprite.Anchor.UpperCenter || anchor == tk2dBaseSprite.Anchor.UpperRight)
                {
                    colliderYOffset = -(scale.Value.y / 2f);
                }
                def.colliderVertices[0] += new Vector3(colliderXOffset, colliderYOffset, 0);
            }
        }
    public bool SetSprite(tk2dSpriteCollectionData newCollection, string spriteName, tk2dBaseSprite.Anchor anchor)
    {
        int spriteId = newCollection.GetSpriteIdByName(spriteName, -1);

        if (spriteId != -1)
        {
            SetSprite(newCollection, spriteId, anchor);
        }
        else
        {
            CustomDebug.LogError("SetSprite - Sprite not found in collection: " + spriteName);
        }
        return(spriteId != -1);
    }
Esempio n. 11
0
    public static List <int> getAnchorHidePtList(tk2dBaseSprite.Anchor anchor, Rect r, Transform t)
    {
        List <int> hidePts = new List <int>();
        int        x       = 0;
        int        y       = 0;

        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft: x = -1; y = -1; break;

        case tk2dBaseSprite.Anchor.LowerRight: x = 1; y = -1; break;

        case tk2dBaseSprite.Anchor.UpperLeft: x = -1; y = 1; break;

        case tk2dBaseSprite.Anchor.UpperRight: x = 1; y = 1; break;
        }
        if (r.width < 0.0f)
        {
            x = -x;
        }
        if (r.height < 0.0f)
        {
            y = -y;
        }
        if (t.localScale.x < 0.0f)
        {
            x = -x;
        }
        if (t.localScale.y < 0.0f)
        {
            y = -y;
        }
        if (x == -1 && y == -1)
        {
            hidePts.Add(0);
        }
        if (x == 1 && y == -1)
        {
            hidePts.Add(1);
        }
        if (x == -1 && y == 1)
        {
            hidePts.Add(2);
        }
        if (x == 1 && y == 1)
        {
            hidePts.Add(3);
        }
        return(hidePts);
    }
    public void SetSprite(tk2dSpriteCollectionData newCollection, int newSpriteId, tk2dBaseSprite.Anchor anchor)
    {
        if (Collection != newCollection)
        {
            Collection = newCollection;
            _spriteId  = -1; // force an update, but only when the collection has changed
        }

        SpriteID = newSpriteId;

        AnchorPoint = anchor;

        UpdateSpriteRenderer();
    }
Esempio n. 13
0
        public static void Mount(this AIActor self, GameActor other, tk2dBaseSprite.Anchor attachAnchor = tk2dBaseSprite.Anchor.MiddleCenter, tk2dBaseSprite.Anchor sitAnchor = tk2dBaseSprite.Anchor.LowerCenter, MountedBehaviour.LayeringType layeringType =
                                 MountedBehaviour.LayeringType.ABOVE, float heightDifference            = 1.5f)
        {
            if (self == null || other == null)
            {
                return;
            }
            MountedBehaviour mountedBehaviour = self.gameObject.AddComponent <MountedBehaviour>();

            mountedBehaviour.mount            = other;
            mountedBehaviour.attachAnchor     = attachAnchor;
            mountedBehaviour.sitAnchor        = sitAnchor;
            mountedBehaviour.layeringType     = layeringType;
            mountedBehaviour.heightDifference = heightDifference;
        }
    public override void OnInspectorGUI()
    {
        tk2dMySpriteFromTexture target = (tk2dMySpriteFromTexture)this.target;

        #if UNITY_5_4_OR_NEWER
        EditorGUIUtility.labelWidth = 0;
        EditorGUIUtility.fieldWidth = 0;
        #else
        EditorGUIUtility.LookLikeControls(0, 0);
        #endif
        EditorGUI.BeginChangeCheck();
        Texture texture = EditorGUILayout.ObjectField("Texture", target.Texture, typeof(Texture), false) as Texture;
        if (texture == null)
        {
            #if UNITY_5_4_OR_NEWER
            EditorGUIUtility.labelWidth = 0;
            EditorGUIUtility.fieldWidth = 0;
            #else
            EditorGUIUtility.LookLikeControls();
            #endif
            tk2dGuiUtility.InfoBox("Drag a texture into the texture slot above.", tk2dGuiUtility.WarningLevel.Error);
        }
        tk2dBaseSprite.Anchor anchor = target.anchor;
        bool rebuild = target.rebuild;
        tk2dSpriteCollectionSize spriteCollectionSize = new tk2dSpriteCollectionSize();
        spriteCollectionSize.CopyFrom(target.spriteCollectionSize);
        if (texture != null)
        {
            rebuild = EditorGUILayout.Toggle("Rebuild on Awake", target.rebuild);
            anchor  = (tk2dBaseSprite.Anchor)EditorGUILayout.EnumPopup("Anchor", target.anchor);
            SpriteCollectionSizeField(spriteCollectionSize);
        }
        if (EditorGUI.EndChangeCheck())
        {
            Undo.RecordObject(target, "Sprite From Texture");
            target.anchor  = anchor;
            target.rebuild = rebuild;
            target.spriteCollectionSize = spriteCollectionSize;
            target.Texture = texture;
            target.ForceBuild();
        }
        if (GUILayout.Button("Force build"))
        {
            target.ForceBuild();
        }
    }
Esempio n. 15
0
    public static Vector2 GetAnchorOffset(tk2dBaseSprite.Anchor anchor, float width, float height)
    {
        Vector2 anchorOffset = Vector2.zero;

        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.UpperLeft:
            break;

        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.UpperCenter:
            anchorOffset.x = (int)(width / 2.0f); break;

        case tk2dBaseSprite.Anchor.LowerRight:
        case tk2dBaseSprite.Anchor.MiddleRight:
        case tk2dBaseSprite.Anchor.UpperRight:
            anchorOffset.x = (int)(width); break;
        }
        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.UpperLeft:
        case tk2dBaseSprite.Anchor.UpperCenter:
        case tk2dBaseSprite.Anchor.UpperRight:
            break;

        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.MiddleRight:
            anchorOffset.y = (int)(height / 2.0f); break;

        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.LowerRight:
            anchorOffset.y = (int)height; break;
        }

        return(anchorOffset);
    }
Esempio n. 16
0
    // Rect origin as offset from Anchor
    public static Vector2 GetAnchorOffset(Vector2 rectSize, tk2dBaseSprite.Anchor anchor)
    {
        Vector2 anchorOffset = Vector3.zero;

        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.UpperLeft:
            break;

        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.UpperCenter:
            anchorOffset.x = -(rectSize.x / 2.0f); break;

        case tk2dBaseSprite.Anchor.LowerRight:
        case tk2dBaseSprite.Anchor.MiddleRight:
        case tk2dBaseSprite.Anchor.UpperRight:
            anchorOffset.x = -(rectSize.x); break;
        }
        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.LowerRight:
            break;

        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.MiddleRight:
            anchorOffset.y = -(rectSize.y / 2.0f); break;

        case tk2dBaseSprite.Anchor.UpperLeft:
        case tk2dBaseSprite.Anchor.UpperCenter:
        case tk2dBaseSprite.Anchor.UpperRight:
            anchorOffset.y = -(rectSize.y); break;
        }
        return(anchorOffset);
    }
Esempio n. 17
0
    public override void OnInspectorGUI()
    {
        tk2dCameraAnchor _target = (tk2dCameraAnchor)this.target;

        tk2dBaseSprite.Anchor prevAnchorPoint = _target.AnchorPoint;
        _target.AnchorCamera = EditorGUILayout.ObjectField("Camera", _target.AnchorCamera, typeof(Camera), true) as Camera;
        _target.AnchorPoint  = (tk2dBaseSprite.Anchor)EditorGUILayout.EnumPopup("Anchor Point", _target.AnchorPoint);

        if (_target.AnchorCamera != null && _target.AnchorCamera.GetComponent <tk2dCamera>() != null)
        {
            EditorGUI.indentLevel++;

            GUILayout.BeginHorizontal();
            EditorGUILayout.PrefixLabel("Offset");
            Vector2 anchorOffset = _target.AnchorOffsetPixels;
            anchorOffset.x             = EditorGUILayout.FloatField(anchorOffset.x, GUILayout.MaxWidth(60));
            anchorOffset.y             = EditorGUILayout.FloatField(anchorOffset.y, GUILayout.MaxWidth(60));
            _target.AnchorOffsetPixels = anchorOffset;
            GUILayout.EndHorizontal();

            _target.AnchorToNativeBounds = EditorGUILayout.Toggle("To Native Bounds", _target.AnchorToNativeBounds);

            EditorGUI.indentLevel--;
        }

        if (GUI.changed)
        {
            _target.ForceUpdateTransform();
            if (prevAnchorPoint != _target.AnchorPoint &&
                _target.gameObject.name == GetAnchorPointName(prevAnchorPoint))
            {
                UpdateAnchorName(_target);
            }
            EditorUtility.SetDirty(_target);
        }
    }
Esempio n. 18
0
        public static void ConstructOffsetsFromAnchor(this tk2dSpriteDefinition def, tk2dBaseSprite.Anchor anchor, Vector2 scale, bool changesCollider = true)
        {
            float xOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.LowerCenter || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.UpperCenter)
            {
                xOffset = -(scale.x / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.LowerRight || anchor == tk2dBaseSprite.Anchor.MiddleRight || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                xOffset = -scale.x;
            }
            float yOffset = 0;

            if (anchor == tk2dBaseSprite.Anchor.MiddleLeft || anchor == tk2dBaseSprite.Anchor.MiddleCenter || anchor == tk2dBaseSprite.Anchor.MiddleLeft)
            {
                yOffset = -(scale.y / 2f);
            }
            else if (anchor == tk2dBaseSprite.Anchor.UpperLeft || anchor == tk2dBaseSprite.Anchor.UpperCenter || anchor == tk2dBaseSprite.Anchor.UpperRight)
            {
                yOffset = -scale.y;
            }
            def.MakeOffset(new Vector2(xOffset, yOffset), changesCollider);
        }
    public void Create(tk2dSpriteCollectionSize spriteCollectionSize, Texture texture, tk2dBaseSprite.Anchor anchor)
    {
        DestroyInternal();
        if (texture != null)
        {
            // Copy values
            this.spriteCollectionSize.CopyFrom(spriteCollectionSize);
            this.texture = texture;
            this.anchor  = anchor;

            GameObject go = new GameObject("tk2dSpriteFromTexture - " + texture.name);
            go.transform.localPosition = Vector3.zero;
            go.transform.localRotation = Quaternion.identity;
            go.transform.localScale    = Vector3.one;
            go.hideFlags = HideFlags.DontSave;

            Vector2 anchorPos = tk2dSpriteGeomGen.GetAnchorOffset(anchor, texture.width, texture.height);
            spriteCollection = tk2dRuntime.SpriteCollectionGenerator.CreateFromTexture(
                go,
                texture,
                spriteCollectionSize,
                new Vector2(texture.width, texture.height),
                new string[] { "unnamed" },
                new Rect[] { new Rect(0, 0, texture.width, texture.height) },
                null,
                new Vector2[] { anchorPos },
                new bool[] { false });

            string objName = "SpriteFromTexture " + texture.name;
            spriteCollection.spriteCollectionName = objName;
            spriteCollection.spriteDefinitions[0].material.name      = objName;
            spriteCollection.spriteDefinitions[0].material.hideFlags = HideFlags.DontSave | HideFlags.HideInInspector;

            Sprite.SetSprite(spriteCollection, 0);
        }
    }
Esempio n. 20
0
    protected void DrawSpriteEditorGUI()
    {
        Event ev = Event.current;

        tk2dSpriteGuiUtility.SpriteSelector(targetRenderInitializers[0].Collection, targetRenderInitializers[0].SpriteID, spriteChangedCallbackInstance, targetRenderInitializers[0].AnchorPoint);


        if (targetRenderInitializers[0].Collection != null)
        {
            if (tk2dPreferences.inst.displayTextureThumbs)
            {
                SpriteRenderInitializer renderInitializer = targetRenderInitializers[0];
                tk2dSpriteDefinition    def = renderInitializer.CurrentSprite;
                if (renderInitializer.Collection.version < 1 || def.texelSize == Vector2.zero)
                {
                    string message = "";

                    message = "No thumbnail data.";
                    if (renderInitializer.Collection.version < 1)
                    {
                        message += "\nPlease rebuild Sprite Collection.";
                    }

                    tk2dGuiUtility.InfoBox(message, tk2dGuiUtility.WarningLevel.Info);
                }
                else
                {
                    GUILayout.BeginHorizontal();
                    EditorGUILayout.PrefixLabel(" ");

                    int  tileSize = 128;
                    Rect r        = GUILayoutUtility.GetRect(tileSize, tileSize, GUILayout.ExpandWidth(false));
                    tk2dGrid.Draw(r);
                    tk2dSpriteThumbnailCache.DrawSpriteTextureInRect(r, def, Color.white);

                    GUILayout.EndHorizontal();

                    r = GUILayoutUtility.GetLastRect();
                    if (ev.type == EventType.MouseDown && ev.button == 0 && r.Contains(ev.mousePosition))
                    {
                        tk2dSpriteGuiUtility.SpriteSelectorPopup(renderInitializer.Collection, renderInitializer.SpriteID, spriteChangedCallbackInstance, null);
                    }
                }
            }

            GUILayout.Space(8);

            GUILayout.BeginHorizontal();
            tk2dBaseSprite.Anchor anchor = (tk2dBaseSprite.Anchor)EditorTools.DrawEnumField(targetRenderInitializers[0].AnchorPoint, "AnchorPoint");
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            int pixelsPerMeter = (int)EditorTools.DrawFloatField(targetRenderInitializers[0].TargetPixelsPerMeter, "Pixels Per Meter");
            GUILayout.EndHorizontal();

            if ((anchor != targetRenderInitializers[0].AnchorPoint) || (pixelsPerMeter != targetRenderInitializers[0].TargetPixelsPerMeter))
            {
                targetRenderInitializers[0].AnchorPoint          = anchor;
                targetRenderInitializers[0].TargetPixelsPerMeter = pixelsPerMeter;
                targetRenderInitializers[0].ForceBuild();
            }
        }
        else
        {
            tk2dGuiUtility.InfoBox("Please select a sprite collection.", tk2dGuiUtility.WarningLevel.Error);
        }


        bool needUpdatePrefabs = false;

        if (GUI.changed)
        {
            foreach (SpriteRenderInitializer sprite in targetRenderInitializers)
            {
                if (PrefabUtility.GetPrefabType(sprite) == PrefabType.Prefab)
                {
                    needUpdatePrefabs = true;
                }
                EditorUtility.SetDirty(sprite);
            }
        }

        // This is a prefab, and changes need to be propagated. This isn't supported in Unity 3.4
        if (needUpdatePrefabs)
        {
            // Rebuild prefab instances
            tk2dBaseSprite[] allSprites = Resources.FindObjectsOfTypeAll(typeof(tk2dBaseSprite)) as tk2dBaseSprite[];
            foreach (var spr in allSprites)
            {
                if (PrefabUtility.GetPrefabType(spr) == PrefabType.PrefabInstance)
                {
                    Object parent = PrefabUtility.GetPrefabParent(spr.gameObject);
                    bool   found  = false;
                    foreach (SpriteRenderInitializer sprite in targetRenderInitializers)
                    {
                        if (sprite.gameObject == parent)
                        {
                            found = true;
                            break;
                        }
                    }

                    if (found)
                    {
                        // Reset all prefab states
                        var propMod = PrefabUtility.GetPropertyModifications(spr);
                        PrefabUtility.ResetToPrefabState(spr);
                        PrefabUtility.SetPropertyModifications(spr, propMod);

                        spr.ForceBuild();
                    }
                }
            }
        }
    }
Esempio n. 21
0
 static string GetAnchorPointName(tk2dBaseSprite.Anchor anchor)
 {
     return("Anchor (" + anchor.ToString() + ")");
 }
Esempio n. 22
0
 public static tk2dSpriteDefinition SetProjectileSpriteRight(this Projectile proj, string name, int pixelWidth, int pixelHeight, bool lightened = true, tk2dBaseSprite.Anchor anchor = tk2dBaseSprite.Anchor.LowerLeft, int?overrideColliderPixelWidth = null, int?overrideColliderPixelHeight = null, bool anchorChangesCollider = true,
                                                             bool fixesScale = false, int?overrideColliderOffsetX = null, int?overrideColliderOffsetY = null, Projectile overrideProjectileToCopyFrom = null)
 {
     try
     {
         proj.GetAnySprite().spriteId = ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName(name);
         tk2dSpriteDefinition def     = SetupDefinitionForProjectileSprite(name, proj.GetAnySprite().spriteId, pixelWidth, pixelHeight, lightened, overrideColliderPixelWidth, overrideColliderPixelHeight, overrideColliderOffsetX,
                                                                           overrideColliderOffsetY, overrideProjectileToCopyFrom);
         def.ConstructOffsetsFromAnchor(anchor, def.position3, fixesScale, anchorChangesCollider);
         proj.GetAnySprite().scale = new Vector3(1f, 1f, 1f);
         proj.transform.localScale = new Vector3(1f, 1f, 1f);
         proj.GetAnySprite().transform.localScale = new Vector3(1f, 1f, 1f);
         proj.AdditionalScaleMultiplier = 1f;
         return(def);
     }
     catch (Exception ex)
     {
         ETGModConsole.Log("Ooops! Seems like something got very, Very, VERY wrong. Here's the exception:");
         ETGModConsole.Log(ex.ToString());
         return(null);
     }
 }
Esempio n. 23
0
        public static void AnimateProjectile(this Projectile proj, List <string> names, int fps, bool loops, List <IntVector2> pixelSizes, List <bool> lighteneds, List <tk2dBaseSprite.Anchor> anchors, List <bool> anchorsChangeColliders,
                                             List <bool> fixesScales, List <Vector3?> manualOffsets, List <IntVector2?> overrideColliderPixelSizes, List <IntVector2?> overrideColliderOffsets, List <Projectile> overrideProjectilesToCopyFrom)
        {
            tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip();

            clip.name = "idle";
            clip.fps  = fps;
            List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>();

            for (int i = 0; i < names.Count; i++)
            {
                string     name      = names[i];
                IntVector2 pixelSize = pixelSizes[i];
                IntVector2?overrideColliderPixelSize = overrideColliderPixelSizes[i];
                IntVector2?overrideColliderOffset    = overrideColliderOffsets[i];
                Vector3?   manualOffset          = manualOffsets[i];
                bool       anchorChangesCollider = anchorsChangeColliders[i];
                bool       fixesScale            = fixesScales[i];
                if (!manualOffset.HasValue)
                {
                    manualOffset = new Vector2?(Vector2.zero);
                }
                tk2dBaseSprite.Anchor anchor            = anchors[i];
                bool       lightened                    = lighteneds[i];
                Projectile overrideProjectileToCopyFrom = overrideProjectilesToCopyFrom[i];
                tk2dSpriteAnimationFrame frame          = new tk2dSpriteAnimationFrame();
                frame.spriteId         = ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName(name);
                frame.spriteCollection = ETGMod.Databases.Items.ProjectileCollection;
                frames.Add(frame);
                int?overrideColliderPixelWidth  = null;
                int?overrideColliderPixelHeight = null;
                if (overrideColliderPixelSize.HasValue)
                {
                    overrideColliderPixelWidth  = overrideColliderPixelSize.Value.x;
                    overrideColliderPixelHeight = overrideColliderPixelSize.Value.y;
                }
                int?overrideColliderOffsetX = null;
                int?overrideColliderOffsetY = null;
                if (overrideColliderOffset.HasValue)
                {
                    overrideColliderOffsetX = overrideColliderOffset.Value.x;
                    overrideColliderOffsetY = overrideColliderOffset.Value.y;
                }
                tk2dSpriteDefinition def = GunTools.SetupDefinitionForProjectileSprite(name, frame.spriteId, pixelSize.x, pixelSize.y, lightened, overrideColliderPixelWidth, overrideColliderPixelHeight, overrideColliderOffsetX, overrideColliderOffsetY,
                                                                                       overrideProjectileToCopyFrom);
                def.ConstructOffsetsFromAnchor(anchor, def.position3, fixesScale, anchorChangesCollider);
                def.position0 += manualOffset.Value;
                def.position1 += manualOffset.Value;
                def.position2 += manualOffset.Value;
                def.position3 += manualOffset.Value;
                if (i == 0)
                {
                    proj.GetAnySprite().SetSprite(frame.spriteCollection, frame.spriteId);
                }
            }
            clip.wrapMode = loops ? tk2dSpriteAnimationClip.WrapMode.Loop : tk2dSpriteAnimationClip.WrapMode.Once;
            clip.frames   = frames.ToArray();
            if (proj.sprite.spriteAnimator == null)
            {
                proj.sprite.spriteAnimator = proj.sprite.gameObject.AddComponent <tk2dSpriteAnimator>();
            }
            proj.sprite.spriteAnimator.playAutomatically = true;
            bool flag = proj.sprite.spriteAnimator.Library == null;

            if (flag)
            {
                proj.sprite.spriteAnimator.Library         = proj.sprite.spriteAnimator.gameObject.AddComponent <tk2dSpriteAnimation>();
                proj.sprite.spriteAnimator.Library.clips   = new tk2dSpriteAnimationClip[0];
                proj.sprite.spriteAnimator.Library.enabled = true;
            }
            proj.sprite.spriteAnimator.Library.clips      = proj.sprite.spriteAnimator.Library.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray();
            proj.sprite.spriteAnimator.DefaultClipId      = proj.sprite.spriteAnimator.Library.GetClipIdByName("idle");
            proj.sprite.spriteAnimator.deferNextStartClip = false;
        }
        public static GameObject MakeAnimatedOrbital(string name, float orbitRadius, float orbitalDegreesPerSecond, int orbitalTier, PlayerOrbital.OrbitalMotionStyle motionStyle, float perfectOrbitalFactor, List <string> idleAnimPaths, int fps, Vector2 colliderDimensions, Vector2 colliderOffsets, tk2dBaseSprite.Anchor anchorMode, tk2dSpriteAnimationClip.WrapMode wrapMode)
        {
            GameObject prefab = SpriteBuilder.SpriteFromResource(idleAnimPaths[0]);

            prefab.name = name;
            var body = prefab.GetComponent <tk2dSprite>().SetUpSpeculativeRigidbody(colliderOffsets.ToIntVector2(), colliderDimensions.ToIntVector2());

            body.CollideWithTileMap = false;
            body.CollideWithOthers  = true;
            body.PrimaryPixelCollider.CollisionLayer = CollisionLayer.EnemyBulletBlocker;

            tk2dSpriteCollectionData spriteCollection = SpriteBuilder.ConstructCollection(prefab, $"{name}_Collection");

            prefab.AddAnimationToObject(spriteCollection, "start", idleAnimPaths, fps, colliderDimensions, colliderOffsets, anchorMode, wrapMode, true);

            PlayerOrbital orbitalPrefab = prefab.AddComponent <PlayerOrbital>();

            orbitalPrefab.motionStyle           = motionStyle;
            orbitalPrefab.shouldRotate          = false;
            orbitalPrefab.orbitRadius           = orbitRadius;
            orbitalPrefab.perfectOrbitalFactor  = perfectOrbitalFactor;
            orbitalPrefab.orbitDegreesPerSecond = orbitalDegreesPerSecond;
            orbitalPrefab.SetOrbitalTier(orbitalTier);

            prefab.MakeFakePrefab();
            return(prefab);
        }
 private void PermanentUpgradeLegacyMode()
 {
     tk2dSpriteDefinition currentSprite = base.CurrentSprite;
     float x = currentSprite.untrimmedBoundsData[0].x;
     float y = currentSprite.untrimmedBoundsData[0].y;
     float scale = currentSprite.untrimmedBoundsData[1].x;
     float num4 = currentSprite.untrimmedBoundsData[1].y;
     if (this.NearEnough(x, 0f, scale) && this.NearEnough(y, -num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.UpperCenter;
     }
     else if (this.NearEnough(x, 0f, scale) && this.NearEnough(y, 0f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.MiddleCenter;
     }
     else if (this.NearEnough(x, 0f, scale) && this.NearEnough(y, num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.LowerCenter;
     }
     else if (this.NearEnough(x, -scale / 2f, scale) && this.NearEnough(y, -num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.UpperRight;
     }
     else if (this.NearEnough(x, -scale / 2f, scale) && this.NearEnough(y, 0f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.MiddleRight;
     }
     else if (this.NearEnough(x, -scale / 2f, scale) && this.NearEnough(y, num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.LowerRight;
     }
     else if (this.NearEnough(x, scale / 2f, scale) && this.NearEnough(y, -num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.UpperLeft;
     }
     else if (this.NearEnough(x, scale / 2f, scale) && this.NearEnough(y, 0f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.MiddleLeft;
     }
     else if (this.NearEnough(x, scale / 2f, scale) && this.NearEnough(y, num4 / 2f, num4))
     {
         this._anchor = tk2dBaseSprite.Anchor.LowerLeft;
     }
     else
     {
         Debug.LogError("tk2dSlicedSprite (" + base.name + ") error - Unable to determine anchor upgrading from legacy mode. Please fix this manually.");
         this._anchor = tk2dBaseSprite.Anchor.MiddleCenter;
     }
     float num5 = scale / currentSprite.texelSize.x;
     float num6 = num4 / currentSprite.texelSize.y;
     this._dimensions.x = this._scale.x * num5;
     this._dimensions.y = this._scale.y * num6;
     this._scale.Set(1f, 1f, 1f);
     this.legacyMode = false;
 }
Esempio n. 26
0
 // Token: 0x06000097 RID: 151 RVA: 0x00007E60 File Offset: 0x00006060
 public static void SetProjectileSpriteRight(this Projectile proj, string name, int pixelWidth, int pixelHeight, bool lightened = true, tk2dBaseSprite.Anchor anchor = tk2dBaseSprite.Anchor.LowerLeft, int?overrideColliderPixelWidth = null, int?overrideColliderPixelHeight = null, int?overrideColliderOffsetX = null, int?overrideColliderOffsetY = null, Projectile overrideProjectileToCopyFrom = null)
 {
     try
     {
         ETGMod.GetAnySprite(proj).spriteId = ETGMod.Databases.Items.ProjectileCollection.inst.GetSpriteIdByName(name);
         tk2dSpriteDefinition tk2dSpriteDefinition = GunTools.SetupDefinitionForProjectileSprite(name, ETGMod.GetAnySprite(proj).spriteId, pixelWidth, pixelHeight, lightened, overrideColliderPixelWidth, overrideColliderPixelHeight, overrideColliderOffsetX, overrideColliderOffsetY, overrideProjectileToCopyFrom);
         tk2dSpriteDefinition.ConstructOffsetsFromAnchor(anchor, tk2dSpriteDefinition.position3);
     }
     catch (Exception ex)
     {
         ETGModConsole.Log("Ooops! Seems like something got very, Very, VERY wrong. Here's the exception:", false);
         ETGModConsole.Log(ex.ToString(), false);
     }
 }
Esempio n. 27
0
        public static void AddAnimationToObject(this GameObject target, tk2dSpriteCollectionData spriteCollection, string animationName, List <string> spritePaths, int fps, Vector2 colliderDimensions, Vector2 colliderOffsets, tk2dBaseSprite.Anchor anchor, tk2dSpriteAnimationClip.WrapMode wrapMode, bool isDefaultAnimation = false)
        {
            tk2dSpriteAnimator  animator  = target.GetOrAddComponent <tk2dSpriteAnimator>();
            tk2dSpriteAnimation animation = target.GetOrAddComponent <tk2dSpriteAnimation>();

            animation.clips  = new tk2dSpriteAnimationClip[0];
            animator.Library = animation;

            tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip()
            {
                name = animationName, frames = new tk2dSpriteAnimationFrame[0], fps = fps
            };

            List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>();

            foreach (string path in spritePaths)
            {
                tk2dSpriteCollectionData collection = spriteCollection;
                int frameSpriteId             = SpriteBuilder.AddSpriteToCollection(path, collection);
                tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId];

                frameDef.colliderVertices = new Vector3[] {
                    new Vector3(colliderOffsets.x / 16, colliderOffsets.y / 16, 0f),
                    new Vector3((colliderDimensions.x / 16), (colliderDimensions.y / 16), 0f)
                };

                frameDef.ConstructOffsetsFromAnchor(anchor);
                frames.Add(new tk2dSpriteAnimationFrame {
                    spriteId = frameSpriteId, spriteCollection = collection
                });
            }
            clip.frames     = frames.ToArray();
            clip.wrapMode   = wrapMode;
            animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray();

            if (isDefaultAnimation)
            {
                animator.DefaultClipId     = animation.GetClipIdByName(animationName);
                animator.playAutomatically = true;
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Used to create new VFX. Place sprites inside of Mods/YourModFolder/sprites/VFX Collection, inside the EtG directory. Each parameter that is a list must have an entry for each sprite of the animation
        /// </summary>
        /// <param name="name">The name of the VFX</param>
        /// <param name="spriteNames">The name of the sprites for the VFX, like VFX_001, VFX_002, etc.</param>
        /// <param name="fps">The frame rate the animation will play at</param>
        /// <param name="spriteSizes">The size of each sprite in the animation. Must have an IntVector2 entry for each sprite in the animation</param>
        /// <param name="anchors">I don't know what exactly this does</param>
        /// <param name="manualOffsets">I don't know what exactly this does</param>
        /// <param name="orphaned">I don't know what exactly this does</param>
        /// <param name="attached">I don't know what exactly this does</param>
        /// <param name="persistsOnDeath">Best left false</param>
        /// <param name="usesZHeight">Change if needed</param>
        /// <param name="zHeight">Change if needed, but usually left at 0</param>
        /// <param name="alignment">Leave at Fixed</param>
        /// <param name="destructible">Always set to true</param>
        /// <param name="emissivePowers">Doesn't seem to work, set all entries at 0. Might cause bugs if tinkered with</param>
        /// <param name="emissiveColors">Does't seem to work, set all entries to VFXLibrary.emptyColor. Might cause bugs if tinkered with</param>
        /// <returns></returns>
        public static VFXPool CreateMuzzleflash(string name, List <string> spriteNames, int fps, List <IntVector2> spriteSizes, List <tk2dBaseSprite.Anchor> anchors, List <Vector2> manualOffsets, bool orphaned, bool attached, bool persistsOnDeath,
                                                bool usesZHeight, float zHeight, VFXAlignment alignment, bool destructible, List <float> emissivePowers, List <Color> emissiveColors)
        {
            VFXPool pool = new VFXPool();

            pool.type = VFXPoolType.All;
            VFXComplex complex = new VFXComplex();
            VFXObject  vfObj   = new VFXObject();
            GameObject obj     = new GameObject(name);

            obj.SetActive(false);
            FakePrefab.MarkAsFakePrefab(obj);
            UnityEngine.Object.DontDestroyOnLoad(obj);
            tk2dSprite              sprite   = obj.AddComponent <tk2dSprite>();
            tk2dSpriteAnimator      animator = obj.AddComponent <tk2dSpriteAnimator>();
            tk2dSpriteAnimationClip clip     = new tk2dSpriteAnimationClip();

            clip.fps    = fps;
            clip.frames = new tk2dSpriteAnimationFrame[0];
            for (int i = 0; i < spriteNames.Count; i++)
            {
                string                spriteName   = spriteNames[i];
                IntVector2            spriteSize   = spriteSizes[i];
                tk2dBaseSprite.Anchor anchor       = anchors[i];
                Vector2               manualOffset = manualOffsets[i];
                float emissivePower            = emissivePowers[i];
                Color emissiveColor            = emissiveColors[i];
                tk2dSpriteAnimationFrame frame = new tk2dSpriteAnimationFrame();
                frame.spriteId = VFXCollection.GetSpriteIdByName(spriteName);
                tk2dSpriteDefinition def = SetupDefinitionForShellSprite(spriteName, frame.spriteId, spriteSize.x, spriteSize.y);
                def.ConstructOffsetsFromAnchor(anchor, def.position3);
                def.MakeOffset(manualOffset);
                def.material.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
                def.material.SetFloat("_EmissiveColorPower", emissivePower);
                def.material.SetColor("_EmissiveColor", emissiveColor);
                def.material.SetTexture("_MainTex", def.material.GetTexture("_MainTex"));
                def.materialInst.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
                def.materialInst.SetFloat("_EmissiveColorPower", emissivePower);
                def.materialInst.SetColor("_EmissiveColor", emissiveColor);
                def.materialInst.SetTexture("_MainTex", def.materialInst.GetTexture("_MainTex"));
                frame.spriteCollection = VFXCollection;
                clip.frames            = clip.frames.Concat(new tk2dSpriteAnimationFrame[] { frame }).ToArray();
            }
            sprite.renderer.material.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
            sprite.renderer.material.SetFloat("_EmissiveColorPower", emissivePowers[0]);
            sprite.renderer.material.SetColor("_EmissiveColor", emissiveColors[0]);
            sprite.renderer.material.SetTexture("_MainTex", sprite.renderer.material.GetTexture("_MainTex"));
            clip.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once;
            clip.name     = "start";
            animator.spriteAnimator.Library         = animator.gameObject.AddComponent <tk2dSpriteAnimation>();
            animator.spriteAnimator.Library.clips   = new tk2dSpriteAnimationClip[] { clip };
            animator.spriteAnimator.Library.enabled = true;
            SpriteAnimatorKiller kill = animator.gameObject.AddComponent <SpriteAnimatorKiller>();

            kill.fadeTime             = -1f;
            kill.animator             = animator;
            kill.delayDestructionTime = -1f;
            vfObj.orphaned            = orphaned;
            vfObj.attached            = attached;
            vfObj.persistsOnDeath     = persistsOnDeath;
            vfObj.usesZHeight         = usesZHeight;
            vfObj.zHeight             = zHeight;
            vfObj.alignment           = alignment;
            vfObj.destructible        = destructible;
            vfObj.effect               = obj;
            complex.effects            = new VFXObject[] { vfObj };
            pool.effects               = new VFXComplex[] { complex };
            animator.playAutomatically = true;
            animator.DefaultClipId     = animator.GetClipIdByName("start");
            return(pool);
        }
Esempio n. 29
0
    public static void SetSlicedSpriteGeom(Vector3[] pos, Vector2[] uv, int offset, out Vector3 boundsCenter, out Vector3 boundsExtents, tk2dSpriteDefinition spriteDef, Vector3 scale, Vector2 dimensions, Vector2 borderBottomLeft, Vector2 borderTopRight, tk2dBaseSprite.Anchor anchor, float colliderOffsetZ, float colliderExtentZ)
    {
        boundsCenter  = Vector3.zero;
        boundsExtents = Vector3.zero;
        if (spriteDef.positions.Length == 4)
        {
            float sx = spriteDef.texelSize.x;
            float sy = spriteDef.texelSize.y;

            Vector3[] srcVert = spriteDef.positions;
            float     dx      = (srcVert[1].x - srcVert[0].x);
            float     dy      = (srcVert[2].y - srcVert[0].y);

            float borderTopPixels    = borderTopRight.y * dy;
            float borderBottomPixels = borderBottomLeft.y * dy;
            float borderRightPixels  = borderTopRight.x * dx;
            float borderLeftPixels   = borderBottomLeft.x * dx;

            float dimXPixels = dimensions.x * sx;
            float dimYPixels = dimensions.y * sy;

            float anchorOffsetX = 0.0f;
            float anchorOffsetY = 0.0f;
            switch (anchor)
            {
            case tk2dBaseSprite.Anchor.LowerLeft:
            case tk2dBaseSprite.Anchor.MiddleLeft:
            case tk2dBaseSprite.Anchor.UpperLeft:
                break;

            case tk2dBaseSprite.Anchor.LowerCenter:
            case tk2dBaseSprite.Anchor.MiddleCenter:
            case tk2dBaseSprite.Anchor.UpperCenter:
                anchorOffsetX = -(int)(dimensions.x / 2.0f); break;

            case tk2dBaseSprite.Anchor.LowerRight:
            case tk2dBaseSprite.Anchor.MiddleRight:
            case tk2dBaseSprite.Anchor.UpperRight:
                anchorOffsetX = -(int)(dimensions.x); break;
            }
            switch (anchor)
            {
            case tk2dBaseSprite.Anchor.LowerLeft:
            case tk2dBaseSprite.Anchor.LowerCenter:
            case tk2dBaseSprite.Anchor.LowerRight:
                break;

            case tk2dBaseSprite.Anchor.MiddleLeft:
            case tk2dBaseSprite.Anchor.MiddleCenter:
            case tk2dBaseSprite.Anchor.MiddleRight:
                anchorOffsetY = -(int)(dimensions.y / 2.0f); break;

            case tk2dBaseSprite.Anchor.UpperLeft:
            case tk2dBaseSprite.Anchor.UpperCenter:
            case tk2dBaseSprite.Anchor.UpperRight:
                anchorOffsetY = -(int)dimensions.y; break;
            }

            // scale back to sprite coordinates
            // do it after the cast above, as we're trying to align to pixel
            anchorOffsetX *= sx;
            anchorOffsetY *= sy;

            boundsCenter.Set(scale.x * (dimXPixels * 0.5f + anchorOffsetX), scale.y * (dimYPixels * 0.5f + anchorOffsetY), colliderOffsetZ);
            boundsExtents.Set(scale.x * (dimXPixels * 0.5f), scale.y * (dimYPixels * 0.5f), colliderExtentZ);

            Vector2[] srcUv = spriteDef.uvs;
            Vector2   duvx  = srcUv[1] - srcUv[0];
            Vector2   duvy  = srcUv[2] - srcUv[0];

            Vector3 origin = new Vector3(anchorOffsetX, anchorOffsetY, 0);

            Vector3[] originPoints = new Vector3[4] {
                origin,
                origin + new Vector3(0, borderBottomPixels, 0),
                origin + new Vector3(0, dimYPixels - borderTopPixels, 0),
                origin + new Vector3(0, dimYPixels, 0),
            };
            Vector2[] originUvs = new Vector2[4] {
                srcUv[0],
                srcUv[0] + duvy * borderBottomLeft.y,
                srcUv[0] + duvy * (1 - borderTopRight.y),
                srcUv[0] + duvy,
            };

            for (int i = 0; i < 4; ++i)
            {
                pos[offset + i * 4 + 0] = originPoints[i];
                pos[offset + i * 4 + 1] = originPoints[i] + new Vector3(borderLeftPixels, 0, 0);
                pos[offset + i * 4 + 2] = originPoints[i] + new Vector3(dimXPixels - borderRightPixels, 0, 0);
                pos[offset + i * 4 + 3] = originPoints[i] + new Vector3(dimXPixels, 0, 0);

                for (int j = 0; j < 4; ++j)
                {
                    pos[offset + i * 4 + j] = Vector3.Scale(pos[offset + i * 4 + j], scale);
                }

                uv[offset + i * 4 + 0] = originUvs[i];
                uv[offset + i * 4 + 1] = originUvs[i] + duvx * borderBottomLeft.x;
                uv[offset + i * 4 + 2] = originUvs[i] + duvx * (1 - borderTopRight.x);
                uv[offset + i * 4 + 3] = originUvs[i] + duvx;
            }
        }
    }
Esempio n. 30
0
    public static void SetTiledSpriteGeom(Vector3[] pos, Vector2[] uv, int offset, out Vector3 boundsCenter, out Vector3 boundsExtents, tk2dSpriteDefinition spriteDef, Vector3 scale, Vector2 dimensions, tk2dBaseSprite.Anchor anchor, float colliderOffsetZ, float colliderExtentZ)
    {
        boundsCenter  = Vector3.zero;
        boundsExtents = Vector3.zero;

        int     numTilesX     = (int)Mathf.Ceil((dimensions.x * spriteDef.texelSize.x) / spriteDef.untrimmedBoundsData[1].x);
        int     numTilesY     = (int)Mathf.Ceil((dimensions.y * spriteDef.texelSize.y) / spriteDef.untrimmedBoundsData[1].y);
        Vector2 totalMeshSize = new Vector2(dimensions.x * spriteDef.texelSize.x * scale.x, dimensions.y * spriteDef.texelSize.y * scale.y);
        Vector2 texelEpsilon  = Vector2.Scale(spriteDef.texelSize, scale) * 0.1f;

        // Anchor tweaks
        Vector3 anchorOffset = Vector3.zero;

        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.UpperLeft:
            break;

        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.UpperCenter:
            anchorOffset.x = -(totalMeshSize.x / 2.0f); break;

        case tk2dBaseSprite.Anchor.LowerRight:
        case tk2dBaseSprite.Anchor.MiddleRight:
        case tk2dBaseSprite.Anchor.UpperRight:
            anchorOffset.x = -(totalMeshSize.x); break;
        }
        switch (anchor)
        {
        case tk2dBaseSprite.Anchor.LowerLeft:
        case tk2dBaseSprite.Anchor.LowerCenter:
        case tk2dBaseSprite.Anchor.LowerRight:
            break;

        case tk2dBaseSprite.Anchor.MiddleLeft:
        case tk2dBaseSprite.Anchor.MiddleCenter:
        case tk2dBaseSprite.Anchor.MiddleRight:
            anchorOffset.y = -(totalMeshSize.y / 2.0f); break;

        case tk2dBaseSprite.Anchor.UpperLeft:
        case tk2dBaseSprite.Anchor.UpperCenter:
        case tk2dBaseSprite.Anchor.UpperRight:
            anchorOffset.y = -totalMeshSize.y; break;
        }
        Vector3 colliderAnchor = anchorOffset;

        anchorOffset -= Vector3.Scale(spriteDef.positions[0], scale);

        boundsCenter.Set(totalMeshSize.x * 0.5f + colliderAnchor.x, totalMeshSize.y * 0.5f + colliderAnchor.y, colliderOffsetZ);
        boundsExtents.Set(totalMeshSize.x * 0.5f, totalMeshSize.y * 0.5f, colliderExtentZ);

        int     vert       = 0;
        Vector3 bounds     = Vector3.Scale(spriteDef.untrimmedBoundsData[1], scale);
        Vector3 baseOffset = Vector3.zero;
        Vector3 p          = baseOffset;

        for (int y = 0; y < numTilesY; ++y)
        {
            p.x = baseOffset.x;
            for (int x = 0; x < numTilesX; ++x)
            {
                float xClipFrac = 1;
                float yClipFrac = 1;
                if (Mathf.Abs(p.x + bounds.x) > Mathf.Abs(totalMeshSize.x) + texelEpsilon.x)
                {
                    xClipFrac = ((totalMeshSize.x % bounds.x) / bounds.x);
                }
                if (Mathf.Abs(p.y + bounds.y) > Mathf.Abs(totalMeshSize.y) + texelEpsilon.y)
                {
                    yClipFrac = ((totalMeshSize.y % bounds.y) / bounds.y);
                }

                Vector3 geomOffset = p + anchorOffset;

                if (xClipFrac != 1 || yClipFrac != 1)
                {
                    Vector2 fracBottomLeft = Vector2.zero;
                    Vector2 fracTopRight   = new Vector2(xClipFrac, yClipFrac);

                    Vector3 bottomLeft = new Vector3(Mathf.Lerp(spriteDef.positions[0].x, spriteDef.positions[3].x, fracBottomLeft.x) * scale.x,
                                                     Mathf.Lerp(spriteDef.positions[0].y, spriteDef.positions[3].y, fracBottomLeft.y) * scale.y,
                                                     spriteDef.positions[0].z * scale.z);
                    Vector3 topRight = new Vector3(Mathf.Lerp(spriteDef.positions[0].x, spriteDef.positions[3].x, fracTopRight.x) * scale.x,
                                                   Mathf.Lerp(spriteDef.positions[0].y, spriteDef.positions[3].y, fracTopRight.y) * scale.y,
                                                   spriteDef.positions[0].z * scale.z);

                    pos[offset + vert + 0] = geomOffset + new Vector3(bottomLeft.x, bottomLeft.y, bottomLeft.z);
                    pos[offset + vert + 1] = geomOffset + new Vector3(topRight.x, bottomLeft.y, bottomLeft.z);
                    pos[offset + vert + 2] = geomOffset + new Vector3(bottomLeft.x, topRight.y, bottomLeft.z);
                    pos[offset + vert + 3] = geomOffset + new Vector3(topRight.x, topRight.y, bottomLeft.z);

                    // find the fraction of UV
                    // This can be done without a branch, but will end up with loads of unnecessary interpolations
                    if (spriteDef.flipped == tk2dSpriteDefinition.FlipMode.Tk2d)
                    {
                        Vector2 v0 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracBottomLeft.y),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracBottomLeft.x));
                        Vector2 v1 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracTopRight.y),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracTopRight.x));

                        uv[offset + vert + 0] = new Vector2(v0.x, v0.y);
                        uv[offset + vert + 1] = new Vector2(v0.x, v1.y);
                        uv[offset + vert + 2] = new Vector2(v1.x, v0.y);
                        uv[offset + vert + 3] = new Vector2(v1.x, v1.y);
                    }
                    else if (spriteDef.flipped == tk2dSpriteDefinition.FlipMode.TPackerCW)
                    {
                        Vector2 v0 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracBottomLeft.y),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracBottomLeft.x));
                        Vector2 v1 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracTopRight.y),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracTopRight.x));

                        uv[offset + vert + 0] = new Vector2(v0.x, v0.y);
                        uv[offset + vert + 2] = new Vector2(v1.x, v0.y);
                        uv[offset + vert + 1] = new Vector2(v0.x, v1.y);
                        uv[offset + vert + 3] = new Vector2(v1.x, v1.y);
                    }
                    else
                    {
                        Vector2 v0 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracBottomLeft.x),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracBottomLeft.y));
                        Vector2 v1 = new Vector2(Mathf.Lerp(spriteDef.uvs[0].x, spriteDef.uvs[3].x, fracTopRight.x),
                                                 Mathf.Lerp(spriteDef.uvs[0].y, spriteDef.uvs[3].y, fracTopRight.y));

                        uv[offset + vert + 0] = new Vector2(v0.x, v0.y);
                        uv[offset + vert + 1] = new Vector2(v1.x, v0.y);
                        uv[offset + vert + 2] = new Vector2(v0.x, v1.y);
                        uv[offset + vert + 3] = new Vector2(v1.x, v1.y);
                    }
                }
                else
                {
                    pos[offset + vert + 0] = geomOffset + Vector3.Scale(spriteDef.positions[0], scale);
                    pos[offset + vert + 1] = geomOffset + Vector3.Scale(spriteDef.positions[1], scale);
                    pos[offset + vert + 2] = geomOffset + Vector3.Scale(spriteDef.positions[2], scale);
                    pos[offset + vert + 3] = geomOffset + Vector3.Scale(spriteDef.positions[3], scale);
                    uv[offset + vert + 0]  = spriteDef.uvs[0];
                    uv[offset + vert + 1]  = spriteDef.uvs[1];
                    uv[offset + vert + 2]  = spriteDef.uvs[2];
                    uv[offset + vert + 3]  = spriteDef.uvs[3];
                }

                vert += 4;
                p.x  += bounds.x;
            }
            p.y += bounds.y;
        }
    }
Esempio n. 31
0
        public static VFXPool CreateVFXPool(string name, List <string> spritePaths, int fps, IntVector2 Dimensions, tk2dBaseSprite.Anchor anchor, bool usesZHeight, float zHeightOffset, bool persist = false, VFXAlignment alignment = VFXAlignment.NormalAligned, float emissivePower = -1, Color?emissiveColour = null)
        {
            GameObject Obj  = new GameObject(name);
            VFXPool    pool = new VFXPool();

            pool.type = VFXPoolType.All;
            VFXComplex complex = new VFXComplex();
            VFXObject  vfObj   = new VFXObject();

            Obj.SetActive(false);
            FakePrefab.MarkAsFakePrefab(Obj);
            UnityEngine.Object.DontDestroyOnLoad(Obj);

            tk2dSpriteCollectionData VFXSpriteCollection = SpriteBuilder.ConstructCollection(Obj, (name + "_Collection"));
            int spriteID = SpriteBuilder.AddSpriteToCollection(spritePaths[0], VFXSpriteCollection);

            tk2dSprite sprite = Obj.GetOrAddComponent <tk2dSprite>();

            sprite.SetSprite(VFXSpriteCollection, spriteID);
            tk2dSpriteDefinition defaultDef = sprite.GetCurrentSpriteDef();

            defaultDef.colliderVertices = new Vector3[] {
                new Vector3(0f, 0f, 0f),
                new Vector3((Dimensions.x / 16), (Dimensions.y / 16), 0f)
            };

            tk2dSpriteAnimator  animator  = Obj.GetOrAddComponent <tk2dSpriteAnimator>();
            tk2dSpriteAnimation animation = Obj.GetOrAddComponent <tk2dSpriteAnimation>();

            animation.clips  = new tk2dSpriteAnimationClip[0];
            animator.Library = animation;
            tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip()
            {
                name = "start", frames = new tk2dSpriteAnimationFrame[0], fps = fps
            };
            List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>();

            for (int i = 0; i < spritePaths.Count; i++)
            {
                tk2dSpriteCollectionData collection = VFXSpriteCollection;
                int frameSpriteId             = SpriteBuilder.AddSpriteToCollection(spritePaths[i], collection);
                tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId];
                frameDef.ConstructOffsetsFromAnchor(anchor);
                frameDef.colliderVertices = defaultDef.colliderVertices;
                if (emissivePower > 0)
                {
                    frameDef.material.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
                }
                if (emissivePower > 0)
                {
                    frameDef.material.SetFloat("_EmissiveColorPower", emissivePower);
                }
                if (emissiveColour != null)
                {
                    frameDef.material.SetColor("_EmissiveColor", (Color)emissiveColour);
                }
                if (emissivePower > 0)
                {
                    frameDef.materialInst.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
                }
                if (emissivePower > 0)
                {
                    frameDef.materialInst.SetFloat("_EmissiveColorPower", emissivePower);
                }
                if (emissiveColour != null)
                {
                    frameDef.materialInst.SetColor("_EmissiveColor", (Color)emissiveColour);
                }
                frames.Add(new tk2dSpriteAnimationFrame {
                    spriteId = frameSpriteId, spriteCollection = collection
                });
            }
            if (emissivePower > 0)
            {
                sprite.renderer.material.shader = ShaderCache.Acquire("Brave/LitTk2dCustomFalloffTintableTiltedCutoutEmissive");
            }
            if (emissivePower > 0)
            {
                sprite.renderer.material.SetFloat("_EmissiveColorPower", emissivePower);
            }
            if (emissiveColour != null)
            {
                sprite.renderer.material.SetColor("_EmissiveColor", (Color)emissiveColour);
            }
            clip.frames     = frames.ToArray();
            clip.wrapMode   = tk2dSpriteAnimationClip.WrapMode.Once;
            animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray();
            if (!persist)
            {
                SpriteAnimatorKiller kill = animator.gameObject.AddComponent <SpriteAnimatorKiller>();
                kill.fadeTime             = -1f;
                kill.animator             = animator;
                kill.delayDestructionTime = -1f;
            }
            animator.playAutomatically = true;
            animator.DefaultClipId     = animator.GetClipIdByName("start");
            vfObj.attached             = true;
            vfObj.persistsOnDeath      = persist;
            vfObj.usesZHeight          = usesZHeight;
            vfObj.zHeight      = zHeightOffset;
            vfObj.alignment    = alignment;
            vfObj.destructible = false;
            vfObj.effect       = Obj;
            complex.effects    = new VFXObject[] { vfObj };
            pool.effects       = new VFXComplex[] { complex };
            return(pool);
        }