protected override Rect Setup() { formatter = (System.Globalization.NumberFormatInfo)System.Globalization.NumberFormatInfo.CurrentInfo.Clone(); formatter.CurrencySymbol = string.Empty; formatter.CurrencyDecimalDigits = 2; formatter.NumberDecimalDigits = 2; formatter.PercentDecimalDigits = 2; audio = AudioPlayer.Audio; if (audio == null) { Log.Debug("[ScienceAlert]:DraggableOptionsWindow: Failed to find AudioPlayer instance"); } filterList.Add(new GUIContent("Unresearched")); filterList.Add(new GUIContent("Not maxed")); filterList.Add(new GUIContent("< 50% collected")); filterList.Add(new GUIContent("< 90% collected")); openButton = ResourceUtil.GetEmbeddedTexture("Textures.btnOpen.png"); deleteButton = ResourceUtil.GetEmbeddedTexture("Textures.btnDelete.png"); renameButton = ResourceUtil.GetEmbeddedTexture("Textures.btnRename.png"); saveButton = ResourceUtil.GetEmbeddedTexture("Textures.btnSave.png"); expandButton = ResourceUtil.GetEmbeddedTexture("Textures.btnExpand.png"); collapseButton = Instantiate(expandButton); ResourceUtil.FlipTexture(collapseButton, true, true); collapseButton.Compress(false); expandButton.Compress(false); blackPixel.SetPixel(0, 0, Color.black); blackPixel.Apply(); blackPixel.filterMode = FilterMode.Bilinear; whiteLabel = Instantiate(Settings.Skin); whiteLabel.label.onNormal.textColor = Color.white; whiteLabel.toggle.onNormal.textColor = Color.white; whiteLabel.label.onActive.textColor = Color.white; submenu = OpenPane.None; Title = "ScienceAlert Options"; miniLabelLeft = new GUIStyle(Skin.label) { fontSize = 10 }; miniLabelLeft.normal.textColor = miniLabelLeft.onNormal.textColor = Color.white; miniLabelRight = new GUIStyle(miniLabelLeft) { alignment = TextAnchor.MiddleRight }; miniLabelCenter = new GUIStyle(miniLabelLeft) { alignment = TextAnchor.MiddleCenter }; Settings.Instance.OnSave += OnAboutToSave; OnVisibilityChange += OnVisibilityChanged; GameEvents.onVesselChange.Add(OnVesselChanged); LoadFrom(Settings.Instance.additional.GetNode("OptionsWindow") ?? new ConfigNode()); return(new Rect(windowRect.x, windowRect.y, 324f, Screen.height / 5 * 3)); }
private void SliceAtlasTexture() { Func <int, int, string> GetFrame = delegate(int frame, int desiredLen) { string str = frame.ToString(); while (str.Length < desiredLen) { str = "0" + str; } return(str); }; // load textures try { if (!GameDatabase.Instance.ExistsTexture(NormalFlaskTexture)) { // load normal flask texture Log.Debug("Loading normal flask texture"); Texture2D nflask = ResourceUtil.GetEmbeddedTexture("Textures.flask.png", true); if (nflask == null) { Log.Error("Failed to create normal flask texture!"); } else { GameDatabase.TextureInfo ti = new GameDatabase.TextureInfo(null, nflask, false, true, true); ti.name = NormalFlaskTexture; GameDatabase.Instance.databaseTexture.Add(ti); // Log.Debug("Created normal flask texture {0}", ti.name); } nflask = ResourceUtil.GetEmbeddedTexture("Textures.flask-38.png", true); if (nflask == null) { Log.Error("Failed to create normal flask-38 texture!"); } else { GameDatabase.TextureInfo ti = new GameDatabase.TextureInfo(null, nflask, false, true, true); ti.name = NormalFlaskTexture + "-38"; GameDatabase.Instance.databaseTexture.Add(ti); // Log.Debug("Created normal flask texture {0}", ti.name); } // // Load textures for animation here // Texture2D sheet = ResourceUtil.GetEmbeddedTexture("Textures.sheet.png"); if (sheet == null) { Log.Error("Failed to create sprite sheet texture!"); } else { var rt = RenderTexture.GetTemporary(sheet.width, sheet.height); var oldRt = RenderTexture.active; int invertHeight = ((FrameCount - 1) / (sheet.width / 24)) * 24; Graphics.Blit(sheet, rt); RenderTexture.active = rt; for (int i = 0; i < FrameCount; ++i) { StarFlaskTextures.Add(NormalFlaskTexture + GetFrame(i + 1, 4)); Texture2D sliced = new Texture2D(24, 24, TextureFormat.ARGB32, false); sliced.ReadPixels(new Rect((i % (sheet.width / 24)) * 24, /*invertHeight -*/ (i / (sheet.width / 24)) * 24, 24, 24), 0, 0); sliced.Apply(); GameDatabase.TextureInfo ti = new GameDatabase.TextureInfo(null, sliced, false, false, false); ti.name = StarFlaskTextures.Last(); GameDatabase.Instance.databaseTexture.Add(ti); // Log.Debug("Added sheet texture {0}", ti.name); } RenderTexture.active = oldRt; RenderTexture.ReleaseTemporary(rt); } sheet = ResourceUtil.GetEmbeddedTexture("Textures.sheet-38.png"); if (sheet == null) { Log.Error("Failed to create sprite sheet texture!"); } else { var rt = RenderTexture.GetTemporary(sheet.width, sheet.height); var oldRt = RenderTexture.active; int invertHeight = ((FrameCount - 1) / (sheet.width / 38)) * 38; Graphics.Blit(sheet, rt); RenderTexture.active = rt; for (int i = 0; i < FrameCount; ++i) { StarFlaskTextures38.Add(NormalFlaskTexture + "-38-" + GetFrame(i + 1, 4)); Texture2D sliced = new Texture2D(38, 38, TextureFormat.ARGB32, false); sliced.ReadPixels(new Rect((i % (sheet.width / 38)) * 38, /*invertHeight -*/ (i / (sheet.width / 38)) * 38, 38, 38), 0, 0); sliced.Apply(); GameDatabase.TextureInfo ti = new GameDatabase.TextureInfo(null, sliced, false, false, false); ti.name = StarFlaskTextures38.Last(); GameDatabase.Instance.databaseTexture.Add(ti); // Log.Debug("Added sheet texture {0}", ti.name); } RenderTexture.active = oldRt; RenderTexture.ReleaseTemporary(rt); } Log.Debug("Finished loading sprite sheet-38 textures."); } else { // textures already loaded for (int i = 0; i < FrameCount; ++i) { StarFlaskTextures.Add(NormalFlaskTexture + GetFrame(i + 1, 4)); StarFlaskTextures38.Add(NormalFlaskTexture + "-38-" + GetFrame(i + 1, 4)); } } } catch (Exception e) { Log.Error("Failed to load textures: {0}", e); } }
/// <summary> /// Waits for the Application Launcher before beginning initialization /// </summary> /// <returns></returns> System.Collections.IEnumerator WaitOnAppLauncher() { Log.Debug("Waiting on AppLauncher..."); while (!ApplicationLauncher.Ready) { yield return(null); } Log.Verbose("Retrieving animation sheet."); var sheet = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.sheet_app.png", false, false); if (sheet == null) { Log.Error("Failed to locate embedded app sheet texture!"); // well ... without it we're sunk. Something is better than // nothing. We can't let the stock behaviour fail Log.Warning("Creating dummy sprite texture"); sheet = new Texture2D(38, 38, TextureFormat.ARGB32, false); sheet.SetPixels32(Enumerable.Repeat((Color32)Color.clear, 38 * 38).ToArray()); sheet.Apply(); } Log.Verbose("Setting up sprite"); sprite = PackedSprite.Create("ScienceAlert.Button.Sprite", Vector3.zero); sprite.SetMaterial(new Material(Shader.Find("Sprite/Vertex Colored")) { mainTexture = sheet }); sprite.renderer.sharedMaterial.mainTexture.filterMode = FilterMode.Point; sprite.Setup(38f, 38f); sprite.SetFramerate(Settings.Instance.StarFlaskFrameRate); sprite.SetAnchor(SpriteRoot.ANCHOR_METHOD.UPPER_LEFT); sprite.gameObject.layer = LayerMask.NameToLayer("EzGUI_UI"); // normal state Log.Verbose("Setting up normal animation"); UVAnimation normal = new UVAnimation() { name = "Unlit", loopCycles = 0, framerate = Settings.Instance.StarFlaskFrameRate }; normal.BuildUVAnim(sprite.PixelCoordToUVCoord(9 * 38, 8 * 38), sprite.PixelSpaceToUVSpace(38, 38), 1, 1, 1); // animated state Log.Verbose("Setting up star flask animation"); UVAnimation anim = new UVAnimation() { name = "Spin", loopCycles = -1, framerate = Settings.Instance.StarFlaskFrameRate }; anim.BuildWrappedUVAnim(new Vector2(0, sprite.PixelCoordToUVCoord(0, 38).y), sprite.PixelSpaceToUVSpace(38, 38), 100); // add animations to button sprite.AddAnimation(normal); sprite.AddAnimation(anim); sprite.PlayAnim("Unlit"); Log.Verbose("Creating mod button..."); button = ApplicationLauncher.Instance.AddModApplication( OnToggle, OnToggle, () => { }, () => { }, () => { }, () => { }, ApplicationLauncher.AppScenes.FLIGHT | ApplicationLauncher.AppScenes.MAPVIEW, sprite); GameEvents.onGUIApplicationLauncherUnreadifying.Add(AppLauncherUnreadifying); Log.Debug("AppLauncherInterface: Button transform = {0}", button.transform.position.ToString()); Log.Verbose("AppLauncherInterface ready"); }
/****************************************************************************** * Implementation Details ******************************************************************************/ protected override Rect Setup() { // position blocker in front of ApplicationLauncher buttons. The window is going to be drawn on // top of them regardless; this will just prevent us from accidentally interacting with them backstop.SetZ(ApplicationLauncher.Instance.anchor.transform.position.z - 50f); // culture setting Log.Normal("Configuring NumberFormatInfo for current locale"); formatter = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone(); formatter.CurrencySymbol = string.Empty; formatter.CurrencyDecimalDigits = 2; formatter.NumberDecimalDigits = 2; formatter.PercentDecimalDigits = 2; audio = AudioPlayer.Audio; if (audio == null) { Log.Error("DraggableOptionsWindow: Failed to find AudioPlayer instance"); } var rawIds = ResearchAndDevelopment.GetExperimentIDs(); var sortedIds = rawIds.OrderBy(expid => ResearchAndDevelopment.GetExperiment(expid).experimentTitle); Log.Debug("OptionsWindow: sorted {0} experiment IDs", sortedIds.Count()); foreach (var id in sortedIds) { experimentIds.Add(id, (int)Convert.ChangeType(ProfileManager.ActiveProfile[id].Filter, ProfileManager.ActiveProfile[id].Filter.GetTypeCode())); Log.Debug("Settings: experimentId {0} has filter index {1}", id, experimentIds[id]); } /* * Unresearched = 0, * NotMaxed = 1, * LessThanFiftyPercent = 2, * LessThanNinetyPercent = 3 */ filterList.Add(new GUIContent("Unresearched")); filterList.Add(new GUIContent("Not maxed")); filterList.Add(new GUIContent("< 50% collected")); filterList.Add(new GUIContent("< 90% collected")); openButton = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnOpen.png", false); saveButton = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnSave.png", false); returnButton = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnReturn.png", false); deleteButton = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnDelete.png", false); renameButton = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnRename.png", false); var tex = ResourceUtil.GetEmbeddedTexture("ScienceAlert.Resources.btnExpand.png", false); if (tex == null) { Log.Error("Failed to retrieve expand button texture from stream"); } else { Log.Debug("Collapse button texture loaded successfully"); expandButton = tex; collapseButton = UnityEngine.Texture.Instantiate(expandButton) as Texture2D; ResourceUtil.FlipTexture(collapseButton, true, true); collapseButton.Compress(false); expandButton.Compress(false); } blackPixel.SetPixel(0, 0, Color.black); blackPixel.Apply(); blackPixel.filterMode = FilterMode.Bilinear; whiteLabel = (GUISkin)GUISkin.Instantiate(Settings.Skin); whiteLabel.label.onNormal.textColor = Color.white; whiteLabel.toggle.onNormal.textColor = Color.white; whiteLabel.label.onActive.textColor = Color.white; submenu = OpenPane.None; Title = "ScienceAlert Options"; // smaller label for less important text hints miniLabelLeft = new GUIStyle(Skin.label); miniLabelLeft.fontSize = 10; miniLabelLeft.normal.textColor = miniLabelLeft.onNormal.textColor = Color.white; miniLabelRight = new GUIStyle(miniLabelLeft); miniLabelRight.alignment = TextAnchor.MiddleRight; miniLabelCenter = new GUIStyle(miniLabelLeft); miniLabelCenter.alignment = TextAnchor.MiddleCenter; Settings.Instance.OnSave += OnAboutToSave; base.OnVisibilityChange += OnVisibilityChanged; GameEvents.onVesselChange.Add(OnVesselChanged); LoadFrom(Settings.Instance.additional.GetNode("OptionsWindow") ?? new ConfigNode()); return(new Rect(windowRect.x, windowRect.y, 324, Screen.height / 5 * 3)); }