コード例 #1
0
ファイル: BattleAnim.cs プロジェクト: SkankinGarbage/mgne
    public async Task PlayAsync(BattleView view, List <Unit> targets)
    {
        PlaySound();
        await PlayInternalAsync(view, targets);

        view.framePool.DisposeAll();
    }
コード例 #2
0
        public static void Summon(this Unit unit, Vector2Int position)
        {
            if (BattleManager.GetUnit(position) == null)
            {
                unit.OnPosition.after.RemoveListener(BattleView.MoveObject);
                unit.Position = position;
                // FieldManager.GetTile(position).SetUnit(unit);

                FieldManager.GetTile(position).OnTile(unit);
                BattleManager.instance.AllUnits.Add(unit);
                unit.ActionRate = 0;

                if (unit.Alliance == UnitAlliance.Party)
                {
                    GameManager.AddPartyUnit(unit);
                }

                BattleView.MakeUnitObject(unit);

                // 유닛 소환시 DownStair Button 활성화 검사
                // Model.Tiles.DownStair.CheckPartyDownStair();
            }
            else
            {
                Debug.LogWarning("이미 위치에 유닛이 존재합니다.");
            }
        }
コード例 #3
0
 public PlayerController(tunbasedbattlerContext dbContext)
 {
     playerService = new PlayerService(dbContext);
     playerView    = new PlayerView();
     battleView    = new BattleView();
     player        = new PlayerViewModel();
 }
コード例 #4
0
 public ReplayClient(string path, string name) : base(name)
 {
     Battle     = PBEBattle.LoadReplay(path);
     BattleView = new BattleView(this);
     ShowAllPokemon();
     StartPacketThread();
 }
コード例 #5
0
        private void OnPacketReceived(object sender, IPBEPacket packet)
        {
            Debug.WriteLine($"Packet received (\"{packet.GetType().Name}\")");
            switch (packet)
            {
            case PBEMatchCancelledPacket _:
            {
                BattleView.AddMessage("Match cancelled!", messageBox: false);
                break;
            }

            case PBEPlayerJoinedPacket pjp:
            {
                int id = pjp.BattleId;
                if (pjp.IsMe)
                {
                    BattleId = id;
                    if (id < 2)
                    {
                        Team           = Battle.Teams[id];
                        ShowRawValues0 = id == 0;
                        ShowRawValues1 = id == 1;
                    }
                }
                else
                {
                    BattleView.AddMessage(string.Format("{0} joined the game.", pjp.TrainerName), messageBox: false);
                }
                if (id < 2)
                {
                    Battle.Teams[id].TrainerName = pjp.TrainerName;
                }
                Send(new PBEResponsePacket());
                break;
            }

            case PBEPartyRequestPacket _:
            {
                Send(new PBEPartyResponsePacket(_teamShell));
                break;
            }

            case PBEActionsRequestPacket _:
            case PBESwitchInRequestPacket _:
            case PBEWinnerPacket _:
            {
                Battle.Events.Add(packet);
                StartPacketThread();
                Send(new PBEResponsePacket());
                break;
            }

            default:
            {
                Battle.Events.Add(packet);
                Send(new PBEResponsePacket());
                break;
            }
            }
        }
コード例 #6
0
    public override void UseEffect(Character caster, Character target, BattleView view)
    {
        var character = receiver == Receiver.Caster ? caster : target;

        character.AddBuff(new BuffInfo(SubStat.PhysicalDamage, turnCounts, damageChangeFlat, damageChangePercentage, damageIncPerLifeLost));
        character.AddBuff(new BuffInfo(SubStat.PhysicalDamage, turnCounts, damageChangeFlat, damageChangePercentage, damageIncPerLifeLost));
    }
コード例 #7
0
    private IEnumerator OpenRoutine()
    {
        var textbox = MapOverlayUI.Instance().textbox;

        if (encounterKey != null && encounterKey.Length > 0)
        {
            var party = IndexDatabase.Instance().Parties.GetData(encounterKey);
            yield return(BattleView.SpawnBattleRoutine(party));
        }
        else if (itemKey != null && itemKey.Length > 0)
        {
            if (isCollectable)
            {
                var collectable = IndexDatabase.Instance().Collectables.GetData(itemKey);
                Global.Instance().Audio.PlaySFX(sfxKey);
                Global.Instance().Data.Collectables.AddItem(collectable);
                Global.Instance().Data.SetSwitch(SwitchName, true);
                UpdateSprite();
                if (collectable.chestName != null && collectable.chestName.Length > 0)
                {
                    yield return(textbox.SpeakRoutine("Retrieved " + UIUtils.GlyphifyString(collectable.chestName) + "."));
                }
                else
                {
                    yield return(textbox.SpeakRoutine("Retrieved a " + UIUtils.GlyphifyString(collectable.displayName) + "."));
                }
            }
            else
            {
                var item = new CombatItem(IndexDatabase.Instance().CombatItems.GetData(itemKey));
                if (Global.Instance().Data.Inventory.IsFull())
                {
                    yield return(textbox.SpeakRoutine("No room for more items."));
                }
                else
                {
                    Global.Instance().Audio.PlaySFX(sfxKey);
                    Global.Instance().Data.Inventory.Add(item);
                    Global.Instance().Data.SetSwitch(SwitchName, true);
                    UpdateSprite();
                    if (isKey)
                    {
                        yield return(textbox.SpeakRoutine("Retrieved the " + item.Name + "."));
                    }
                    else
                    {
                        yield return(textbox.SpeakRoutine("Retrieved a " + item.Name + "."));
                    }
                }
            }
            yield return(textbox.DisableRoutine());
        }
        else
        {
            yield return(textbox.SpeakRoutine("Empty."));

            yield return(textbox.DisableRoutine());
        }
    }
コード例 #8
0
ファイル: Skill.cs プロジェクト: moto2002/dungeon_adventurer
 public void UseSkill(Character caster, BattleView view)
 {
     foreach (var skill in SkillEffects)
     {
         skill.effect.UseEffect(caster, view);
     }
     RemainingCooldown = cooldown;
 }
コード例 #9
0
    public void CheckForEncounterOnStep()
    {
        var steps = Global.Instance().Data.GetVariable(StepsSinceEncounterVariable);

        Global.Instance().Data.IncrementVariable(StepsSinceEncounterVariable);

        // valid? maybe we're not on the right terrain
        if (steps <= 0)
        {
            return;
        }

        // have to go at least half the average steps
        if (steps < AverageStepsToEncounter / 2)
        {
            return;
        }

        // after that you're equally likely to see an encounter each step
        if (Random.Range(0, AverageStepsToEncounter / 2) > 0)
        {
            return;
        }

        // okay, you should see something
        var encounters = GetEncounters();

        if (encounters == null)
        {
            return;
        }
        var totalWeight = encounters.Aggregate(0, (acc, data) => acc + data.weight);
        var roll        = Random.Range(0, totalWeight);
        EncounterSetMemberData encounter = null;

        foreach (var possible in encounters)
        {
            if (roll < possible.weight)
            {
                encounter = possible;
                break;
            }
            else
            {
                roll -= possible.weight;
            }
        }

        var party = new Party(encounter.encounter);

        Global.Instance().Data.SetVariable(StepsSinceEncounterVariable, 0);
        Global.Instance().Maps.Avatar.PauseInput();
        Global.Instance().StartCoroutine(CoUtils.RunWithCallback(BattleView.SpawnBattleRoutine(party), () => {
            Global.Instance().Maps.Avatar.UnpauseInput();
        }));
    }
コード例 #10
0
    private IEnumerator RenderRoutine(BattleView view, List <Unit> targets)
    {
        var routines = new List <IEnumerator>();

        foreach (var step in data.steps)
        {
            routines.Add(RenderStepRoutine(step, view, targets, new Vector2(0, 0)));
        }
        yield return(CoUtils.RunParallel(routines.ToArray(), view));
    }
コード例 #11
0
 public ActionsBuilder(BattleView bv, PBETrainer trainer, Action <PBETurnAction[]> onActionsReady)
 {
     _bv = bv;
     bv.Actions.ActionsBuilder = this;
     _onActionsReady           = onActionsReady;
     _pkmn    = trainer.ActiveBattlersOrdered.ToArray();
     _actions = new PBETurnAction[_pkmn.Length];
     _standBy = new PBEBattlePokemon?[_pkmn.Length];
     ActionsLoop();
 }
コード例 #12
0
    public override void UseEffect(Character caster, Character target, BattleView view)
    {
        if (attackMode == AttackMode.Target)
        {
            Debug.LogWarning("use other UseEffect(Character, Character, Character)");
            return;
        }

        view.ForceAttack(target, damagePercentage, damageType, attackMode);
    }
コード例 #13
0
 public static void UnSummon(this Obtainable obtainable)
 {
     if (obtainable.Position == null)
     {
         return;
     }
     FieldManager.GetTile((Vector2Int)obtainable.Position).SetObtainable(null);
     BattleView.DestroyObtainableObject(obtainable);
     BattleManager.instance.AllObtainables.Remove(obtainable);
 }
コード例 #14
0
 public override void OnSceneLoaded(Scene scene, LoadSceneMode loadMode)
 {
     base.OnSceneLoaded(scene, loadMode);
     Debug.Log("战斗场景加载完成");
     if (battleView == null)
     {
         battleView = new BattleView();
         battleView.Show();
         GamePublisher.Publish(EventType.battle_music_open);
     }
 }
コード例 #15
0
 public SwitchesBuilder(BattleView bv, byte amount, Action <PBESwitchIn[]> onSwitchesReady)
 {
     _bv = bv;
     bv.Actions.SwitchesBuilder = this;
     _onSwitchesReady           = onSwitchesReady;
     SwitchesRequired           = amount;
     _switches        = new PBESwitchIn[amount];
     _standBy         = new PBEBattlePokemon[amount];
     _positionStandBy = new PBEFieldPosition[amount];
     SwitchesLoop();
 }
コード例 #16
0
    private IEnumerator RenderStripRoutine(BattleView view, List <Unit> targets, Vector2 offset)
    {
        var routines = new List <IEnumerator>();

        foreach (var step in data.anim.steps)
        {
            routines.Add(RenderStepRoutine(step, view, targets, offset, step != data.anim.steps[data.anim.steps.Length - 1]));
        }
        yield return(CoUtils.RunParallel(routines.ToArray(), view));

        finished += 1;
    }
コード例 #17
0
ファイル: BattleMediator.cs プロジェクト: yty/miaobox_open
    public override void HandleNotification(INotification notification)
    {
        BattleView uview = ViewComponent as BattleView;

        switch (notification.Name)
        {
        case BATTLE_CAT_GROUP_INFO:
            Debug.Log("init battle view ");
            uview.ShowCurrentCatGroup(notification.Body);
            break;
        }
    }
コード例 #18
0
ファイル: Skill.cs プロジェクト: moto2002/dungeon_adventurer
 public void UseSkill(Character caster, Character[] targets, BattleView view)
 {
     foreach (var target in targets)
     {
         foreach (var skill in SkillEffects)
         {
             skill.effect.UseEffect(caster, target, view);
         }
     }
     RemainingCooldown   = cooldown;
     caster.CurrentMana -= manaCost;
 }
コード例 #19
0
    protected override async Task PlayInternalAsync(BattleView view, List <Unit> targets)
    {
        var routines = new List <IEnumerator>();
        var duration = (float)data.count / data.concurrent;

        for (var i = 0; i < data.count; i += 1)
        {
            float start = i * duration / data.count;
            routines.Add(RenderStripRoutine(view, targets, start));
        }
        await CoUtils.RunParallel(routines.ToArray(), view);
    }
コード例 #20
0
    public override void UseEffect(Character caster, Character target, BattleView view)
    {
        float amount = UnityEngine.Random.Range(damageMin, damageMax + 1);

        amount = amount + amount * (caster.Sub.MagicDamage / 100f);

        var appliedDamage = target.ApplyDamage(caster, type, amount, ignoreResistance);

        if (lifeSteal != 0)
        {
            caster.ApplyHeal((int)(appliedDamage * lifeSteal));
        }
    }
コード例 #21
0
ファイル: Heal.cs プロジェクト: moto2002/dungeon_adventurer
    public override void UseEffect(Character caster, Character target, BattleView view)
    {
        switch (receiver)
        {
        case Receiver.Target:
            target.ApplyHeal(target.MaxLife * valuePercentage + valueFlat);
            break;

        case Receiver.Caster:
            caster.ApplyHeal(caster.MaxLife * valuePercentage + valueFlat);
            break;
        }
    }
コード例 #22
0
 public SinglePlayerClient(PBEBattle b, string name) : base(name)
 {
     Battle            = b;
     Trainer           = b.Trainers[0];
     BattleView        = new BattleView(this);
     b.OnNewEvent     += SinglePlayerBattle_OnNewEvent;
     b.OnStateChanged += SinglePlayerBattle_OnStateChanged;
     ShowAllPokemon();
     new Thread(b.Begin)
     {
         Name = ThreadName
     }.Start();
 }
コード例 #23
0
        public void OnInit(int index)
        {
            itemImage          = transform.Find("MaskImage/ItemImage").GetComponent <Image>();
            itemImageMask      = transform.Find("MaskImage/ItemImageMask").GetComponent <Image>();
            unitItemButton     = transform.Find("Background").GetComponent <Button>();
            squadNameText      = transform.Find("SquadNameText").GetComponent <Text>();
            emberCost          = transform.Find("EmberCostText").GetComponent <Text>();
            countDownTimerText = transform.Find("TimerText").GetComponent <Text>();

            battleView = transform.root.GetComponentInChildren <BattleView>();
            unitItemButton.onClick.AddListener(OnUnitItemClicked);
            buttonIndex = index;
        }
コード例 #24
0
        public SinglePlayerClient(PBEBattleFormat battleFormat, PBESettings settings, IReadOnlyList <PBETrainerInfo> ti0, IReadOnlyList <PBETrainerInfo> ti1, string name) : base(name)
        {
            var b = new PBEBattle(battleFormat, settings, ti0, ti1, battleTerrain: PBERandom.RandomBattleTerrain());

            Battle            = b;
            Trainer           = b.Trainers[0];
            BattleView        = new BattleView(this);
            b.OnNewEvent     += SinglePlayerBattle_OnNewEvent;
            b.OnStateChanged += SinglePlayerBattle_OnStateChanged;
            new Thread(b.Begin)
            {
                Name = "Battle Thread"
            }.Start();
        }
コード例 #25
0
        public override void Init(IModule module)
        {
            base.Init(module);

            BattleView viewScript = (BattleView)InstantiateView <BattleView>("Battle/Prefabs/BattleView");

            RegisterView(viewScript);

            controller      = new BattleController();
            controller.view = viewScript;
            RegisterController(controller);

            HideBackBtn();
        }
コード例 #26
0
 public void OnTimer()
 {
     if (done)
     {
         return;
     }
     if (GameController.Instance.battleEventLoaded == false)
     {
         return;
     }
     done = true;
     GameController.Instance.ProcessBattleText(this);
     // Scroll To End
     BattleView.ScrollTo(BattleLogData[BattleLogData.Count - 1], ScrollToPosition.End, false);
 }
コード例 #27
0
 public SinglePlayerClient(PBEBattle b, string name) : base(name)
 {
     Battle            = b;
     Trainer           = b.Trainers[0];
     BattleView        = new BattleView(this);
     b.OnNewEvent     += SinglePlayerBattle_OnNewEvent;
     b.OnStateChanged += SinglePlayerBattle_OnStateChanged;
     _ais              = new PBEDDAI[b.Trainers.Count - 1];
     for (int i = 0; i < _ais.Length; i++)
     {
         _ais[i] = new PBEDDAI(b.Trainers[i + 1]);
     }
     ShowAllPokemon();
     CreateBattleThread(b.Begin);
 }
コード例 #28
0
    public override void UseEffect(Character caster, Character target, BattleView view)
    {
        switch (conditionType)
        {
        case ConditionType.Marker:
            if (!caster.GetAppliedMarkers().ContainsKey(conditionMarker))
            {
                return;
            }
            break;

        case ConditionType.Life:
            if (!(caster.CurrentLife <= caster.MaxLife * conditionValue))
            {
                return;
            }
            break;

        case ConditionType.Status:
            if (!caster.GetAppliedStatuses().ContainsKey(conditionStatus))
            {
                return;
            }
            break;
        }

        var amount = 0f;

        if (caster.GetType() == typeof(Hero))
        {
            var hero = caster as Hero;
            amount = UnityEngine.Random.Range(hero.MinPhysicalDamage, hero.MaxPhysicalDamage + 1);
        }
        else
        {
            var monster = target as Monster;
            amount = UnityEngine.Random.Range(monster.minPhysicalDamage, monster.maxPhysicalDamage + 1);
        }

        amount = (int)(amount * damagePercentage);

        var appliedDamage = target.ApplyDamage(caster, type, amount, ignoreResistance);

        if (lifeSteal != 0)
        {
            caster.ApplyHeal(appliedDamage);
        }
    }
コード例 #29
0
    private IEnumerator RenderStripRoutine(BattleView view, List <Unit> targets, float timeOffset)
    {
        yield return(CoUtils.Wait(timeOffset));

        var routines = new List <IEnumerator>();
        var span     = data.span / data.granularity;
        var offset   = new Vector2(
            data.granularity * Random.Range(0, span + 1) - data.span / 2,
            data.granularity * Random.Range(0, span + 1) - data.span / 2);

        foreach (var step in data.anim.steps)
        {
            routines.Add(RenderStepRoutine(step, view, targets, offset));
        }
        yield return(CoUtils.RunParallel(routines.ToArray(), view));
    }
コード例 #30
0
ファイル: UnitCardItem.cs プロジェクト: liushengchao112/Ember
        public void InitComponent()
        {
            //MessageDispatcher.AddObserver( ToggleSelect, MessageType.SelectObjectInBattle );
            MessageDispatcher.AddObserver(SelectFeedback, MessageType.BattleUIOperationFeedBack);
            type             = (BattleUIControlType)DataManager.GetInstance().unitOperationChoose;
            itemImage        = transform.Find("ItemImage").GetComponent <Image>();
            selectionOverlay = transform.Find("ItemImage/SelectionOverlay").gameObject;
            unitHealth       = transform.Find("Item_HP").GetComponent <Image>();
            clickButton      = transform.Find("OnClickButton").GetComponent <Button>();
            unitNameText     = transform.Find("UnitName").GetComponent <Text>();
            unitHealth.gameObject.SetActive(false);
            selectionOverlay.SetActive(false);
            battleView = transform.root.GetComponentInChildren <BattleView>();

            shakeCark = gameObject.AddComponent <ShakeCard>();
            clickButton.AddListener(OnClickButton);
        }
コード例 #31
0
    public IEnumerator PlayEffects(List<BattleActionResult.EffectOnTarget> effectsOnTarget, BattleView battleView)
    {
        for (int i = 0; i < effectsOnTarget.Count; ++i)
        {
            var effectOnTarget = effectsOnTarget[i];

            if (effectOnTarget.isEmptyEffect)
            {
                continue;
            }

            var unit = battleView.GetBattleUnit(effectOnTarget.target);

            if (i != effectsOnTarget.Count - 1)
            {
                StartCoroutine(PlayEffectOnTarget(unit, effectOnTarget));
            }
            else
            {
                yield return StartCoroutine(PlayEffectOnTarget(unit, effectOnTarget));
            }
        }
    }
コード例 #32
0
    public virtual IEnumerator PlaySkillSequence(BattleUnitController actor, BattleView battleView, BattleActionResult actionResult)
    {
        Vector3 targetPosition = new Vector3();
        BattleUnitController targetedUnit = null;
        TileController targetedTile = null;

        if (actionResult.targetCharacter != null)
        {
            targetedUnit = battleView.GetBattleUnit(actionResult.targetCharacter);
            targetPosition = targetedUnit.transform.position;
        }
        else
        {
            targetedTile = battleView.GetTileAtMapPosition(actionResult.targetPosition);
            targetPosition = targetedTile.transform.position;
        }

        var actorOrigPosition = actor.transform.position;

        yield return StartCoroutine(actor.MoveToAttackPosition(targetedUnit, targetPosition));

        StartCoroutine(actor.AnimateAttack());

        for (int i = 0; i < actionResult.allSkillEffectResult.Count; ++i)
        {
            var delay = this.GetDelayedKeyFrames(i);
            yield return StartCoroutine(this.WaitForFrames(delay));

            var skillEffectResult = actionResult.allSkillEffectResult[i];

            yield return this.PlayEffects(skillEffectResult.effectsOnTarget, battleView);
        }

        yield return StartCoroutine(actor.ReturnToPosition(actorOrigPosition));

        Destroy(this.gameObject);
    }
コード例 #33
0
 //試行回数のチェック
 public static int TrialCheck(this CounterItem item, BattleView view)
 {
     //有効ではない場合
     if (!item.Enabled) return 0;
     //全マップモードの場合
     if (item.AllMap) return 1;
     //個別マップモードの場合
     else
     {
         if (item.AreaNo != view.AreaID) return 0;
         if (item.MapNo != view.MapID) return 0;
         return 1;
     }
 }
コード例 #34
0
 //チェックしてカウント
 public static void CheckAndCount(this CounterItem item, BattleView view)
 {
     if (item.AutoReset.IsAutoResetActivated(item.LastUpdated)) item.Reset();
     item.Value += Check(item, view);
     item.LastUpdated = DateTime.Now;
 }
コード例 #35
0
 //条件を満たしたかのチェック
 public static int Check(this CounterItem item, BattleView view)
 {
     if (!item.Enabled) return 0;
     if (!item.AllMap)
     {
         if (item.AreaNo != view.AreaID) return 0;
         if (item.MapNo != view.MapID) return 0;
     }
     switch (item.Mode)
     {
         case CounterMode.None:
             return 0;
         case CounterMode.BossWin:
             bool iswin = view.WinRank == "S" || view.WinRank == "A" || view.WinRank == "B";
             if (iswin && (view.BossFlag == 2)) return 1;
             else return 0;
         case CounterMode.BossRankS:
             if ((view.WinRank == "S") && (view.BossFlag == 2)) return 1;
             else return 0;
         case CounterMode.Boss:
             if (view.BossFlag == 2) return 1;
             else return 0;
         case CounterMode.RankS:
             if (view.WinRank == "S") return 1;
             else return 0;
         case CounterMode.DestroyCarrier:
             //空母リスト
             var query = from p in APIMaster.MstShips
                         where p.Value.IsCarrier
                         select p.Value.api_id;
             int cnt = 0;
             for (int i = 0; i < view.EnemyShipID.Length; i++)
             {
                 if (view.IsEnemySank == null) continue;//NULLチェック
                 if (!view.IsEnemySank[i]) continue;//沈んでない場合
                 if (query.Contains(view.EnemyShipID[i])) cnt++;//沈んでいてかつ空母の場合
             }
             return cnt;
         case CounterMode.DestroySupplyShip:
             var querysupp = from p in APIMaster.MstShips
                             where p.Value.IsSupplier
                             select p.Value.api_id;
             int cntsup = 0;
             for (int i = 0; i < view.EnemyShipID.Length; i++)
             {
                 if (view.IsEnemySank == null) continue;//NULLチェック
                 if (!view.IsEnemySank[i]) continue;//沈んでない場合
                 if (querysupp.Contains(view.EnemyShipID[i])) cntsup++;
             }
             return cntsup;
         case CounterMode.Lose:
             if (view.WinRank == "C" || view.WinRank == "D" || view.WinRank == "E") return 1;
             else return 0;
         case CounterMode.BossLose:
             if (view.BossFlag != 2) return 0;
             if (view.WinRank == "C" || view.WinRank == "D" || view.WinRank == "E") return 1;
             else return 0;
         case CounterMode.BossOverA:
             if (view.BossFlag != 2) return 0;
             if (view.WinRank == "S" || view.WinRank == "A") return 1;
             else return 0;
         default:
             throw new ArgumentException();
     }
 }