You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
149 lines
4.4 KiB
149 lines
4.4 KiB
// This code is part of the Fungus library (http://fungusgames.com) maintained by Chris Gregan (http://twitter.com/gofungus). |
|
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE) |
|
|
|
using UnityEngine; |
|
using UnityEditor; |
|
using System; |
|
|
|
namespace Fungus.EditorUtils |
|
{ |
|
internal static class FungusEditorResources |
|
{ |
|
|
|
static FungusEditorResources() { |
|
GenerateSpecialTextures(); |
|
LoadResourceAssets(); |
|
} |
|
|
|
private enum ResourceName |
|
{ |
|
command_background = 0, |
|
choice_node_off, |
|
choice_node_on, |
|
process_node_off, |
|
process_node_on, |
|
event_node_off, |
|
event_node_on, |
|
play_big, |
|
play_small |
|
} |
|
|
|
private static string[] s_LightSkin = { |
|
"command_background", |
|
"choice_node_off", |
|
"choice_node_on", |
|
"process_node_off", |
|
"process_node_on", |
|
"event_node_off", |
|
"event_node_on", |
|
"play_big", |
|
"play_small" |
|
}; |
|
|
|
private static string[] s_DarkSkin = { |
|
"command_background", |
|
"choice_node_off", |
|
"choice_node_on", |
|
"process_node_off", |
|
"process_node_on", |
|
"event_node_off", |
|
"event_node_on", |
|
"play_big", |
|
"play_small" |
|
}; |
|
|
|
public static Texture2D texCommandBackground |
|
{ |
|
get { return s_Cached[(int)ResourceName.command_background]; } |
|
} |
|
|
|
public static Texture2D texEventNodeOn |
|
{ |
|
get { return s_Cached[(int)ResourceName.event_node_on]; } |
|
} |
|
|
|
public static Texture2D texEventNodeOff |
|
{ |
|
get { return s_Cached[(int)ResourceName.event_node_off]; } |
|
} |
|
|
|
public static Texture2D texProcessNodeOn |
|
{ |
|
get { return s_Cached[(int)ResourceName.process_node_on]; } |
|
} |
|
|
|
public static Texture2D texProcessNodeOff |
|
{ |
|
get { return s_Cached[(int)ResourceName.process_node_off]; } |
|
} |
|
|
|
public static Texture2D texChoiceNodeOn |
|
{ |
|
get { return s_Cached[(int)ResourceName.choice_node_on]; } |
|
} |
|
|
|
public static Texture2D texChoiceNodeOff |
|
{ |
|
get { return s_Cached[(int)ResourceName.choice_node_off]; } |
|
} |
|
|
|
public static Texture2D texPlayBig |
|
{ |
|
get { return s_Cached[(int)ResourceName.play_big]; } |
|
} |
|
|
|
public static Texture2D texPlaySmall |
|
{ |
|
get { return s_Cached[(int)ResourceName.play_small]; } |
|
} |
|
|
|
public static Texture2D texItemSplitter { get; private set; } |
|
|
|
private static void GenerateSpecialTextures() |
|
{ |
|
var splitterColor = EditorGUIUtility.isProSkin |
|
? new Color(1f, 1f, 1f, 0.14f) |
|
: new Color(0.59f, 0.59f, 0.59f, 0.55f) |
|
; |
|
texItemSplitter = CreatePixelTexture("(Generated) Item Splitter", splitterColor); |
|
} |
|
|
|
public static Texture2D CreatePixelTexture(string name, Color color) |
|
{ |
|
var tex = new Texture2D(1, 1, TextureFormat.ARGB32, false, true); |
|
tex.name = name; |
|
tex.hideFlags = HideFlags.HideAndDontSave; |
|
tex.filterMode = FilterMode.Point; |
|
tex.SetPixel(0, 0, color); |
|
tex.Apply(); |
|
return tex; |
|
} |
|
|
|
private static Texture2D[] s_Cached; |
|
|
|
public static void LoadResourceAssets() |
|
{ |
|
var skin = EditorGUIUtility.isProSkin ? s_DarkSkin : s_LightSkin; |
|
s_Cached = new Texture2D[skin.Length]; |
|
|
|
for (int i = 0; i < s_Cached.Length; ++i) |
|
{ |
|
s_Cached[i] = Resources.Load("Textures/" + skin[i]) as Texture2D; |
|
} |
|
|
|
s_LightSkin = null; |
|
s_DarkSkin = null; |
|
} |
|
|
|
private static void GetImageSize(byte[] imageData, out int width, out int height) |
|
{ |
|
width = ReadInt(imageData, 3 + 15); |
|
height = ReadInt(imageData, 3 + 15 + 2 + 2); |
|
} |
|
|
|
private static int ReadInt(byte[] imageData, int offset) |
|
{ |
|
return (imageData[offset] << 8) | imageData[offset + 1]; |
|
} |
|
} |
|
} |