public void Day19_MonsterMessages_Part1_Ok()
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Data.txt");

            Assert.Equal(634, lines.Length);

            var sut = new MonsterMessage(lines.Take(131).ToArray());

            Assert.Equal(131, sut.Rules.Count);

            var messages = lines.Skip(132).Take(510).ToArray();

            Assert.Equal(502, messages.Length);

            string exp = sut.MakeRegexForRule(0);

            int count = 0;

            foreach (var msg in messages)
            {
                var rg = Regex.Match(msg, exp);
                if (rg.Success)
                {
                    count++;
                }
            }
            Assert.Equal(299, count);
        }
        public void Day19_Example_Part2_NoNewRule_Ok()
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Part2DataExample.txt");

            Assert.Equal(47, lines.Length);

            var sut = new MonsterMessage(lines.Take(31).ToArray());

            Assert.Equal(31, sut.Rules.Count);

            var messages = lines.Skip(32).Take(14).ToArray();

            Assert.Equal(14, messages.Length);

            string exp = sut.MakeRegexForRule(0);

            int count = 0;

            foreach (var msg in messages)
            {
                var rg = Regex.Match(msg, exp);
                if (rg.Success)
                {
                    count++;
                }
            }
            Assert.Equal(3, count);
        }
        public void Day19_MonsterMessages_NewParts_Ok()
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Data.txt");

            Assert.Equal(634, lines.Length);

            var sut = new MonsterMessage(lines.Take(131).ToArray());

            Assert.Equal(131, sut.Rules.Count);
            sut.ReplaceRule("8: 42 | 42 8");
            sut.ReplaceRule("11: 42 31 | 42 11 31");

            sut.isPart2 = true;
            string exp42 = sut.MakeRegexForRule(42);

            Assert.NotEmpty(exp42);
            string exp31 = sut.MakeRegexForRule(31);

            Assert.NotEmpty(exp31);

            string exp8 = sut.MakeRegexForRule(8);

            Assert.NotEmpty(exp8);
            string exp11 = sut.MakeRegexForRule(11);

            Assert.NotEmpty(exp11);
        }
        public void Day19_Example_WithNewRules_Ok()
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Part2DataExample.txt");

            Assert.Equal(47, lines.Length);

            var sut = new MonsterMessage(lines.Take(31).ToArray());

            Assert.Equal(31, sut.Rules.Count);
            sut.ReplaceRule("8: 42 | 42 8");
            sut.ReplaceRule("11: 42 31 | 42 11 31");

            var messages = lines.Skip(32).Take(15).ToArray();

            Assert.Equal(15, messages.Length);

            sut.isPart2 = true;
            string exp = sut.MakeRegexForRule(0);

            int count = 0;

            foreach (var msg in messages)
            {
                var rg = Regex.Match(msg, exp);
                if (rg.Success)
                {
                    count++;
                }
            }
            Assert.Equal(12, count);
        }
Esempio n. 5
0
    public void AddText(DynValue text)
    {
        CheckExists();

        // Checks if the parameter given is valid
        if (text == null || (text.Type != DataType.Table && text.Type != DataType.String))
        {
            throw new CYFException("Text.AddText: the text argument must be a non-empty array of strings or a simple string.");
        }

        // Converts the text argument into a table if it's a simple string
        text = text.Type == DataType.String ? DynValue.NewTable(null, new DynValue[1] {
            text
        }) : text;

        if (AllLinesComplete())
        {
            SetText(text);
            return;
        }
        TextMessage[] msgs = new TextMessage[text.Table.Length];
        for (int i = 0; i < text.Table.Length; i++)
        {
            msgs[i] = new MonsterMessage(text.Table.Get(i + 1).String);
        }
        AddToTextQueue(msgs);
    }
 public override bool OnEnter()
 {
     mm           = CurrCtrl.GetComponent <MonsterMessage>();
     mm.bufferCtl = CurrCtrl.GetComponentInChildren <BufferController> ();
     if (CurrArgs.m_bUsePercent)
     {
         mm.my_HealState.AddHp((int)(CurrCtrl.GetComponentInChildren <HealthState> ().FullHp *CurrArgs.m_fValue1));
     }
     else
     {
         mm.my_HealState.AddHp((int)(CurrArgs.m_fValue1));
     }
     if (CurrArgs.m_bUsePercent)
     {
         CreateProp.createProp.SubBloodView(mm.my_HealState.GrowBlood, mm.monsterBody.transform.position + new Vector3(mm.beiji.PX, mm.beiji.PY, 0), Color.green, Vector3.zero, false, true);
     }
     else
     {
         CreateProp.createProp.SubBloodView(mm.my_HealState.GrowBlood, mm.monsterBody.transform.position + new Vector3(mm.beiji.PX, mm.beiji.PY, 0), Color.green, Vector3.zero, false, true);
     }
     if (CurrArgs.m_iBufferUI == 1)
     {
         healBuff = Resources.Load("MonsterResources/MonsterBuffs/MonsterHealBuff") as GameObject;
         GameObject temp1 = GameObject.Instantiate(healBuff, CurrCtrl.GetComponent <MonsterMessage> ().monsterFoot.transform.position, Quaternion.identity) as GameObject;
         if (CurrCtrl.transform.rotation.y != 0f)
         {
             temp1.transform.rotation = new Quaternion(0f, 180f, 0f, 0f);
         }
         temp1.transform.localScale = new Vector3(mm.bufferCtl.buffScale * CurrArgs.m_fValue2, mm.bufferCtl.buffScale * CurrArgs.m_fValue2, 1f);
         temp1.transform.position   = new Vector3(temp1.transform.position.x + mm.bufferCtl.xDis, temp1.transform.position.y + mm.bufferCtl.yDis, temp1.transform.position.z);
         temp1.transform.SetParent(CurrCtrl.GetComponent <MonsterMessage> ().monsterFoot.transform);
         GameObject.Destroy(temp1, 3f);
     }
     return(true);
 }
        public void Day19_ReadData_Ok()
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Data.txt");

            Assert.Equal(634, lines.Length);

            var sut = new MonsterMessage(lines.Take(131).ToArray());

            Assert.Equal(131, sut.Rules.Count);
        }
Esempio n. 8
0
 public void AddText(DynValue text)
 {
     if (AllLinesComplete())
     {
         SetText(text);
         return;
     }
     TextMessage[] msgs = new TextMessage[text.Table.Length];
     for (int i = 0; i < text.Table.Length; i++)
     {
         msgs[i] = new MonsterMessage(text.Table.Get(i + 1).String);
     }
     base.AddToTextQueue(msgs);
 }
        public void Day19_Example_WithNewRulesSingle_Ok(string msg, bool expected)
        {
            var lines = DailyDataUtilities.ReadLinesFromFile("Day19Part2DataExample.txt");

            Assert.Equal(47, lines.Length);

            var sut = new MonsterMessage(lines.Take(31).ToArray());

            Assert.Equal(31, sut.Rules.Count);
            sut.ReplaceRule("8: 42 | 42 8");
            sut.ReplaceRule("11: 42 31 | 42 11 31");

            sut.isPart2 = true;
            string exp = sut.MakeRegexForRule(0);

            var rg = Regex.Match(msg, exp);

            Assert.Equal(expected, rg.Success);
        }
        public void Day19_Example2_OK()
        {
            var rules = new string[] {
                "0: 4 1 5",
                "1: 2 3 | 3 2",
                "2: 4 4 | 5 5",
                "3: 4 5 | 5 4",
                "4: a",
                "5: b"
            };

            var msgs = new string[] {
                "ababbb",
                "bababa",
                "abbbab",
                "aaabbb",
                "aaaabbb"
            };

            var sut = new MonsterMessage(rules);

            Assert.Equal(6, sut.Rules.Count);

            string exp = sut.MakeRegexForRule(0);

            Assert.NotNull(exp);

            int count = 0;

            foreach (var msg in msgs)
            {
                var rg = Regex.Match(msg, exp);
                if (rg.Success)
                {
                    count++;
                }
            }
            Assert.Equal(2, count);
        }
        public void Day19_Example1_OK(string msg, bool expected)
        {
            var rules = new string[] {
                "0: 1 2",
                "1: a",
                "2: 1 3 | 3 1",
                "3: b"
            };

            var sut = new MonsterMessage(rules);

            Assert.Equal(4, sut.Rules.Count);

            string exp = sut.MakeRegexForRule(0);

            Assert.NotNull(exp);


            var rg = Regex.Match(msg, exp);

            Assert.Equal(expected, rg.Success);
        }
Esempio n. 12
0
    public void SwitchState(UIState state)
    {
        //Pre-state
        if (parentStateCall)
        {
            parentStateCall = false;
            encounter.script.Call("EnteringState", new DynValue[] { DynValue.NewString(state.ToString()), DynValue.NewString(this.state.ToString()) });
            parentStateCall = true;

            if (childStateCalled)
            {
                childStateCalled = false;
                return;
            }
        }
        else
        {
            childStateCalled = true;
        }

        // TODO Quick and dirty addition to add some humor to the Run away command.
        // Will be removed without question.
        if (musicPausedFromRunning)
        {
            Camera.main.GetComponent <AudioSource>().UnPause();
            musicPausedFromRunning = false;
        }
        // END DEBUG

        // below: actions based on ending a previous state, or actions that affect multiple states
        if (this.state == UIState.DEFENDING && state != UIState.DEFENDING)
        {
            encounter.endWave();
        }

        if (state != UIState.ENEMYDIALOGUE && state != UIState.DEFENDING)
        {
            ArenaSizer.instance.Resize(ArenaSizer.UIWidth, ArenaSizer.UIHeight);
            PlayerController.instance.invulTimer = 0.0f;
            PlayerController.instance.setControlOverride(true);
        }

        if (this.state == UIState.ENEMYSELECT && action == Actions.FIGHT)
        {
            foreach (LifeBarController lbc in arenaParent.GetComponentsInChildren <LifeBarController>())
            {
                Destroy(lbc.gameObject);
            }
        }

        if (state == UIState.DEFENDING || state == UIState.ENEMYDIALOGUE)
        {
            textmgr.destroyText();
            PlayerController.instance.SetPosition(320, 160, false);
            PlayerController.instance.GetComponent <Image>().enabled = true;
            fightBtn.overrideSprite = null;
            actBtn.overrideSprite   = null;
            itemBtn.overrideSprite  = null;
            mercyBtn.overrideSprite = null;
            textmgr.setPause(true);
        }

        if (this.state == UIState.ENEMYDIALOGUE)
        {
            TextManager[] textmen = FindObjectsOfType <TextManager>();
            foreach (TextManager textman in textmen)
            {
                if (textman.gameObject.name.StartsWith("DialogBubble")) // game object name is hardcoded as it won't change
                {
                    Destroy(textman.gameObject);
                }
            }
        }

        this.state = state;
        switch (state)
        {
        case UIState.ATTACKING:
            textmgr.destroyText();
            PlayerController.instance.GetComponent <Image>().enabled = false;
            fightUI.Init(encounter.enabledEnemies[selectedEnemy]);
            break;

        case UIState.ACTIONSELECT:
            PlayerController.instance.setControlOverride(true);
            PlayerController.instance.GetComponent <Image>().enabled = true;
            setPlayerOnAction(action);
            textmgr.setPause(ArenaSizer.instance.isResizeInProgress());
            textmgr.setCaller(encounter.script);     // probably not necessary due to ActionDialogResult changes
            textmgr.setText(new RegularMessage(encounter.EncounterText));
            break;

        case UIState.ACTMENU:
            string[] actions = new string[encounter.enabledEnemies[selectedEnemy].ActCommands.Length];
            for (int i = 0; i < actions.Length; i++)
            {
                actions[i] = encounter.enabledEnemies[selectedEnemy].ActCommands[i];
            }

            selectedAction = 0;
            setPlayerOnSelection(selectedAction);
            textmgr.setText(new SelectMessage(actions, false));
            break;

        case UIState.ITEMMENU:
            string[] items = getInventoryPage(0);
            selectedItem = 0;
            setPlayerOnSelection(0);
            textmgr.setText(new SelectMessage(items, false));

            /*ActionDialogResult(new TextMessage[] {
             *  new TextMessage("Can't open inventory.\nClogged with pasta residue.", true, false),
             *  new TextMessage("Might also be a dog.\nIt's ambiguous.",true,false)
             * }, UIState.ENEMYDIALOG);*/
            break;

        case UIState.MERCYMENU:
            selectedMercy = 0;
            string[] mercyopts = new string[1 + (encounter.CanRun ? 1 : 0)];
            mercyopts[0] = "Spare";
            foreach (EnemyController enemy in encounter.enabledEnemies)
            {
                if (enemy.CanSpare)
                {
                    mercyopts[0] = "[starcolor:ffff00][color:ffff00]" + mercyopts[0] + "[color:ffffff]";
                    break;
                }
            }
            if (encounter.CanRun)
            {
                mercyopts[1] = "Flee";
            }
            setPlayerOnSelection(0);
            textmgr.setText(new SelectMessage(mercyopts, true));
            break;

        case UIState.ENEMYSELECT:
            string[] names         = new string[encounter.enabledEnemies.Length];
            string[] colorPrefixes = new string[names.Length];
            for (int i = 0; i < encounter.enabledEnemies.Length; i++)
            {
                names[i] = encounter.enabledEnemies[i].Name;
                if (encounter.enabledEnemies[i].CanSpare)
                {
                    colorPrefixes[i] = "[color:ffff00]";
                }
            }

            textmgr.setText(new SelectMessage(names, true, colorPrefixes));
            if (action == Actions.FIGHT)
            {
                int maxWidth = (int)initialHealthPos.x;
                for (int i = 0; i < encounter.enabledEnemies.Length; i++)
                {
                    int mNameWidth = UnitaleUtil.fontStringWidth(textmgr.Charset, "* " + encounter.enabledEnemies[i].Name) + 50;
                    if (mNameWidth > maxWidth)
                    {
                        maxWidth = mNameWidth;
                    }
                }
                for (int i = 0; i < encounter.enabledEnemies.Length; i++)
                {
                    LifeBarController lifebar = Instantiate(Resources.Load <LifeBarController>("Prefabs/HPBar"));
                    lifebar.transform.SetParent(textmgr.transform);
                    RectTransform lifebarRt = lifebar.GetComponent <RectTransform>();
                    lifebarRt.anchoredPosition = new Vector2(maxWidth, initialHealthPos.y - i * textmgr.Charset.LineSpacing);
                    lifebarRt.sizeDelta        = new Vector2(90, lifebarRt.sizeDelta.y);
                    lifebar.setFillColor(Color.green);
                    float hpFrac = (float)encounter.enabledEnemies[i].HP / (float)encounter.enabledEnemies[i].getMaxHP();
                    lifebar.setInstant(hpFrac);
                }
            }

            if (selectedEnemy >= encounter.enabledEnemies.Length)
            {
                selectedEnemy = 0;
            }
            setPlayerOnSelection(selectedEnemy * 2);     // single list so skip right row by multiplying x2
            break;

        case UIState.DEFENDING:
            ArenaSizer.instance.Resize((int)encounter.ArenaSize.x, (int)encounter.ArenaSize.y);
            PlayerController.instance.setControlOverride(false);
            encounter.nextWave();
            // ActionDialogResult(new TextMessage("This is where you'd\rdefend yourself.\nBut the code was spaghetti.", true, false), UIState.ACTIONSELECT);
            break;

        case UIState.DIALOGRESULT:
            PlayerController.instance.GetComponent <Image>().enabled = false;
            break;

        case UIState.ENEMYDIALOGUE:
            PlayerController.instance.GetComponent <Image>().enabled = true;
            ArenaSizer.instance.Resize(155, 130);
            encounter.CallOnSelfOrChildren("EnemyDialogueStarting");
            monDialogues = new TextManager[encounter.enabledEnemies.Length];
            for (int i = 0; i < encounter.enabledEnemies.Length; i++)
            {
                string[] msgs = encounter.enabledEnemies[i].GetDefenseDialog();
                if (msgs == null)
                {
                    UserDebugger.warn("Entered ENEMYDIALOGUE, but no current/random dialogue was set for " + encounter.enabledEnemies[i].Name);
                    SwitchState(UIState.DEFENDING);
                    break;
                }
                GameObject    speechBub = Instantiate(SpriteFontRegistry.BUBBLE_OBJECT);
                RectTransform enemyRt   = encounter.enabledEnemies[i].GetComponent <RectTransform>();
                TextManager   sbTextMan = speechBub.GetComponent <TextManager>();
                monDialogues[i] = sbTextMan;
                sbTextMan.setCaller(encounter.enabledEnemies[i].script);
                Image speechBubImg = speechBub.GetComponent <Image>();
                SpriteUtil.SwapSpriteFromFile(speechBubImg, encounter.enabledEnemies[i].DialogBubble);
                Sprite speechBubSpr = speechBubImg.sprite;
                // TODO improve position setting/remove hardcoding of position setting
                speechBub.transform.SetParent(encounter.enabledEnemies[i].transform);
                speechBub.GetComponent <RectTransform>().anchoredPosition = encounter.enabledEnemies[i].DialogBubblePosition;
                sbTextMan.setOffset(speechBubSpr.border.x, -speechBubSpr.border.w);
                sbTextMan.setFont(SpriteFontRegistry.Get(SpriteFontRegistry.UI_MONSTERTEXT_NAME));
                sbTextMan.setEffect(new RotatingEffect(sbTextMan));

                MonsterMessage[] monMsgs = new MonsterMessage[msgs.Length];
                for (int j = 0; j < monMsgs.Length; j++)
                {
                    monMsgs[j] = new MonsterMessage(msgs[j]);
                }

                sbTextMan.setTextQueue(monMsgs);
                speechBub.GetComponent <Image>().enabled = true;
            }
            break;

        case UIState.DONE:
            StaticInits.Reset();
            Application.LoadLevel("ModSelect");
            break;
        }
    }
 // Use this for initialization
 void Start()
 {
     m_BufferMgr    = new BufferMgr(transform.parent.parent.transform);
     monsterMessage = transform.parent.parent.GetComponent <MonsterMessage>();
     buffScale      = 1f;
 }