From da9064d740551e5a4130138c09247251fecdc2c4 Mon Sep 17 00:00:00 2001 From: RhenaudTheLukark Date: Sun, 19 Jun 2022 16:02:22 +0200 Subject: [PATCH] CYF 0.6.6 LTS 2 --- Assets/Default/Sprites/UI/Fonts/monster.xml | 7 +- .../Sprites/UI/Fonts/uibattlesmall.png | Bin 5117 -> 20440 bytes .../Sprites/UI/Fonts/uibattlesmall.xml | 125 +++++------------- .../Sprites/UI/Fonts/uidamagetransp.xml | 54 ++++---- .../Interpreter/CoreLib/LoadModule.cs | 3 +- Assets/Scripts/Battle/EnemyEncounter.cs | 2 +- Assets/Scripts/Battle/UIController.cs | 1 + Assets/Scripts/Device/GlobalControls.cs | 2 +- Assets/Scripts/Device/Misc.cs | 14 +- Assets/Scripts/Lua/CLRBindings/LuaFile.cs | 2 +- .../Lua/CLRBindings/LuaSpriteController.cs | 9 +- .../Scripts/Lua/CLRBindings/LuaTextManager.cs | 30 +++++ Assets/Scripts/Lua/FileLoader.cs | 3 +- .../StaticRegistries/SpriteFontRegistry.cs | 34 +++-- Assets/Scripts/Overworld/EventManager.cs | 34 +++-- .../Util/AutoloadResourcesFromRegistry.cs | 20 ++- Assets/Scripts/Util/SpriteUtil.cs | 2 +- Build.py | 2 +- .../pages/api-animation.html | 1 - .../pages/api-functions-misc.html | 21 +-- Documentation CYF 1.0/pages/cyf-text.html | 25 ++++ 21 files changed, 199 insertions(+), 192 deletions(-) diff --git a/Assets/Default/Sprites/UI/Fonts/monster.xml b/Assets/Default/Sprites/UI/Fonts/monster.xml index a1f3271d6..9333222c7 100644 --- a/Assets/Default/Sprites/UI/Fonts/monster.xml +++ b/Assets/Default/Sprites/UI/Fonts/monster.xml @@ -143,9 +143,6 @@ - - - @@ -267,10 +264,10 @@ - + - + diff --git a/Assets/Default/Sprites/UI/Fonts/uibattlesmall.png b/Assets/Default/Sprites/UI/Fonts/uibattlesmall.png index 3c6d046101f9a3e3740fbeaf3fdd2969c9e0e332..fe6073429b49b779a0e62f03cd215f95f27003c5 100644 GIT binary patch literal 20440 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 E9bP!~V*mgE diff --git a/Assets/Default/Sprites/UI/Fonts/uibattlesmall.xml b/Assets/Default/Sprites/UI/Fonts/uibattlesmall.xml index 58986c0b2..bf2c21b90 100644 --- a/Assets/Default/Sprites/UI/Fonts/uibattlesmall.xml +++ b/Assets/Default/Sprites/UI/Fonts/uibattlesmall.xml @@ -129,140 +129,77 @@ - + - + - - - - - - - - - - - - - + - - - - - - - - - - - - - + - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - - - - + - + - - - - + - - - - - - \ No newline at end of file diff --git a/Assets/Default/Sprites/UI/Fonts/uidamagetransp.xml b/Assets/Default/Sprites/UI/Fonts/uidamagetransp.xml index e0c59f1ed..200eeeeff 100644 --- a/Assets/Default/Sprites/UI/Fonts/uidamagetransp.xml +++ b/Assets/Default/Sprites/UI/Fonts/uidamagetransp.xml @@ -149,18 +149,12 @@ - - - - - - @@ -183,7 +177,7 @@ - + @@ -221,56 +215,62 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + + + + + + + - - + + diff --git a/Assets/Plugins/MoonSharp/Interpreter/CoreLib/LoadModule.cs b/Assets/Plugins/MoonSharp/Interpreter/CoreLib/LoadModule.cs index 37e56da80..a756e6b54 100644 --- a/Assets/Plugins/MoonSharp/Interpreter/CoreLib/LoadModule.cs +++ b/Assets/Plugins/MoonSharp/Interpreter/CoreLib/LoadModule.cs @@ -290,8 +290,9 @@ public static bool RequireFile(ref string fileName, string pathSuffix, bool erro try { string modPath = pathSuffix; ExplorePath(ref fileNameMod, ref modPath); - if (needsToExist && !new FileInfo(fileNameMod).Exists) throw new CYFException("The file " + fileNameMod + " doesn't exist."); + // Keep the path to the mod folder in case of failure (used to open nonexistent files!) fileName = fileNameMod; + if (needsToExist && !new FileInfo(fileNameMod).Exists) throw new CYFException("The file " + fileNameMod + " doesn't exist."); if (needsAbsolutePath) return true; diff --git a/Assets/Scripts/Battle/EnemyEncounter.cs b/Assets/Scripts/Battle/EnemyEncounter.cs index 64b54e079..8af023c06 100644 --- a/Assets/Scripts/Battle/EnemyEncounter.cs +++ b/Assets/Scripts/Battle/EnemyEncounter.cs @@ -278,7 +278,7 @@ [HideInInspector] public DynValue CreateProjectileAbs(Script s, string sprite, f SpriteUtil.SwapSpriteFromFile(projectile, sprite); // TODO: Restore in 0.7 //projectile.name = sprite; - projectile.GetComponent().ctrl._spritename = sprite; + projectile.GetComponent().ctrl.spritename = sprite; projectile.owner = s; projectile.gameObject.SetActive(true); projectile.ctrl.MoveToAbs(xpos, ypos); diff --git a/Assets/Scripts/Battle/UIController.cs b/Assets/Scripts/Battle/UIController.cs index b392c784c..b4bf8a5ec 100644 --- a/Assets/Scripts/Battle/UIController.cs +++ b/Assets/Scripts/Battle/UIController.cs @@ -581,6 +581,7 @@ public void SwitchState(string newState, bool first = false) { public static void SwitchStateOnString(Script scr, string state) { if (state == null) throw new CYFException("State: Argument cannot be nil."); + state = state.ToUpper(); if (instance.encounter.gameOverStance) return; if (!instance.UIStates.Contains(state)) throw new CYFException("The state \"" + state + "\" is not a valid state. Are you sure it exists?\n\nPlease double-check in the Misc. Functions section of the docs for a list of every default valid state."); diff --git a/Assets/Scripts/Device/GlobalControls.cs b/Assets/Scripts/Device/GlobalControls.cs index 60b726dcd..0b32936d3 100644 --- a/Assets/Scripts/Device/GlobalControls.cs +++ b/Assets/Scripts/Device/GlobalControls.cs @@ -11,7 +11,7 @@ public class GlobalControls : MonoBehaviour { public static string CYFversion = "0.6.6"; // Current version of CYF displayed in the main menu and usable in scripts public static string OverworldVersion = "0.6.6"; // Last version in which the overworld was changed, notifying any user with an old save to delete it - public static int LTSversion = 1; // LTS version, mainly used for CYF 0.6.6 + public static int LTSversion = 2; // LTS version, mainly used for CYF 0.6.6 public static int frame; // Frame counter used for logging purposes public static float overworldTimestamp = 0f; // Timestamp of the creation of the save file, mostly used to know the time spent in this save in the save and load screen diff --git a/Assets/Scripts/Device/Misc.cs b/Assets/Scripts/Device/Misc.cs index 7600c9839..df6cfab74 100644 --- a/Assets/Scripts/Device/Misc.cs +++ b/Assets/Scripts/Device/Misc.cs @@ -157,19 +157,19 @@ public LuaSpriteShader ScreenShader { public static LuaFile OpenFile(string path, string mode = "rw") { return new LuaFile(path, mode); } public bool FileExists(string path) { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 FileLoader.SanitizePath(ref path, "", false, true, false); return File.Exists(path); } public bool DirExists(string path) { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 FileLoader.SanitizePath(ref path, "", false, true, false); return Directory.Exists(path); } public bool CreateDir(string path) { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 FileLoader.SanitizePath(ref path, "", false, true, false); if (Directory.Exists(path)) return false; Directory.CreateDirectory(path); @@ -179,8 +179,8 @@ public bool CreateDir(string path) { private static bool PathValid(string path) { return path != " " && path != "" && path != "/" && path != "\\" && path != "." && path != "./" && path != ".\\"; } public bool MoveDir(string path, string newPath) { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 - newPath = newPath.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!newPath.StartsWith(FileLoader.DataRoot)) newPath = newPath.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 if (!DirExists(path) || DirExists(newPath) || !PathValid(path)) return false; FileLoader.SanitizePath(ref path, "", false, true, false); @@ -190,7 +190,7 @@ public bool MoveDir(string path, string newPath) { } public bool RemoveDir(string path, bool force = false) { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 FileLoader.SanitizePath(ref path, "", false, true, false); if (!Directory.Exists(path)) return false; @@ -204,7 +204,7 @@ public string[] ListDir(string path, bool getFolders = false) { if (path == null) throw new CYFException("Cannot list a directory with a nil path."); string origPath = path; - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 FileLoader.SanitizePath(ref path, "", false, true, false); if (!Directory.Exists(path)) throw new CYFException("Invalid path:\n\n\"" + origPath + "\""); diff --git a/Assets/Scripts/Lua/CLRBindings/LuaFile.cs b/Assets/Scripts/Lua/CLRBindings/LuaFile.cs index e4edc2af4..aa7dac514 100644 --- a/Assets/Scripts/Lua/CLRBindings/LuaFile.cs +++ b/Assets/Scripts/Lua/CLRBindings/LuaFile.cs @@ -9,7 +9,7 @@ public class LuaFile { public string filePath { get; private set; } public LuaFile(string path, string mode = "rw") { - path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 + if (!path.StartsWith(FileLoader.DataRoot)) path = path.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 if (path == null) throw new CYFException("Cannot open a file with a nil path."); if (mode != "r" && mode != "w" && mode != "rw" && mode != "wr") throw new CYFException("A file's open mode can only be \"r\" (read), \"w\" (write) or \"rw\" (read + write)."); if (!FileLoader.SanitizePath(ref path, "", false, true) && mode == "r") throw new CYFException("You can't open a file that doesn't exist (" + path + ") in read-only mode."); diff --git a/Assets/Scripts/Lua/CLRBindings/LuaSpriteController.cs b/Assets/Scripts/Lua/CLRBindings/LuaSpriteController.cs index e366dbbee..02735a3f2 100644 --- a/Assets/Scripts/Lua/CLRBindings/LuaSpriteController.cs +++ b/Assets/Scripts/Lua/CLRBindings/LuaSpriteController.cs @@ -51,6 +51,7 @@ public string spritename { // TODO: Restore in 0.7 //get { return img.GetComponent() ? img.GetComponent().sprite.name : img.GetComponent().sprite.name; } get { return _spritename; } + [MoonSharpHidden] set { _spritename = value; } } // The x position of the sprite, relative to the arena position and its anchor. @@ -409,7 +410,7 @@ public void Set(string name) { } // TODO: Restore in 0.7 //imgtemp.name = name; - _spritename = name; + spritename = name; Scale(xScale, yScale); if (tag == "projectile") img.GetComponent().needUpdateTex = true; @@ -745,17 +746,17 @@ internal void UpdateAnimation() { if (k != null) { // TODO: Restore in 0.7 //img.name = k.name; - _spritename = k.name; + spritename = k.name; } else { StopAnimation(); return; } if (k.sprite == null) return; - Set(_spritename); + Set(spritename); // TODO: Remove in 0.7 if (k == KeyframeCollection.EMPTY_KEYFRAME) - _spritename = "blank"; + spritename = "blank"; } public void SetVar(string name, DynValue value) { diff --git a/Assets/Scripts/Lua/CLRBindings/LuaTextManager.cs b/Assets/Scripts/Lua/CLRBindings/LuaTextManager.cs index 686fa39b1..026410547 100644 --- a/Assets/Scripts/Lua/CLRBindings/LuaTextManager.cs +++ b/Assets/Scripts/Lua/CLRBindings/LuaTextManager.cs @@ -2,6 +2,7 @@ using UnityEngine.UI; using System; using System.Collections; +using System.Collections.Generic; using MoonSharp.Interpreter; public class LuaTextManager : TextManager { @@ -22,6 +23,7 @@ public class LuaTextManager : TextManager { private float xScale = 1; private float yScale = 1; [MoonSharpHidden] public bool autoSetLayer = true; + private readonly Dictionary vars = new Dictionary(); public bool isactive { get { return !removed && !hidden; } @@ -225,6 +227,16 @@ public string layer { } } + public void SendToTop() { + CheckExists(); + transform.SetAsLastSibling(); + } + + public void SendToBottom() { + CheckExists(); + transform.SetAsFirstSibling(); + } + public void MoveBelow(LuaTextManager otherText) { CheckExists(); if (otherText == null || !otherText.isactive) throw new CYFException("The text object passed as an argument is nil or inactive."); @@ -642,4 +654,22 @@ public int GetTextHeight() { CheckExists(); return (int)UnitaleUtil.CalcTextHeight(this); } + + public void SetVar(string key, DynValue value) { + if (key == null) + throw new CYFException("text.SetVar: The first argument (the index) is nil.\n\nSee the documentation for proper usage."); + vars[key] = value; + } + + public DynValue GetVar(string key) { + if (key == null) + throw new CYFException("text.GetVar: The first argument (the index) is nil.\n\nSee the documentation for proper usage."); + DynValue retval; + return vars.TryGetValue(key, out retval) ? retval : DynValue.NewNil(); + } + + public DynValue this[string key] { + get { return GetVar(key); } + set { SetVar(key, value); } + } } \ No newline at end of file diff --git a/Assets/Scripts/Lua/FileLoader.cs b/Assets/Scripts/Lua/FileLoader.cs index d96b7a002..e194c4c72 100644 --- a/Assets/Scripts/Lua/FileLoader.cs +++ b/Assets/Scripts/Lua/FileLoader.cs @@ -169,8 +169,7 @@ public static bool SanitizePath(ref string fileName, string pathSuffix, bool err if (!LoadModule.RequireFile(ref fileName, pathSuffix, !leadingSlash && errorOnFailure, needsAbsolutePath, needsToExist)) if (leadingSlash) { // Passthrough: Remove the leading slash if the file wasn't found - // TODO: Remove this on 0.7 - fileName = fileName.TrimStart(Path.DirectorySeparatorChar); + if (!fileName.StartsWith(DataRoot)) fileName = fileName.Replace('\\', '/').TrimStart('/'); // TODO: Remove this for 0.7 if (!LoadModule.RequireFile(ref fileName, pathSuffix, errorOnFailure, needsAbsolutePath, needsToExist)) return false; } else diff --git a/Assets/Scripts/Lua/StaticRegistries/SpriteFontRegistry.cs b/Assets/Scripts/Lua/StaticRegistries/SpriteFontRegistry.cs index a64ddd35d..498f13bd4 100644 --- a/Assets/Scripts/Lua/StaticRegistries/SpriteFontRegistry.cs +++ b/Assets/Scripts/Lua/StaticRegistries/SpriteFontRegistry.cs @@ -115,27 +115,35 @@ private static UnderFont GetUnderFont(string fontName) { return underfont; } + private static void AddLetter(Dictionary letters, char letter, Sprite s, string fontPath) { + if (letters.ContainsKey(letter)) { + UnitaleUtil.DisplayLuaError("", "Error while loading the font " + fontPath + "\n\nThe letter \" " + letter + " \" has been added several times to the font!", true); + return; + } + letters.Add(letter, s); + } + private static Dictionary LoadBuiltInFont(XmlNode sheetNode, string fontPath) { Sprite[] letterSprites = SpriteUtil.AtlasFromXml(sheetNode, SpriteUtil.FromFile(fontPath, "Sprites/UI/Fonts/")); Dictionary letters = new Dictionary(); foreach (Sprite s in letterSprites) { string name = s.name; if (name.Length == 1) - letters.Add(name[0], s); + AddLetter(letters, name[0], s, fontPath); else switch (name) { - case "slash": letters.Add('/', s); break; - case "dot": letters.Add('.', s); break; - case "pipe": letters.Add('|', s); break; - case "backslash": letters.Add('\\', s); break; - case "colon": letters.Add(':', s); break; - case "questionmark": letters.Add('?', s); break; - case "doublequote": letters.Add('"', s); break; - case "asterisk": letters.Add('*', s); break; - case "space": letters.Add(' ', s); break; - case "lt": letters.Add('<', s); break; - case "rt": letters.Add('>', s); break; - case "ampersand": letters.Add('&', s); break; + case "slash": AddLetter(letters, '/', s, fontPath); break; + case "dot": AddLetter(letters, '.', s, fontPath); break; + case "pipe": AddLetter(letters, '|', s, fontPath); break; + case "backslash": AddLetter(letters, '\\', s, fontPath); break; + case "colon": AddLetter(letters, ':', s, fontPath); break; + case "questionmark": AddLetter(letters, '?', s, fontPath); break; + case "doublequote": AddLetter(letters, '"', s, fontPath); break; + case "asterisk": AddLetter(letters, '*', s, fontPath); break; + case "space": AddLetter(letters, ' ', s, fontPath); break; + case "lt": AddLetter(letters, '<', s, fontPath); break; + case "rt": AddLetter(letters, '>', s, fontPath); break; + case "ampersand": AddLetter(letters, '&', s, fontPath); break; } } return letters; diff --git a/Assets/Scripts/Overworld/EventManager.cs b/Assets/Scripts/Overworld/EventManager.cs index 64f04e97b..ec1067ae3 100644 --- a/Assets/Scripts/Overworld/EventManager.cs +++ b/Assets/Scripts/Overworld/EventManager.cs @@ -375,15 +375,15 @@ public int GetTrigger(GameObject go, int index) { /// /// Resets the events by counting them all again, stopping the current events and destroying all the current images. /// - /// SEt to true if you want all scripts to be reloaded as well. + /// Set to true if you want all scripts to be reloaded as well. public void ResetEvents(bool resetScripts = true) { coroutines.Clear(); initializedEvents.Clear(); events.Clear(); autoDone.Clear(); - spriteControllers.Clear(); // Reset all loaded scripts in order to reload them later if (resetScripts) { + spriteControllers.Clear(); eventScripts.Clear(); ScriptWrapper.instances.Clear(); } @@ -784,9 +784,11 @@ public void SetEventStates(bool addPlayer = false) { CurrPage = ev.actualPage, CurrSpriteNameOrCYFAnim = ev.GetComponent() ? ev.GetComponent().specialHeader - : instance.spriteControllers[ev.name].img.GetComponent() - ? instance.spriteControllers[ev.name].img.GetComponent().sprite.name - : instance.spriteControllers[ev.name].img.GetComponent().sprite.name, + : spriteControllers[ev.name].spritename != "empty" + ? spriteControllers[ev.name].spritename + : instance.spriteControllers[ev.name].img.GetComponent() + ? instance.spriteControllers[ev.name].img.GetComponent().sprite.name + : instance.spriteControllers[ev.name].img.GetComponent().sprite.name, NoCollision = ev.gameObject.layer == 0, Anchor = UnitaleUtil.VectorToVect(ev.GetComponent().anchorMax), Pivot = UnitaleUtil.VectorToVect(ev.GetComponent().pivot) @@ -1019,13 +1021,21 @@ public static void GetMapState(MapInfos mi, string id) { ev.actualPage = ei.CurrPage; ev.gameObject.layer = ei.NoCollision ? 0 : 21; - // Sets data to the event's animator if it exists - if (ev.GetComponent()) ev.GetComponent().specialHeader = ei.CurrSpriteNameOrCYFAnim; - // Sets the event's sprite using auto-load if it exists - else if (ev.GetComponent()) ev.GetComponent().SpritePath = ei.CurrSpriteNameOrCYFAnim; - // Sets the event's sprite directly otherwise - else if (ev.GetComponent()) ev.GetComponent().sprite = SpriteRegistry.Get(ei.CurrSpriteNameOrCYFAnim); - else ev.GetComponent().sprite = SpriteRegistry.Get(ei.CurrSpriteNameOrCYFAnim); + try { + // Sets data to the event's animator if it exists + if (ev.GetComponent()) + ev.GetComponent().specialHeader = ei.CurrSpriteNameOrCYFAnim; + // Sets the event's sprite using auto-load if it exists + else if (ev.GetComponent()) + ev.GetComponent().SpritePath = ei.CurrSpriteNameOrCYFAnim; + // Sets the event's sprite directly otherwise + else if (ev.GetComponent()) + ev.GetComponent().sprite = SpriteRegistry.Get(ei.CurrSpriteNameOrCYFAnim); + else ev.GetComponent().sprite = SpriteRegistry.Get(ei.CurrSpriteNameOrCYFAnim); + } catch { + Debug.LogWarning("Map loading: Couldn't load sprite " + ei.CurrSpriteNameOrCYFAnim + " for object " + ev.name); + // ignored + } } go.GetComponent().anchorMax = UnitaleUtil.VectToVector(ei.Anchor); go.GetComponent().anchorMin = UnitaleUtil.VectToVector(ei.Anchor); diff --git a/Assets/Scripts/Util/AutoloadResourcesFromRegistry.cs b/Assets/Scripts/Util/AutoloadResourcesFromRegistry.cs index 3d46a2a72..e3052033f 100644 --- a/Assets/Scripts/Util/AutoloadResourcesFromRegistry.cs +++ b/Assets/Scripts/Util/AutoloadResourcesFromRegistry.cs @@ -1,5 +1,4 @@ -using System.Linq; -using UnityEngine; +using UnityEngine; using UnityEngine.UI; /// @@ -31,8 +30,15 @@ private void OnDisable() { private void LateStart() { if (!StaticInits.Initialized) return; loadRequested = true; - if (!string.IsNullOrEmpty(SpritePath) && !(!GlobalControls.isInFight && StaticInits.MODFOLDER != FindObjectOfType().modToLoad)) { - Sprite spr = SpriteRegistry.Get(SpritePath); + if (string.IsNullOrEmpty(SpritePath)) + Destroy(this); + else if (GlobalControls.isInFight || StaticInits.MODFOLDER == FindObjectOfType().modToLoad) { + Sprite spr = null; + try { spr = SpriteRegistry.Get(SpritePath); } + catch (MoonSharp.Interpreter.ScriptRuntimeException ex) { + UnitaleUtil.DisplayLuaError("Autoloading a resource - " + SpritePath, ex.DecoratedMessage != null ? UnitaleUtil.FormatErrorSource(ex.DecoratedMessage, ex.Message) + ex.Message : ex.Message); + } + if (spr == null) { // Needs to wait for mod loading if (tries < 10) tries++; @@ -48,10 +54,10 @@ private void LateStart() { } else if (img3 != null) img3.material.mainTexture = spr.texture; else - throw new CYFException("The GameObject " + gameObject.name + " doesn't have an Image, Sprite Renderer or Particle System component."); - } + throw new CYFException("The GameObject " + name + " doesn't have an Image, Sprite Renderer or Particle System component."); - Destroy(this); + Destroy(this); + } } public void Update() { diff --git a/Assets/Scripts/Util/SpriteUtil.cs b/Assets/Scripts/Util/SpriteUtil.cs index 3b6effbf7..926287e5c 100644 --- a/Assets/Scripts/Util/SpriteUtil.cs +++ b/Assets/Scripts/Util/SpriteUtil.cs @@ -121,7 +121,7 @@ public static DynValue MakeIngameSprite(string filename, string tag = "BelowAren sprCtrl = LuaSpriteController.GetOrCreate(i.gameObject); // TODO: Restore in 0.7 //if (!UnitaleUtil.IsOverworld) i.name = filename; - if (!UnitaleUtil.IsOverworld) sprCtrl._spritename = filename; + sprCtrl.spritename = filename; } else throw new CYFException("You can't create a sprite object with a nil sprite!"); if (!GameObject.Find(tag + "Layer") && tag != "none") diff --git a/Build.py b/Build.py index f8b406100..ea99c2b5e 100644 --- a/Build.py +++ b/Build.py @@ -22,7 +22,7 @@ ### Script Vars ### # This is the version of CYF to name the executables and the Documentation folder -CYFversion = "0.6.6" +CYFversion = "0.6.6 LTS 2" # This is the path we will build to buildPath = os.getcwd() + "\\bin" diff --git a/Documentation CYF 1.0/pages/api-animation.html b/Documentation CYF 1.0/pages/api-animation.html index dcf8df687..013b12486 100644 --- a/Documentation CYF 1.0/pages/api-animation.html +++ b/Documentation CYF 1.0/pages/api-animation.html @@ -63,7 +63,6 @@
  • Projectile management
  • The Pixel-Perfect Collision System
  • > Sprites & Animation <
  • -
  • The Text Object

  • Shaders
  • Introduction
  • diff --git a/Documentation CYF 1.0/pages/api-functions-misc.html b/Documentation CYF 1.0/pages/api-functions-misc.html index ec6593460..eb52168c8 100644 --- a/Documentation CYF 1.0/pages/api-functions-misc.html +++ b/Documentation CYF 1.0/pages/api-functions-misc.html @@ -199,8 +199,7 @@

    File Functions



    Misc.FileExists( path) - Use this function to check if a file in your Mod folder ONLY exists.
    - Using ../ to go up a folder is NOT allowed. + Use this function to check if a file exists.

    • path: Path to the file to open, relative to your Mod folder.
      @@ -209,8 +208,7 @@

      File Functions

      Use this before Misc.OpenFile if you plan to read from a file.


      Misc.ListDir( path, getFolders = false) - This function returns a list of either files or folders in your Mod folder ONLY.
      - Using ../ to go up a folder is NOT allowed. + This function returns a list of either files or folders.

      • path: Path to the file to open, relative to your Mod folder.
        @@ -220,29 +218,25 @@

        File Functions




      Misc.DirExists( path) - Use this function to check if a folder in your Mod folder ONLY exists.
      - Using ../ to go up a folder is NOT allowed. + Use this function to check if a folder exists.

      • path: Path to the file to open, relative to your Mod folder.
        Can enter subfolders such as Lua.


      Misc.CreateDir( path) - Attempts to create a folder with the path path relative to your Mod folder.
      - Using ../ to go up a folder is NOT allowed. + Attempts to create a folder with the path path relative to your Mod folder.

      Returns true if the operation was successful, false otherwise.


      Misc.MoveDir( path, newPath) Attempts to move a folder with the path path relative to your Mod folder to a new location newPath - also relative to your mod folder.
      - Using ../ to go up a folder is NOT allowed. + also relative to your mod folder.

      Returns true if the operation was successful, false otherwise.


      Misc.RemoveDir( path, force = false) - Attempts to delete a folder with the path path relative to your Mod folder.
      - Using ../ to go up a folder is NOT allowed. + Attempts to delete a folder with the path path relative to your Mod folder.

      • force: If true, this function will forcefully remove a folder. Otherwise, a folder will only be removed if it is empty.
      • @@ -250,8 +244,7 @@

        File Functions

        Returns true if the operation was successful, false otherwise.


        Misc.OpenFile( path, mode = "rw") returns File - This function opens a file in your Mod folder ONLY, for reading and writing.
        - Using ../ to go up a folder is NOT allowed. + This function opens a file in CYF's Mods folder ONLY for writing and anywhere for reading.

        • path: Path to the file to open, relative to your Mod folder.
          diff --git a/Documentation CYF 1.0/pages/cyf-text.html b/Documentation CYF 1.0/pages/cyf-text.html index 29a273b30..2bde3b3d8 100644 --- a/Documentation CYF 1.0/pages/cyf-text.html +++ b/Documentation CYF 1.0/pages/cyf-text.html @@ -346,6 +346,17 @@

          Letter sprite objects can not have their layer changed, can not run Text.MoveAbove(text otherTextObject) Moves a text object above another text object.
          They must both be on the same layer.

          +

          +
          Text.SendToTop() + Sends this text object to the top of its layer's hierarchy. If a sprite has 5 + children, for instance, you can use this to rearrange this text object's position internally. + However, child text objects will always appear on top of their parents, regardless of this + function being called. +

          +

          +
          Text.SendToBottom() + Sends this text objct to the bottom of its layer's hierarchy. Similar rules apply as with SendToTop(). +


          Text.AddText( text (OR) text) Adds the given text to the object's text table. Acts like Text.SetText() if all the text is already done. @@ -445,6 +456,20 @@

          Letter sprite objects can not have their layer changed, can not run
          Note: This function is not 100% accurate.

          + +

          + Text.SetVar( yourVariableName, value) +
          or Text[ yourVariableName] + Sets a variable in a text object that you can retrieve with Text.GetVar.
          + Identical to SetVar in projectiles. +

          + +

          + Text.GetVar( yourVariableName) +
          or Text[ yourVariableName] = value + Gets a variable in a text object that you previously set with Text.SetVar.
          + Identical to GetVar in projectiles. +