Exemple #1
0
        private void DoScript()
        {
            if (!sceneStartFadeStart)
            {
                sceneStartFadeStart = true;
            }

            if (scriptAPI.__isMainDo)
            {
                scriptAPI.__isMainDo = false;
                {
                    if (scriptAPI.__clearText)
                    {
                        for (var i = 0; i < textSprites.Length; i++)
                        {
                            if (textSprites[i] != null)
                            {
                                layer.Del(textSprites[i]);
                                textSprites[i].Dispose();
                                textSprites[i] = null;
                            }
                        }
                        textLineNum           = 0;
                        targetTextSpriteIndex = 0;
                        scriptAPI.__clearText = false;
                    }

                    if (scriptAPI.__talkText != null)
                    {
                        lock (scriptAPI._lock__talkText)
                        {
                            var t = scriptAPI.__talkText;

                            var t2 = t.Split('\n');
                            foreach (var t3 in t2)
                            {
                                //if (t3 == "") continue;
                                var x    = 100 + 5;
                                var y    = 600 + 55 + 50 * textLineNum;
                                var font = new Font(Config.MainConfig.MainFontPath, 20, new Color(1, 1, 1, 1), new Font.FontFrame[] {
                                    new Font.FontFrame(2, new Color(1, 0, 0, 0)),
                                }, 0);
                                var ts = new TextSprite(t3, font, new Vector2D(x, y), TextSprite.Type.Separation, null, 0, 100);
                                layer.Add(ts, 200);
                                textSprites[textLineNum] = ts;
                                ts.OnShowEnd            += () =>
                                {
                                    targetTextSpriteIndex++;
                                    if (textSprites.Count() <= targetTextSpriteIndex)
                                    {
                                        ImageSpriteWaitEnterIcon.IsDraw = true;
                                    }
                                    else if (textSprites[targetTextSpriteIndex] == null)
                                    {
                                        ImageSpriteWaitEnterIcon.IsDraw = true;
                                    }
                                };
                                ImageSpriteWaitEnterIcon.IsDraw = false;
                                textLineNum++;
                            }
                            scriptAPI.__talkText = null;
                        }
                    }

                    if (scriptAPI.__talkCharacterImagePath != null)
                    {
                        if (ImageSpriteTalkCharacter != null)
                        {
                            layer.Del(ImageSpriteTalkCharacter);
                            ImageSpriteTalkCharacter.Dispose();
                        }

                        var texture = TextureResourceManager.Instance.GetTexture(scriptAPI.__talkCharacterImagePath);
                        var w       = texture.Size.X;// 1300;//1024;
                        var h       = (int)((double)texture.Size.Y / (double)texture.Size.X * w);

                        var sprite = new ImageSprite(
                            texture,
                            new Rect(
                                new Vector2D(characterPosition.X, characterPosition.Y),
                                new Vector2D(w, h)),
                            new Color(1, 1, 1, 1)
                            );
                        layer.Add(sprite, 100);
                        ImageSpriteTalkCharacter         = sprite;
                        ImageSpriteTalkCharacter.Color.A = 0;
                        fadeTimerTime  = 0;
                        slideTimerTime = 0;

                        scriptAPI.__talkCharacterImagePath = null;
                    }

                    if (scriptAPI.__talkCharacterViewName != null)
                    {
                        if (CharacterViewNameTextSprite != null)
                        {
                            layer.Del(CharacterViewNameTextSprite);
                            CharacterViewNameTextSprite.Dispose();
                        }
                        var x = 100 + 5;
                        var y = 600;

                        var font = new Font(Config.MainConfig.MainFontPath, 20, new Color(1, 1, 1, 1), new Font.FontFrame[] {
                            new Font.FontFrame(2, new Color(1, 0, 0, 0)),
                        }, 0);
                        var ts = new TextSprite(scriptAPI.__talkCharacterViewName, font, new Vector2D(x, y));
                        layer.Add(ts, 200);

                        CharacterViewNameTextSprite       = ts;
                        scriptAPI.__talkCharacterViewName = null;
                    }

                    if (scriptAPI._nextBattleScript != null)
                    {
                        WindowManager.nextScene = new Scene.BattleScene(scriptAPI._nextBattleScript);

                        scriptAPI._nextBattleScript = null;
                    }

                    if (scriptAPI._nextTalkScript != null)
                    {
                        WindowManager.nextScene = new Scene.TalkScene(scriptAPI._nextTalkScript);

                        scriptAPI._nextTalkScript = null;
                    }

                    if (scriptAPI._nextTitle != null)
                    {
                        WindowManager.nextScene = new Scene.TitleScene();

                        scriptAPI._nextTitle = null;
                    }

                    if (scriptAPI.__choiseText != null)
                    {
                        if (choice != null)
                        {
                            layer.Del(choice);
                        }

                        // todo : Choiceのなかで文字のDisposeがいるはず
                        choice = new UI.Talk.Choice(scriptAPI.__choiseText);
                        layer.Add(choice, 200);

                        scriptAPI.__choiseText = null;
                    }

                    if (scriptAPI.__backGroundImagePath != null)
                    {
                        // todo : 背景のリソースをクリーンにする処理が見当たらない

                        if (ImageSpriteBackGround != null)
                        {
                            layer.Del(ImageSpriteBackGround);
                            ImageSpriteBackGround.Dispose();
                        }

                        var texture = TextureResourceManager.Instance.GetTexture(scriptAPI.__backGroundImagePath);

                        var w      = 1600;
                        var h      = (int)((double)texture.Size.Y / (double)texture.Size.X * w);
                        var sprite = new ImageSprite(texture, new Rect(new Vector2D(0, 0), new Vector2D(w, h)), new Color(1, 1, 1, 1));
                        layer.Add(sprite, 10);
                        ImageSpriteBackGround = sprite;

                        scriptAPI.__backGroundImagePath = null;
                    }

                    if (scriptAPI.__bgmPath != null)
                    {
                        var bgm = new Emugen.Sound.SoundPlayer(scriptAPI.__bgmPath, 0.20f, true, Emugen.Sound.SoundPlayer.SoundType.BGM);

                        scriptAPI.__bgmPath = null;
                    }

                    if (scriptAPI.__playSE != null)
                    {
                        var se = new Emugen.Sound.SoundPlayer(scriptAPI.__playSE, scriptAPI.__playSEVolume, false, Emugen.Sound.SoundPlayer.SoundType.SE);

                        scriptAPI.__playSE = null;
                    }
                }
            }
        }
Exemple #2
0
        List <Data.Character> retrayPlayerCaracters; // リトライ時の記録・再現用

        public BattleScene(string scriptPath)
        {
            scriptAPI = new ScriptAPI();
            script    = new Emugen.Script.Script <ScriptAPI>(scriptPath, scriptAPI);
            script.Run();

            var data = Data.DataCreater.Instance;

            if (scriptAPI.__bgmPath != null)
            {
                var bgm = new Emugen.Sound.SoundPlayer(scriptAPI.__bgmPath, 0.20f, true, Emugen.Sound.SoundPlayer.SoundType.BGM);
            }

            SetupPlayers();
            SetupEnemys();

            {
                PlayerCards = new UI.PlayerCard.PlayerCards();
                layer.Add(PlayerCards, 30);
            }

            {
                EnemyCards = new UI.EnemyCard.EnemyCards();
                layer.Add(EnemyCards, 20);
            }

            {
                var bmp     = new System.Drawing.Bitmap(scriptAPI.__backGroundImagePath);
                var texture = new Texture(bmp);

                var w      = 1600;
                var h      = (int)((double)bmp.Height / (double)bmp.Width * w);
                var sprite = new ImageSprite(texture, new Rect(new Vector2D(0, 0), new Vector2D(w, h)), new Color(1, 1, 1, 1));
                layer.Add(sprite, 10);
            }
            {
                var skillCards = new UI.SkillCard.SkillCards();
                layer.Add(skillCards, 40);
                SkillCards = skillCards;
            }

            {
                var sprite = new PlaneSprite(new Rect(new Vector2D(20, 100), new Vector2D(200, 1)), new Color(0.5, 1, 1, 1));
                layer.Add(sprite, 10);
            }
            {
                foreach (var chara in data.playerCharacters)
                {
                    PlayerCards.Add(chara);
                }
                PlayerCards.SetupCardPos();
            }
            SetupEnemysCard();

            {
                PlayerCards.OnSelected += (selectCards) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                    {
                        var i = (List <UI.PlayerCard.PlayerCard>)selectCards;
                        if (i[0].character.HP.Now == 0)
                        {
                            // 戦闘不能
                        }
                        else
                        {
                            SkillCards.SetStep(UI.SkillCard.SkillCards.Step.ShowPlayerCharacterSkills, i[0].character);
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            uiStep           = UIStep.SkillSelect;
                            SelectPlayerCard = selectCards[0];
                        }
                    }
                    break;

                    case UIStep.SkillSelect:
                        break;

                    case UIStep.SkillTargetSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;

                            var i = (List <UI.PlayerCard.PlayerCard>)selectCards;
                            //var i = (List<FafTk.UI.EnemyCard.EnemyCard>)selectCards;
                            var targetCharacters = new List <Data.Character>();
                            foreach (var j in i)
                            {
                                targetCharacters.Add(j.character);
                            }

                            SelectPlayerCard.character.Action(SelectSkillCard.actionSkill, targetCharacters);
                        }
                        break;
                    }
                };
            }
            {
                SkillCards.OnSelected += (selectCard) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            uiStep          = UIStep.SkillTargetSelect;
                            SelectSkillCard = selectCard;

                            if (SelectSkillCard.actionSkill.Main.TargetWord.IndexOf("横列") == 0)
                            {
                                var command = SelectSkillCard.actionSkill.Main.TargetWord.Split(' ');

                                EnemyCards.uITargetSelectType        = UI.EnemyCard.EnemyCards.UITargetSelectType.LineHorizontal;
                                EnemyCards.uITargetSelectTypePalams  = new int[] { int.Parse(command[1]), int.Parse(command[2]), int.Parse(command[3]) };
                                PlayerCards.uITargetSelectType       = UI.PlayerCard.PlayerCards.UITargetSelectType.LineHorizontal;
                                PlayerCards.uITargetSelectTypePalams = new int[] { int.Parse(command[1]), int.Parse(command[2]), int.Parse(command[3]) };
                            }
                            else
                            {
                                var command = SelectSkillCard.actionSkill.Main.TargetWord.Split(' ');

                                EnemyCards.uITargetSelectType        = UI.EnemyCard.EnemyCards.UITargetSelectType.One;
                                EnemyCards.uITargetSelectTypePalams  = new int[] { int.Parse(command[1]) };
                                PlayerCards.uITargetSelectType       = UI.PlayerCard.PlayerCards.UITargetSelectType.One;
                                PlayerCards.uITargetSelectTypePalams = new int[] { int.Parse(command[1]) };
                            }
                        }
                        break;

                    case UIStep.SkillTargetSelect:
                        break;
                    }
                };

                SkillCards.OnClose += () =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;
                            var soundPlayer = new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UICancel01, 0.15f, false, Emugen.Sound.SoundPlayer.SoundType.SE);

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;
                        }
                        break;

                    case UIStep.SkillTargetSelect:
                        break;
                    }
                };
            }
            {
                EnemyCards.OnSelected += (selectCards) =>
                {
                    switch (uiStep)
                    {
                    case UIStep.None:
                        break;

                    case UIStep.SkillSelect:
                        break;

                    case UIStep.SkillTargetSelect:
                        if (!isInputEventNowFrame)
                        {
                            isInputEventNowFrame = true;

                            uiStep = UIStep.None;
                            EnemyCards.uITargetSelectType  = UI.EnemyCard.EnemyCards.UITargetSelectType.None;
                            PlayerCards.uITargetSelectType = UI.PlayerCard.PlayerCards.UITargetSelectType.None;

                            //var result = false;

                            var targetCharacters = new List <Character>();
                            var i = (List <UI.EnemyCard.EnemyCard>)selectCards;
                            foreach (var j in i)
                            {
                                targetCharacters.Add(j.character);
                            }
                            var result = SelectPlayerCard.character.Action(SelectSkillCard.actionSkill, targetCharacters);

                            if (result)
                            {
                                new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UISelect01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            }
                            else
                            {
                                new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UICancel01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                            }
                        }

                        break;
                    }
                };
            }
        }
Exemple #3
0
        public void Update()
        {
            if (HP.Now == 0)
            {
                return;
            }

            elementTimer++;
            if (elementTimer >= elementTimerMax)
            {
                elementTimer = 0;


                var elements = ElementLing.NextElements();
                if (elements != null)
                {
                    if (true)
                    {
                        var soundPlayer = new Emugen.Sound.SoundPlayer("data/se/システム音4(1秒).mp3", 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                    }

                    foreach (var element in elements)
                    {
                        Elements.Add(element);
                        if (playerCard != null)
                        {
                            playerCard.AddElement(element);
                        }
                        if (enemyCard != null)
                        {
                            enemyCard.AddElement(element);
                        }
                    }

                    var elementOver = Elements.Count - 5;
                    if (elementOver > 0)
                    {
                        for (var i = 0; i < elementOver; i++)
                        {
                            Elements.RemoveAt(0);
                            if (playerCard != null)
                            {
                                playerCard.RemoveElement(0);
                            }
                            if (enemyCard != null)
                            {
                                enemyCard.RemoveElement(0);
                            }
                        }
                    }
                }
            }

            // 敵である場合のAI処理
            if (enemyCard != null)
            {
                if ((Elements.Count > 0) && (!DataCreater.Instance.IsPlayerCharacterAllDead()))
                {
                    ActionSkill targetAction = null;
                    foreach (var action in Actions)
                    {
                        if (Element.IsUsable(Elements, action.Cost))
                        {
                            targetAction = action;
                        }
                    }

                    if (targetAction != null)
                    {
                        if (targetAction.Main.TargetWord.IndexOf("横列") == 0)
                        {
                            // 範囲攻撃
                            var targetCharacters = new List <Character>();
                            foreach (var i in DataCreater.Instance.playerCharacters)
                            {
                                targetCharacters.Add(i);
                            }
                            Action(targetAction, targetCharacters);
                        }
                        else
                        {
                            // todo : パーティメンバーの前半を優先する…
                            var j = random.Next(DataCreater.Instance.playerCharacters.Count);
                            var targetCharacter = DataCreater.Instance.playerCharacters[j];
                            while (targetCharacter.HP.Now <= 0)
                            {
                                j = random.Next(DataCreater.Instance.playerCharacters.Count);
                                targetCharacter = DataCreater.Instance.playerCharacters[j];
                            }

                            var targetCharacters = new List <Character>();
                            targetCharacters.Add(targetCharacter);
                            Action(targetAction, targetCharacters);
                        }
                    }
                }
            }
        }
Exemple #4
0
        public override void Update()
        {
            isInputEventNowFrame = false;
            //uiStep
            switch (uiStep)
            {
            case UIStep.None:
                break;

            case UIStep.SkillSelect:
                break;

            case UIStep.SkillTargetSelect:
            {
                if ((InputCore.Instance.GetKeyEventType(InputCore.KeyEventCode.MouseRightButton) == InputCore.KeyEventType.Up))
                {
                    if (!isInputEventNowFrame)
                    {
                        isInputEventNowFrame = true;
                        uiStep = UIStep.None;
                        new Emugen.Sound.SoundPlayer(MainConfig.SoundEffect.UICancel01, 0.10f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                    }
                }
            }
            break;
            }

            if (battleStep == BattleStep.Main)
            {
                Data.DataCreater.Instance.Update();                                // 行動シンボルの増加を戦闘中のみに限定するためのif文
            }
            SkillCards.Update();
            PlayerCards.Update();
            EnemyCards.Update();


            switch (battleStep)
            {
            case BattleStep.Main:
                if (actionTimer == 0)
                {
                    Action         action    = null;
                    Data.Character character = null;
                    foreach (var i in DataCreater.Instance.playerCharacters)
                    {
                        if (i.ActionStock != null)
                        {
                            action    = i.ActionStock;
                            character = i;
                        }
                    }
                    foreach (var i in DataCreater.Instance.enemyCharacters)
                    {
                        if (i.ActionStock != null)
                        {
                            action    = i.ActionStock;
                            character = i;
                        }
                    }
                    if (action != null)
                    {
                        action();
                        character.ActionStock = null;
                    }
                    actionTimer = actionTimerMax;
                }
                else
                {
                    actionTimer--;
                }

                if (EnemyCards.Count == 0)
                {
                    battleStep = BattleStep.End;

                    var bgm = new Emugen.Sound.SoundPlayer(Config.MainConfig.BattleScene.BGMStageClear, 0.20f, true, Emugen.Sound.SoundPlayer.SoundType.BGM);
                }
                else if (DataCreater.Instance.IsPlayerCharacterAllDead())
                {
                    battleStep = BattleStep.LostClickWait;

                    var choice = new UI.Talk.Choice(new string[] { "もう一度戦う", "タイトルに戻る" });
                    layer.Add(choice, 200);

                    LostClickWaitChoice = choice;
                    var bgm = new Emugen.Sound.SoundPlayer(Config.MainConfig.BattleScene.BGMGameOver, 0.20f, true, Emugen.Sound.SoundPlayer.SoundType.BGM);
                }
                else
                {
                    var data = Data.DataCreater.Instance;

                    var tmp = new List <Data.Character>();

                    foreach (var i in data.enemyCharacters.Where(x => x.HP.Now <= 0))
                    {
                        tmp.Add(i);
                    }

                    foreach (var i in tmp)
                    {
                        EnemyCards.Del(i.enemyCard);
                        data.enemyCharacters.Remove(i);
                    }
                }
                break;

            case BattleStep.LostClickWait:
            {
                LostClickWaitChoice.Update();

                var input = Emugen.Input.InputCore.Instance;
                if ((input.GetKeyEventType(Emugen.Input.InputCore.KeyEventCode.MouseLeftButton) == Emugen.Input.InputCore.KeyEventType.Up))
                {
                    var tmp = LostClickWaitChoice.GetChoiseText();

                    switch (tmp)
                    {
                    case "もう一度戦う":
                    {
                        var data = Data.DataCreater.Instance;
                        var i    = 0;
                        foreach (var v in retrayPlayerCaracters)
                        {
                            var chara = data.playerCharacters[i];
                            chara.HP.Now          = v.HP.Now;
                            chara.elementTimer    = v.elementTimer;
                            chara.ElementLing.pos = v.ElementLing.pos;
                            chara.Elements.Clear();
                            foreach (var element in v.Elements)
                            {
                                chara.Elements.Add(new Element(element.Name));
                            }
                            i++;
                        }
                        WindowManager.nextScene = new Scene.BattleScene(this.script.Path);
                    }
                    break;

                    case "タイトルに戻る":
                    {
                        WindowManager.nextScene = new Scene.TitleScene();
                    }
                    break;
                    }
                }
            }
            break;

            case BattleStep.End:
            {
                var input = Emugen.Input.InputCore.Instance;
                if ((input.GetKeyEventType(Emugen.Input.InputCore.KeyEventCode.MouseLeftButton) == Emugen.Input.InputCore.KeyEventType.Up))
                {
                    WindowManager.nextScene = new Scene.TalkScene(scriptAPI.__nextTalkScriptPath);
                }
            }
            break;
            }
        }
Exemple #5
0
        public void Update()
        {
            switch (step)
            {
            case Step.None:
            {
                var mouse = Emugen.Input.InputCore.Instance.mousePosition;
                //if (((position.X <= mouse.X) && (mouse.X < (position.X + size.X))) &&
                //     ((position.Y <= mouse.Y) && (mouse.Y < (position.Y + size.Y))))
                if (mySprites.mouseOn.Rect.IsHit(mouse))
                {
                    if (!isMouseOn)
                    {
                        isMouseOn = true;
                        mySprites.mouseOn.IsDraw = true;
                    }
                }
                else
                {
                    if (isMouseOn)
                    {
                        isMouseOn = false;
                        mySprites.mouseOn.IsDraw = false;
                    }
                }

                if (damageTimer != -1)
                {
                    damageTimer++;
                    if (damageTimerMax < damageTimer)
                    {
                        damageTimer = -1;
                    }
                    SetPosition(position);         // Todo : 毎アップデート時に呼び出さないといけない?
                }

                {
                    var val = (double)character.HP.Now / (double)character.HP.Max;
                    mySprites.hpBar.Rect.Size.X = HPBarFrameWidth * val;
                }
            }
            break;

            case Step.Lost:
            {
                {
                    var val = (double)character.HP.Now / (double)character.HP.Max;
                    mySprites.hpBar.Rect.Size.X = HPBarFrameWidth * val;
                }

                mySprites.mouseOn.IsDraw = false;
                stepTimer++;
                if (damageTimer != -1)
                {
                    damageTimer++;
                    if (damageTimerMax < damageTimer)
                    {
                        damageTimer = -1;
                    }
                    SetPosition(position);         // Todo : 毎アップデート時に呼び出さないといけない?
                }

                var soundTime   = 10.0;
                var EndWaitTime = 15.0;
                if (stepTimer >= 10)
                {
                    var v = 1.0 - (stepTimer - soundTime) / EndWaitTime;
                    mySprites.face.Color.A   = v;
                    mySprites.shadow.Color.A = v;

                    mySprites.hpBarFrame.Color.A = v;
                    mySprites.hpBar.Color.A      = v;
                }

                if (stepTimer == soundTime)
                {
                    var s = new Emugen.Sound.SoundPlayer(Config.MainConfig.BattleScene.SoundEffectCharacterKO, 0.6f, false, Emugen.Sound.SoundPlayer.SoundType.SE);
                }
                else if (stepTimer >= (soundTime + EndWaitTime))
                {
                    isLost = true;
                }
            }
            break;
            }

            if (actionEffectUpdate != null)
            {
                SetPosition(position);
            }

            if (mouseOnTarget.IsDraw)
            {
                var max = 30.0;
                mouseOnTarget.Color.A = Math.Sin((double)mouseOnTargetFadeTimer * 360 / max * Math.PI / 180) * 0.5 + 0.5;

                mouseOnTargetFadeTimer++;
                if (mouseOnTargetFadeTimer > max)
                {
                    mouseOnTargetFadeTimer = 0;
                }
            }

            autoDisposer.Update();
        }