Example #1
0
 // Use this for initialization
 public void LateStart()
 {
     if (EventManager.instance.sprCtrls.ContainsKey(gameObject.name))
     {
         sprctrl = EventManager.instance.sprCtrls[gameObject.name];
     }
     else if (gameObject.name == "Player")
     {
         sprctrl = PlayerOverworld.instance.sprctrl;
     }
     else
     {
         EventManager.instance.ResetEvents(false);
         if (!EventManager.instance.sprCtrls.ContainsKey(gameObject.name))
         {
             throw new CYFException("A CYFAnimator component must be tied to an event, however the GameObject " + gameObject.name + " doesn't seem to have one.");
         }
     }
     lastPos = gameObject.transform.position;
     if (waitingForLateStart)
     {
         ReplaceAnim(beginAnim);
         waitingForLateStart = false;
     }
 }
Example #2
0
 // Sets the parent of a sprite.
 public void SetParent(LuaSpriteController parent)
 {
     if (parent == null)
     {
         throw new CYFException("sprite.SetParent() can't set null as the sprite's parent.");
     }
     if (tag == "bubble")
     {
         throw new CYFException("sprite.SetParent() can not be used with bubbles.");
     }
     if (tag == "event" || parent != null && parent.tag == "event")
     {
         throw new CYFException("sprite.SetParent() can not be used with an Overworld Event's sprite.");
     }
     if (tag == "letter" ^ (parent != null && parent.tag == "letter"))
     {
         throw new CYFException("sprite.SetParent() can not be used between letter sprites and other sprites.");
     }
     try {
         GetTarget().SetParent(parent.img.transform);
         if (img.GetComponent <MaskImage>())
         {
             img.GetComponent <MaskImage>().inverted = parent._masked == MaskMode.INVERTEDSPRITE || parent._masked == MaskMode.INVERTEDSTENCIL;
         }
     } catch { throw new CYFException("sprite.SetParent(): You tried to set a removed sprite/nil sprite as this sprite's parent."); }
 }
    }                                       // retrieve after finishing to get real damage number

    private void Awake()
    {
        foreach (Transform child in gameObject.transform)
        {
            if (child.name == "FightUILine")
            {
                line = new LuaSpriteController(child.GetComponent <Image>());
            }
            else if (child.name == "SliceAnim")
            {
                slice = new LuaSpriteController(child.GetComponent <Image>());
            }
            else if (child.name == "DamageNumber")
            {
                damageText = child.GetComponent <TextManager>();
            }

            else if (child.name == "HPBar")
            {
                lifeBar = child.GetComponent <LifeBarController>();
            }
        }

        damageTextRt = damageText.GetComponent <RectTransform>();
    }
Example #4
0
 // Use this for initialization
 public void LateStart()
 {
     if (EventManager.instance.sprCtrls.ContainsKey(gameObject.name))
     {
         sprctrl = EventManager.instance.sprCtrls[gameObject.name];
     }
     else if (gameObject.name == "Player")
     {
         sprctrl = PlayerOverworld.instance.sprctrl;
     }
     else
     {
         EventManager.instance.ResetEvents(false);
         if (!EventManager.instance.sprCtrls.ContainsKey(gameObject.name))
         {
             throw new CYFException("A CYFAnimator component must be tied to an event, however the GameObject " + gameObject.name + " doesn't seem to be one.");
         }
     }
     lastPos      = gameObject.transform.position;
     waitForStart = false;
     if (firstCall)
     {
         Anim anim = GetAnimPerName(beginAnim);
         try { sprctrl.SetAnimation(anim.anims.Replace(" ", "").Replace("{", "").Replace("}", "").Split(','), anim.transitionTime); } catch { }
         firstCall = false;
     }
 }
    public void Activate(LuaSpriteController sprctrl)
    {
        Sprite sprite = sprctrl.img.GetComponent <Image>() ? sprctrl.img.GetComponent <Image>().sprite : sprctrl.img.GetComponent <SpriteRenderer>().sprite;

        int xLength = Mathf.Abs(Mathf.FloorToInt(sprctrl.xscale * sprite.texture.width)),
            yLength = Mathf.Abs(Mathf.FloorToInt(sprctrl.yscale * sprite.texture.height));

        GetComponentsInChildren <ParticleSystem>(true);
        ps = FindObjectOfType <ParticleSystem>();
        ps.transform.SetAsLastSibling();

        //Emit particles from particle system and retrieve into particles array
        particles = new ParticleSystem.Particle[xLength * yLength];
        ps.Emit(particles.Length);
        ps.GetParticles(particles);

        //Get sprite viewport coordinates and pixel width/height on display
        RectTransform rt = GetComponent <RectTransform>();
        //Vector2 bottomLeft = new Vector2((rt.position.x - rt.rect.width / 2) / (float)Screen.width, (rt.position.y) / (float)Screen.height);
        //Vector2 topRight = new Vector2((rt.position.x + rt.rect.width / 2) / (float)Screen.width, (rt.position.y + rt.rect.height) / (float)Screen.height);
        Vector2 bottomLeft = new Vector2(rt.position.x - rt.pivot.x * rt.sizeDelta.x, rt.position.y - rt.pivot.y * rt.sizeDelta.y);
        //Vector2 topRight = new Vector2(rt.position.x + (1 - rt.anchorMin.x) * rt.sizeDelta.x, rt.position.y + (1 - rt.anchorMin.x) * rt.sizeDelta.y);
        //Vector2 vpbl = Camera.main.ViewportToWorldPoint(bottomLeft);
        //Vector2 vptr = Camera.main.ViewportToWorldPoint(topRight);
        //float pxWidth = (topRight.x - vpbl.x) / rt.sizeDelta.x;
        //float pxHeight = (topRight.y - vpbl.y) / rt.sizeDelta.y;
        //Modify particle placement to reform the original sprite, and put back into particle system
        int  particleCount = 0;
        bool xIncrement = sprctrl.xscale > 0, yIncrement = sprctrl.yscale > 0;

        for (int y = 0; y < yLength; y++)
        {
            float REALY = yIncrement ? y / sprctrl.yscale : (y / sprctrl.yscale + sprite.texture.height - 1);
            int   realY = yIncrement ? Mathf.FloorToInt(REALY) : Mathf.CeilToInt(REALY);
            float yFrac = (yLength - y) / (float)yLength;
            for (int x = 0; x < xLength; x++)
            {
                float REALX = xIncrement ? x / sprctrl.xscale : (x / sprctrl.xscale + sprite.texture.width - 1);
                int   realX = yIncrement ? Mathf.FloorToInt(REALX) : Mathf.CeilToInt(REALX);
                Color c     = sprite.texture.GetPixel(realX, realY);
                if (c.a == 0.0f || (c.r + c.b + c.g) == 0.0f)
                {
                    continue;
                }
                //particles[particleCount].position = new Vector3(vpbl.x + x * pxWidth, vpbl.y + y * pxHeight, -5.0f);
                particles[particleCount].position = new Vector3(bottomLeft.x + Mathf.RoundToInt(REALX * sprctrl.xscale) + (xIncrement ? 0 : xLength),
                                                                bottomLeft.y + Mathf.RoundToInt(REALY * sprctrl.yscale) + (yIncrement ? 0 : yLength), -5.0f);
                particles[particleCount].startColor        = c;
                particles[particleCount].startSize         = 1; // we have to assume a square aspect ratio for pixels here
                particles[particleCount].remainingLifetime = yFrac * 1.5f + Random.value * 0.3f;
                particles[particleCount].startLifetime     = particles[particleCount].remainingLifetime;
                particleCount++;
            }
        }
        ps.SetParticles(particles, particleCount);
        GetComponent <Image>().enabled = false;
        //GameObject.Destroy(gameObject);
    }
 // Sets the parent of a sprite. Can't be used on an enemy
 public void SetParent(LuaSpriteController parent)
 {
     if (tag == "bubble")
     {
         return;
     }
     try {
         GetTarget().SetParent(parent.img.transform);
     } catch { throw new CYFException("You tried to set a removed sprite/unexisting sprite as this sprite's parent."); }
 }
Example #7
0
 // Sets the parent of a sprite. Can't be used on an enemy
 public void SetParent(LuaSpriteController parent)
 {
     if (tag == "bubble")
     {
         UnitaleUtil.WriteInLogAndDebugger("sprite.SetParent(): bubbles' parent can't be changed.");
         return;
     }
     try {
         GetTarget().SetParent(parent.img.transform);
     } catch { throw new CYFException("You tried to set a removed sprite/unexisting sprite as this sprite's parent."); }
 }
    private void Start()
    {
        try {
            string scriptText = ScriptRegistry.Get(ScriptRegistry.MONSTER_PREFIX + scriptName);
            if (scriptText == null)
            {
                UnitaleUtil.DisplayLuaError(StaticInits.ENCOUNTER, "Tried to load monster script " + scriptName + ".lua but it didn't exist. Is it misspelled?");
                return;
            }
            script.scriptname = scriptName;
            script.Bind("SetSprite", (Action <string>)SetSprite);
            script.Bind("SetActive", (Action <bool>)SetActive);
            script.Bind("isActive", (Func <bool>)InFight);
            script.Bind("Kill", (Action)DoKill);
            script.Bind("Spare", (Action)DoSpare);
            script.Bind("Move", (Action <float, float, bool>)Move);
            script.Bind("MoveTo", (Action <float, float, bool>)MoveTo);
            script.Bind("BindToArena", (Action <bool, bool>)BindToArena);
            script.Bind("SetDamage", (Action <int>)SetDamage);
            script.Bind("SetBubbleOffset", (Action <int, int>)SetBubbleOffset);
            script.Bind("SetDamageUIOffset", (Action <int, int>)SetDamageUIOffset);
            script.Bind("SetSliceAnimOffset", (Action <int, int>)SetSliceAnimOffset);
            script.Bind("GetLetters", (Func <Letter[]>)GetLetters);
            script.Bind("State", (Action <Script, string>)UIController.SwitchStateOnString);
            script.SetVar("canmove", DynValue.NewBoolean(false));
            sprite = new LuaSpriteController(GetComponent <Image>());
            script.SetVar("monstersprite", UserData.Create(sprite, LuaSpriteController.data));
            script.DoString(scriptText);

            string spriteFile = script.GetVar("sprite").String;
            if (spriteFile != null)
            {
                SetSprite(spriteFile);
            }
            else
            {
                throw new CYFException("missing sprite");
            }

            ui = FindObjectOfType <UIController>();
            if (MaxHP == 0)
            {
                MaxHP = HP;
            }

            textBubbleSprite = Resources.Load <Sprite>("Sprites/UI/SpeechBubbles/right");

            /*if (script.GetVar("canspare") == null) CanSpare = false;
             * if (script.GetVar("cancheck") == null) CanCheck = true;*/
        }
        catch (InterpreterException ex) { UnitaleUtil.DisplayLuaError(scriptName, ex.DecoratedMessage); }
        catch (Exception ex)            { UnitaleUtil.DisplayLuaError(scriptName, "Unknown error. Usually means you're missing a sprite.\nSee documentation for details.\nStacktrace below in case you wanna notify a dev.\n\nError: " + ex.Message + "\n\n" + ex.StackTrace); }
    }
Example #9
0
 private void Awake()
 {
     foreach (Transform child in gameObject.transform)
     {
         if (child.name == "FightUILine")
         {
             line = new LuaSpriteController(child.GetComponent <Image>());
             Start();
             return;
         }
     }
 }
 public void MoveBelow(LuaSpriteController sprite)
 {
     if (sprite == null)
     {
         throw new CYFException("sprite.MoveBelow: The sprite passed as an argument is nil.");
     }
     else if (sprite.GetTarget().parent != GetTarget().parent)
     {
         UnitaleUtil.WriteInLogAndDebugger("[WARN]You can't change the order of two sprites without the same parent.");
     }
     else
     {
         GetTarget().SetSiblingIndex(sprite.GetTarget().GetSiblingIndex());
     }
 }
Example #11
0
 public void MoveAbove(LuaSpriteController sprite)
 {
     if (sprite == null)
     {
         throw new CYFException("sprite.MoveAbove: The sprite passed as an argument is nil.");
     }
     if (sprite.GetTarget().parent != GetTarget().parent)
     {
         UnitaleUtil.Warn("You can't change the order of two sprites without the same parent.");
     }
     else
     {
         GetTarget().SetSiblingIndex(sprite.GetTarget().GetSiblingIndex() + 1);
     }
 }
Example #12
0
 public void MoveAbove(LuaSpriteController sprite)
 {
     if (sprite == null)
     {
         throw new CYFException("The sprite passed as an argument is null.");
     }
     else if (sprite.GetTarget().parent != GetTarget().parent)
     {
         UnitaleUtil.WriteInLogAndDebugger("[WARN]You can't move relatively two sprites without the same parent.");
     }
     else
     {
         GetTarget().SetSiblingIndex(sprite.GetTarget().GetSiblingIndex() + 1);
     }
 }
Example #13
0
 public void SetParent(LuaSpriteController parent)
 {
     CheckExists();
     if (parent != null && parent.img.transform != null && parent.img.transform.parent.name == "SpritePivot")
     {
         throw new CYFException("text.SetParent(): Can not use SetParent with an Overworld Event's sprite.");
     }
     try {
         container.transform.SetParent(parent.img.transform);
         foreach (MaskImage ivi in container.GetComponentsInChildren <MaskImage>())
         {
             ivi.inverted = parent._masked > 3;
         }
     }
     catch { throw new CYFException("You tried to set a removed sprite/nil sprite as this text object's parent."); }
 }
Example #14
0
    public DynValue GetLetters()
    {
        Table table = new Table(null);
        int key     = 0;

        foreach (Image i in letterReferences)
        {
            if (i != null)
            {
                key++;
                LuaSpriteController letter = new LuaSpriteController(i)
                {
                    tag = "letter"
                };
                table.Set(key, UserData.Create(letter, LuaSpriteController.data));
            }
        }
        return(DynValue.NewTable(table));
    }
 // Sets the parent of a sprite.
 public void SetParent(LuaSpriteController parent)
 {
     if (tag == "bubble")
     {
         UnitaleUtil.WriteInLogAndDebugger("sprite.SetParent(): bubbles' parent can't be changed.");
         return;
     }
     else if (tag == "event" || (parent != null && parent.tag == "event"))
     {
         throw new CYFException("sprite.SetParent(): Can not use SetParent with an Overworld Event's sprite.");
     }
     try {
         GetTarget().SetParent(parent.img.transform);
         if (img.GetComponent <MaskImage>())
         {
             img.GetComponent <MaskImage>().inverted = parent._masked > 3;
         }
     } catch { throw new CYFException("sprite.SetParent(): You tried to set a removed sprite/nil sprite as this sprite's parent."); }
 }
Example #16
0
    // Use this for initialization
    void Start()
    {
        StaticInits.Start();
        SaveLoad.Start();
        new ControlPanel();
        new PlayerCharacter();
        #if UNITY_STANDALONE_WIN || UNITY_EDITOR
        if (GlobalControls.crate)
        {
            Misc.WindowName = ControlPanel.instance.WinodwBsaisNmae;
        }
        else
        {
            Misc.WindowName = ControlPanel.instance.WindowBasisName;
        }
        #endif
        SaveLoad.LoadAlMighty();
        MisriHalek       = GameObject.Find("MisriHalek").GetComponent <Image>();
        MainText         = FindObjectOfType <Text>();
        MainAudio        = Camera.main.GetComponent <AudioSource>();
        SubAudio         = GameObject.Find("SubAudio").GetComponent <AudioSource>();
        MainSprite       = ((LuaSpriteController)SpriteUtil.MakeIngameSprite("empty", "none", -1).UserData.Object);
        MainSprite.alpha = 0;
        MainSprite.SetPivot(.5f, 0);
        MainSprite.absy = 260;

        Sprite[] sprs = Resources.LoadAll <Sprite>("Sprites/Punder");
        foreach (Sprite spr in sprs)
        {
            Sprites.Add(spr.name, spr);
        }
        AudioClip[] adcs = Resources.LoadAll <AudioClip>("Audios");
        foreach (AudioClip adc in adcs)
        {
            Audios.Add(adc.name, adc);
        }
        MainAudio.clip = Audios["MisriHalek"];
        MainAudio.loop = false;
        MainAudio.Play();
        //MainAudio.time = 137;
        clipSampleData = new float[sampleDataLength];
    }
 // Set a given sprite to a sprite controller
 void SetSprite(Sprite key, string strKey, LuaSpriteController spr, int main = -1)
 {
     if (key == null)
     {
         throw new Exception("Tried to set sprite with key \"" + strKey + "\".");
     }
     if (main < 0 || main > 1 || (main == 0 ? lastPunderSprite : lastLuSprite) != strKey)
     {
         spr.img.GetComponent <Image>().sprite            = key;
         spr.img.GetComponent <RectTransform>().sizeDelta = new Vector2(key.texture.width, key.texture.height);
         if (main == 0)
         {
             lastPunderSprite = strKey;
         }
         else if (main == 1)
         {
             lastLuSprite = strKey;
             spr.Scale(2, 2);
         }
     }
 }
    // Set a given sprite to a sprite controller
    protected virtual void SetSprite(Sprite key, string strKey, LuaSpriteController spr, int main = -1)
    {
        if (key == null)
        {
            throw new Exception("Tried to set sprite with key \"" + strKey + "\".");
        }
        if (main >= 0 && main <= 1 && (main == 0 ? lastPunderSprite : lastLuSprite) == strKey)
        {
            return;
        }
        spr.img.GetComponent <Image>().sprite            = key;
        spr.img.GetComponent <RectTransform>().sizeDelta = new Vector2(key.texture.width, key.texture.height);
        switch (main)
        {
        case 0: lastPunderSprite = strKey; break;

        case 1:
            lastLuSprite = strKey;
            spr.Scale(2, 2);
            break;
        }
    }
Example #19
0
    public void Start()
    {
        foreach (RectTransform child in transform)
        {
            switch (child.name)
            {
            case "SliceAnim": slice = new LuaSpriteController(child.GetComponent <Image>()); break;

            case "HPBar":    lifeBar = child.GetComponent <LifeBarController>(); break;

            case "DamageNumber":
                damageText   = child.GetComponent <TextManager>();
                damageTextRt = child.GetComponent <RectTransform>();
                break;
            }
        }
        sliceAnim          = UIController.instance.fightUI.sliceAnim;
        sliceAnimFrequency = UIController.instance.fightUI.sliceAnimFrequency;
        shakeX             = UIController.instance.fightUI.shakeX;
        damageText.SetFont(SpriteFontRegistry.Get(SpriteFontRegistry.UI_DAMAGETEXT_NAME));
        damageText.SetMute(true);
    }
Example #20
0
 public void SetParent(LuaSpriteController parent)
 {
     CheckExists();
     if (parent != null && parent.img.transform != null && parent.img.transform.parent.name == "SpritePivot")
     {
         throw new CYFException("text.SetParent(): Can not use SetParent with an Overworld Event's sprite.");
     }
     try {
         if (parent == null)
         {
             throw new CYFException("text.SetParent(): Can't set a sprite's parent as nil.");
         }
         container.transform.SetParent(parent.img.transform);
         foreach (Transform child in container.transform)
         {
             MaskImage childmask = child.gameObject.GetComponent <MaskImage>();
             if (childmask != null)
             {
                 childmask.inverted = parent._masked == LuaSpriteController.MaskMode.INVERTEDSPRITE || parent._masked == LuaSpriteController.MaskMode.INVERTEDSTENCIL;
             }
         }
     }
     catch { throw new CYFException("You tried to set a removed sprite/nil sprite as this text object's parent."); }
 }
Example #21
0
 public void SetParent(LuaSpriteController parent)
 {
     try { container.transform.SetParent(parent.img.transform); }
     catch { throw new CYFException("You tried to set a removed sprite/unexisting sprite as this text's parent."); }
 }
Example #22
0
 public void SetParent(LuaSpriteController parent)
 {
     CheckExists();
     try { container.transform.SetParent(parent.img.transform); }
     catch { throw new CYFException("You tried to set a removed sprite/nil sprite as this text object's parent."); }
 }
    // Use this for initialization
    void Start()
    {
        // Load CYF's save file
        StaticInits.Start();
        SaveLoad.Start();

        // Set up CYF's basic objects
        new ControlPanel();
        new PlayerCharacter();
        #if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
        if (GlobalControls.crate)
        {
            Misc.WindowName = ControlPanel.instance.WinodwBsaisNmae;
        }
        else
        {
            Misc.WindowName = ControlPanel.instance.WindowBasisName;
        }
        #endif
        // Load CYF's AlMighty save file
        SaveLoad.LoadAlMighty();

        // Store useful scene objects
        misriHalek = GameObject.Find("MisriHalek").GetComponent <Image>();
        mainText   = GameObject.Find("MainText").GetComponent <Text>();
        subText    = GameObject.Find("SubText").GetComponent <Text>();
        mainAudio  = Camera.main.GetComponent <AudioSource>();
        subAudio   = GameObject.Find("SubAudio").GetComponent <AudioSource>();

        // Load all resources needed for this animation to play
        Sprite[] punderSprs = Resources.LoadAll <Sprite>("Sprites/Punder");
        foreach (Sprite spr in punderSprs)
        {
            punderSprites.Add(spr.name, spr);
        }

        Sprite[] luSprs = Resources.LoadAll <Sprite>("Sprites/Lu");
        foreach (Sprite spr in luSprs)
        {
            luSprites.Add(spr.name, spr);
        }

        AudioClip[] adcs = Resources.LoadAll <AudioClip>("Audios");
        foreach (AudioClip adc in adcs)
        {
            audioFiles.Add(adc.name, adc);
        }

        // Create all sprites needed for the animation
        mainSprite       = (LuaSpriteController)SpriteUtil.MakeIngameSprite("empty", "Default", -1).UserData.Object;
        mainSprite.alpha = 0;
        mainSprite.SetPivot(.5f, 0);
        mainSprite.x = 0;
        mainSprite.y = 20;

        fadeSprite       = (LuaSpriteController)SpriteUtil.MakeIngameSprite("black", "Default", -1).UserData.Object;
        fadeSprite.alpha = 0;

        pauseSprite = (LuaSpriteController)SpriteUtil.MakeIngameSprite("empty", "Default", -1).UserData.Object;
        SetSprite(Resources.Load <Sprite>("Sprites/pause"), "", pauseSprite);
        pauseSprite.alpha = 0;

        subSprite   = (LuaSpriteController)SpriteUtil.MakeIngameSprite("empty", "Lu", -1).UserData.Object;
        subSprite.x = 0;
        subSprite.y = -400;
        SetSprite("HoldNormal0", false);

        // Preload all other audio files to prevent lag spikes
        foreach (AudioClip clip in audioFiles.Values)
        {
            mainAudio.clip = clip;
            mainAudio.Play();
        }
        mainAudio.clip = audioFiles["MisriHalek"];
        mainAudio.loop = false;
        mainAudio.Play();

        clipSampleData = new float[sampleDataLength];
    }
    // Set a sprite using a string key
    void SetSprite(string key, LuaSpriteController spr, int main = -1)
    {
        Dictionary <string, Sprite> sprDict = main == 0 ? punderSprites : luSprites;

        SetSprite(sprDict[key], key, spr, main);
    }
    // Set the main or sub sprite using a string key
    void SetSprite(string key, bool main)
    {
        LuaSpriteController spr = main ? mainSprite : subSprite;

        SetSprite(key, spr, main ? 0 : 1);
    }
 /// <summary>
 /// Create a new Lua controller intended for this player.
 /// </summary>
 /// <param name="p">PlayerController this controller is intended for</param>
 public LuaPlayerStatus(PlayerController p)
 {
     player = p;
     spr    = new LuaSpriteController(p.GetComponent <Image>());
 }
Example #27
0
    // Update is called once per frame
    private void Update()
    {
        if (hasRevived && reviveFade2)
        {
            reviveFade2.transform.localPosition = new Vector3(0, 0, 0);
            if (reviveFade2.color.a > 0.0f)
            {
                reviveFade2.color = new Color(1, 1, 1, reviveFade2.color.a - Time.deltaTime / 2);
            }
            else
            {
                Destroy(reviveFade2.gameObject);
            }
        }
        if (!started)
        {
            return;
        }
        if (!revived)
        {
            if (!once && UnitaleUtil.IsOverworld)
            {
                once = true;
                utHeart.transform.SetParent(GameObject.Find("Canvas GameOver").transform);
                utHeart.transform.position           = heartPos;
                utHeart.GetComponent <Image>().color = heartColor;
                canvasOW = GameObject.Find("Canvas OW");
                canvasOW.SetActive(false);
                canvasTwo = GameObject.Find("Canvas Two");
                canvasTwo.SetActive(false);
            }
            else if (!once)
            {
                once = true;
                gameObject.GetComponent <RectTransform>().sizeDelta = new Vector2(16, 16);
                gameObject.GetComponent <Image>().enabled           = true; // abort the blink animation if it was playing
            }

            if (internalTimer > breakHeartAfter)
            {
                AudioSource.PlayClipAtPoint(AudioClipRegistry.GetSound("heartbeatbreaker"), Camera.main.transform.position, 0.75f);
                brokenHeartPrefab = Instantiate(brokenHeartPrefab);
                brokenHeartPrefab.transform.SetParent(UnitaleUtil.IsOverworld ? GameObject.Find("Canvas GameOver").transform : gameObject.transform);
                brokenHeartPrefab.GetComponent <RectTransform>().position = heartPos;
                brokenHeartPrefab.GetComponent <Image>().color            = heartColor;
                brokenHeartPrefab.GetComponent <Image>().enabled          = true;
                if (UnitaleUtil.IsOverworld)
                {
                    utHeart.GetComponent <Image>().enabled = false;
                }
                else
                {
                    Color color = gameObject.GetComponent <Image>().color;
                    gameObject.GetComponent <Image>().color = new Color(color.r, color.g, color.b, 0);
                    if (EnemyEncounter.script.GetVar("revive").Boolean)
                    {
                        Revive();
                    }
                }
                breakHeartAfter = 999.0f;
            }

            if (internalTimer > explodeHeartAfter)
            {
                AudioSource.PlayClipAtPoint(AudioClipRegistry.GetSound("heartsplosion"), Camera.main.transform.position, 0.75f);
                brokenHeartPrefab.GetComponent <Image>().enabled = false;
                heartShardInstances = new RectTransform[6];
                heartShardRelocs    = new Vector2[6];
                heartShardCtrl      = new LuaSpriteController[6];
                for (int i = 0; i < heartShardInstances.Length; i++)
                {
                    heartShardInstances[i] = Instantiate(heartShardPrefab).GetComponent <RectTransform>();
                    heartShardCtrl[i]      = new LuaSpriteController(heartShardInstances[i].GetComponent <Image>());
                    heartShardInstances[i].transform.SetParent(UnitaleUtil.IsOverworld ? GameObject.Find("Canvas GameOver").transform : gameObject.transform);
                    heartShardInstances[i].GetComponent <RectTransform>().position = heartPos;
                    heartShardInstances[i].GetComponent <Image>().color            = heartColor;
                    heartShardRelocs[i] = Random.insideUnitCircle * 100.0f;
                    heartShardCtrl[i].Set(heartShardAnim[0]);
                    heartShardCtrl[i].SetAnimation(heartShardAnim, 1 / 5f);
                }
                explodeHeartAfter = 999.0f;
            }

            if (internalTimer > gameOverAfter)
            {
                AudioClip originMusic = gameOverMusic.clip;
                if (deathMusic != null)
                {
                    try { gameOverMusic.clip = AudioClipRegistry.GetMusic(deathMusic); }
                    catch { UnitaleUtil.DisplayLuaError("game over screen", "The specified death music doesn't exist. (\"" + deathMusic + "\")"); }
                    if (gameOverMusic.clip == null)
                    {
                        gameOverMusic.clip = originMusic;
                    }
                }
                gameOverMusic.Play();
                gameOverAfter = 999.0f;
            }

            if (internalTimer > fluffybunsAfter)
            {
                if (deathText != null)
                {
                    List <TextMessage> text  = deathText.Select(str => new TextMessage(str, false, false)).ToList();
                    TextMessage[]      text2 = new TextMessage[text.Count + 1];
                    for (int i = 0; i < text.Count; i++)
                    {
                        text2[i] = text[i];
                    }
                    text2[text.Count] = new TextMessage("", false, false);
                    if (Random.Range(0, 400) == 44)
                    {
                        gameOverTxt.SetTextQueue(new[] {
                            new TextMessage("[color:ffffff][voice:v_fluffybuns][waitall:2]4", false, false),
                            new TextMessage("[color:ffffff][voice:v_fluffybuns][waitall:2]" + PlayerCharacter.instance.Name + "!\n[w:15]Stay determined...", false, false),
                            new TextMessage("", false, false)
                        });
                    }
                    else
                    {
                        gameOverTxt.SetTextQueue(text2);
                    }
                }
                else
                {
                    // This "4" made us laugh so hard that I kept it :P
                    int fourChance = Random.Range(0, 80);

                    string[] possibleDeathTexts = { "You cannot give up\njust yet...", "It cannot end\nnow...", "Our fate rests upon\nyou...",
                                                    "Don't lose hope...",              "You're going to\nbe alright!" };
                    if (fourChance == 44)
                    {
                        possibleDeathTexts[4] = "4";
                    }

                    gameOverTxt.SetTextQueue(new[] {
                        new TextMessage("[color:ffffff][voice:v_fluffybuns][waitall:2]" + possibleDeathTexts[Math.RandomRange(0, possibleDeathTexts.Length)], false, false),
                        new TextMessage("[color:ffffff][voice:v_fluffybuns][waitall:2]" + PlayerCharacter.instance.Name + "!\n[w:15]Stay determined...", false, false),
                        new TextMessage("", false, false)
                    });
                }

                fluffybunsAfter = 999.0f;
            }

            if (!done)
            {
                gameOverImage.color = new Color(1, 1, 1, gameOverFadeTimer);
                if (gameOverAfter >= 999.0f && gameOverFadeTimer < 1.0f)
                {
                    gameOverFadeTimer += Time.deltaTime / 2;
                    if (gameOverFadeTimer >= 1.0f)
                    {
                        gameOverFadeTimer = 1.0f;
                        done = true;
                    }
                }
                internalTimer += Time.deltaTime; // This is actually dangerous because done can be true before everything's done if timers are modified
            }
            else if (!exiting && !gameOverTxt.AllLinesComplete())
            {
                // Note: [noskip] only affects the UI controller's ability to skip, so we have to redo that here.
                if (InputUtil.Pressed(GlobalControls.input.Confirm) && gameOverTxt.LineComplete())
                {
                    gameOverTxt.NextLineText();
                }
            }
        }
        else
        {
            if (reviveTextSet && !reviveText.AllLinesComplete())
            {
                // Note: [noskip] only affects the UI controller's ability to skip, so we have to redo that here.
                if (InputUtil.Pressed(GlobalControls.input.Confirm) && reviveText.LineComplete())
                {
                    reviveText.NextLineText();
                }
            }
            else if (reviveTextSet && !exiting)
            {
                exiting = true;
            }
            else if (internalTimerRevive >= 5.0f && !reviveTextSet && breakHeartReviveAfter)
            {
                if (deathText != null)
                {
                    List <TextMessage> text = new List <TextMessage>();
                    foreach (string str in deathText)
                    {
                        text.Add(new TextMessage(str, false, false));
                    }
                    TextMessage[] text2 = new TextMessage[text.Count + 1];
                    for (int i = 0; i < text.Count; i++)
                    {
                        text2[i] = text[i];
                    }
                    text2[text.Count] = new TextMessage("", false, false);
                    reviveText.SetTextQueue(text2);
                }
                reviveTextSet = true;
            }
            else if (internalTimerRevive > 2.5f && internalTimerRevive < 4.0f)
            {
                brokenHeartPrefab.transform.localPosition = new Vector2(Random.Range(-3, 2), Random.Range(-3, 2));
            }
            else if (!breakHeartReviveAfter && internalTimerRevive > 2.5f)
            {
                breakHeartReviveAfter = true;
                AudioSource.PlayClipAtPoint(AudioClipRegistry.GetSound("heartbeatbreaker"), Camera.main.transform.position, 0.75f);
                if (UnitaleUtil.IsOverworld)
                {
                    utHeart.GetComponent <Image>().enabled = true;
                }
                else
                {
                    Color color = gameObject.GetComponent <Image>().color;
                    gameObject.GetComponent <Image>().color = new Color(color.r, color.g, color.b, 1);
                }
                Destroy(brokenHeartPrefab);
            }

            if (!reviveTextSet)
            {
                internalTimerRevive += Time.deltaTime;
            }

            if (exiting && reviveFade.color.a < 1.0f && reviveFade.isActiveAndEnabled)
            {
                reviveFade.color = new Color(1, 1, 1, reviveFade.color.a + Time.deltaTime / 2);
            }
            else if (exiting)
            {
                // repurposing the timer as a reset delay
                gameOverFadeTimer -= Time.deltaTime;
                if (gameOverMusic.volume - Time.deltaTime > 0.0f)
                {
                    gameOverMusic.volume -= Time.deltaTime;
                }
                else
                {
                    gameOverMusic.volume = 0.0f;
                }
                if (gameOverFadeTimer < -1.0f)
                {
                    reviveFade2 = Instantiate(reviveFade.gameObject).GetComponent <Image>();
                    reviveFade2.transform.SetParent(playerParent);
                    reviveFade2.transform.SetAsLastSibling();
                    reviveFade2.transform.localPosition = new Vector3(0, 0, 0);
                    reviveFade.color = new Color(1, 1, 1, 0);
                    EndGameOverRevive();
                    if (musicBefore != null)
                    {
                        musicBefore.clip = music;
                        musicBefore.Play();
                    }
                    hasRevived = true;
                }
            }
        }

        for (int i = 0; i < heartShardInstances.Length; i++)
        {
            heartShardInstances[i].position += (Vector3)heartShardRelocs[i] * Time.deltaTime;
            heartShardRelocs[i].y           -= 100f * Time.deltaTime;
        }

        if (gameOverTxt.textQueue == null)
        {
            return;
        }
        if (!exiting && gameOverTxt.AllLinesComplete() && gameOverTxt.LineCount() != 0)
        {
            exiting           = true;
            gameOverFadeTimer = 1.0f;
        }
        else if (exiting && gameOverFadeTimer > 0.0f)
        {
            gameOverImage.color = new Color(1, 1, 1, gameOverFadeTimer);
            if (!(gameOverFadeTimer > 0.0f))
            {
                return;
            }
            gameOverFadeTimer -= Time.deltaTime / 2;
            if (gameOverFadeTimer <= 0.0f)
            {
                gameOverFadeTimer = 0.0f;
            }
        }
        else if (exiting)
        {
            // repurposing the timer as a reset delay
            gameOverFadeTimer -= Time.deltaTime;
            if (gameOverMusic.volume - Time.deltaTime > 0.0f)
            {
                gameOverMusic.volume -= Time.deltaTime;
            }
            else
            {
                gameOverMusic.volume = 0.0f;
            }
            if (gameOverFadeTimer < -1.0f)
            {
                //StaticInits.Reset();
                EndGameOver();
            }
        }
    }
Example #28
0
    void Start()
    {
        if (Inventory.inventory.Count == 0 && ItemBox.items.Count == 0)
        {
            System.Random rnd   = new System.Random();
            string[]      words = new string[] { "effort", "time", "feeling" };

            Table text = new Table(EventManager.instance.luainvow.appliedScript.script);
            text.Set(DynValue.NewNumber(1), DynValue.NewString("You have no items.[w:10]\nYou put a little " + words[rnd.Next(0, 3)] + "\rinto the box."));

            EventManager.instance.luagenow.SetDialog(DynValue.NewTable(text));
            Destroy(this);
            return;
        }

        active = true;

        GetComponent <Image>().color = new Color(1, 1, 1, 1);

        player = GameObject.Find("utHeartMenu");
        Color c = player.GetComponent <Image>().color;

        player.GetComponent <Image>().color = new Color(c.r, c.g, c.b, 1);

        for (int i = 0; i < Inventory.inventorySize; i++)
        {
            GameObject go = new GameObject();
            go.AddComponent <RectTransform>();
            go.AddComponent <TextManager>();
            TextManager tm = go.GetComponent <TextManager>();
            tm.transform.SetParent(transform);
            tm.transform.position = new Vector3(80, 410 - (i * 32));
            inventory.Add(tm);

            LuaSpriteController sprite = (LuaSpriteController)(SpriteUtil.MakeIngameSprite("px", -1).UserData.Object);
            sprite._img.transform.SetParent(transform);
            sprite.SetPivot(0, 0.5f);
            sprite.MoveToAbs(92, 386 - (i * 32));
            sprite.xscale = 190;
            sprite.color  = new float[] { 1f, 0f, 0f };
            inventorySprites.Add(sprite);
        }

        for (int i = 0; i < ItemBox.capacity; i++)
        {
            GameObject go = new GameObject();
            go.AddComponent <RectTransform>();
            go.AddComponent <TextManager>();
            TextManager tm = go.GetComponent <TextManager>();
            tm.transform.SetParent(transform);
            tm.transform.position = new Vector3(372, 410 - (i * 32));
            boxContents.Add(tm);

            LuaSpriteController sprite = (LuaSpriteController)(SpriteUtil.MakeIngameSprite("px", -1).UserData.Object);
            sprite._img.transform.SetParent(transform);
            sprite.SetPivot(0, 0.5f);
            sprite.MoveToAbs(384, 386 - (i * 32));
            sprite.xscale = 190;
            sprite.color  = new float[] { 1f, 0f, 0f };
            boxContentsSprites.Add(sprite);
        }
        RefreshDisplay();
    }
 public void SetParent(LuaSpriteController parent)
 {
     img.transform.SetParent(parent.img.transform);
 }
 public ProjectileController(Projectile p)
 {
     this.p = p;
     spr    = new LuaSpriteController(p.GetComponent <Image>());
 }