Packaged EngineerChip part using Part Tools. This was so the collider can be converted from a dynamically generated MeshCollider (that has convex properties) to a BoxCollider which as a bonus is also more performant. (resolves issue #80) Thanks Sarbian :)
[VesselSimulator.git] / KerbalEngineer.Unity / UI / StyleApplicator.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// 
//     Kerbal Engineer Redux
// 
//     Copyright (C) 2016 CYBUTEK
// 
//     This program is free software: you can redistribute it and/or modify
//     it under the terms of the GNU General Public License as published by
//     the Free Software Foundation, either version 3 of the License, or
//     (at your option) any later version.
// 
//     This program is distributed in the hope that it will be useful,
//     but WITHOUT ANY WARRANTY; without even the implied warranty of
//     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//     GNU General Public License for more details.
//     You should have received a copy of the GNU General Public License
//     along with this program.  If not, see <http://www.gnu.org/licenses/>.
//  
 
namespace KerbalEngineer.Unity.UI
{
    using UnityEngine;
    using UnityEngine.UI;
 
    public class StyleApplicator : MonoBehaviour
    {
        public enum ElementTypes
        {
            None,
            Window,
            Box,
            Button,
            ButtonToggle,
            Label
        }
 
        [SerializeField]
        private ElementTypes m_ElementType = ElementTypes.None;
 
        /// <summary>
        ///     Gets the UI element type used by the ThemeManager for selecting how to apply the theme.
        /// </summary>
        public ElementTypes ElementType
        {
            get
            {
                return m_ElementType;
            }
        }
 
        /// <summary>
        ///     Sets a the applicator to apply the selected sprite to an attached image component.
        /// </summary>
        public void SetImage(Sprite sprite, Image.Type type)
        {
            Image image = GetComponent<Image>();
            if (image == null)
            {
                return;
            }
 
            image.sprite = sprite;
            image.type = type;
        }
 
        /// <summary>
        ///     Sets the applicator to apply the specified values to an attached selectable component.
        /// </summary>
        public void SetSelectable(TextStyle textStyle, Sprite normal, Sprite highlight, Sprite pressed, Sprite disabled)
        {
            SetText(textStyle, GetComponentInChildren<Text>());
 
            Selectable selectable = GetComponent<Selectable>();
            if (selectable != null)
            {
                selectable.image.sprite = normal;
                selectable.image.type = Image.Type.Sliced;
 
                selectable.transition = Selectable.Transition.SpriteSwap;
 
                SpriteState spriteState = selectable.spriteState;
                spriteState.highlightedSprite = highlight;
                spriteState.pressedSprite = pressed;
                spriteState.disabledSprite = disabled;
                selectable.spriteState = spriteState;
            }
        }
 
        /// <summary>
        ///     Sets the applicator to apply a style to an attached text component.
        /// </summary>
        public void SetText(TextStyle textStyle)
        {
            SetText(textStyle, GetComponent<Text>());
        }
 
        /// <summary>
        ///     Sets the applicator to apply the specified values to an attached toggle component.
        /// </summary>
        public void SetToggle(TextStyle textStyle, Sprite normal, Sprite highlight, Sprite pressed, Sprite disabled)
        {
            SetSelectable(textStyle, normal, highlight, pressed, disabled);
 
            Image toggleImage = GetComponent<Toggle>()?.graphic as Image;
            if (toggleImage != null)
            {
                toggleImage.sprite = pressed;
                toggleImage.type = Image.Type.Sliced;
            }
        }
 
        /// <summary>
        ///     Sets the applicator to apply a style to the supplied text component.
        /// </summary>
        private static void SetText(TextStyle textStyle, Text textComponent)
        {
            if (textStyle == null || textComponent == null)
            {
                return;
            }
 
            if (textStyle.Font != null)
            {
                textComponent.font = textStyle.Font;
            }
            textComponent.fontSize = textStyle.Size;
            textComponent.fontStyle = textStyle.Style;
            textComponent.color = textStyle.Colour;
        }
    }
}