Пример #1
0
    protected override IEnumerator InternalExecuteRoutine(Effector effect, Result <bool> result)
    {
        DirectionCursor cursor = battle.SpawnDirectionCursor(actor.location);

        Result <EightDir> dirResult = new Result <EightDir>();

        yield return(cursor.SelectTargetDirRoutine(dirResult, actor, (Vector2Int v) => {
            float d = Mathf.Abs(actor.battler.transform.position.y - map.terrain.HeightAt(v.x, v.y));
            return d <= BattleEvent.AttackHeightMax && DefaultSelectRule(effect)(v);
        }, true));

        battle.DespawnDirCursor();

        if (dirResult.canceled)
        {
            result.Cancel();
        }
        else
        {
            float d = Mathf.Abs(actor.battler.transform.position.y -
                                map.terrain.HeightAt(actor.battler.location + dirResult.value.XY()));
            if (d <= BattleEvent.AttackHeightMax)
            {
                yield return(effect.ExecuteDirectionRoutine(dirResult.value));

                result.value = true;
            }
            else
            {
                result.Cancel();
            }
        }
    }
Пример #2
0
    // === INITIALIZATION ==========================================================================

    public void Start()
    {
        if (pcEvent != null)
        {
            Global.Instance().Maps.pc = pcEvent.GetComponent <PCEvent>();
        }
        else
        {
            pcEvent = Global.Instance().Maps.pc.GetComponent <BattleEvent>();
        }

        pc           = new BattleUnit(Instantiate(pcEvent.unitSerialized), this);
        pcEvent.unit = pc;
        units        = new List <BattleUnit>()
        {
            pcEvent.unit
        };
        battlers = new Dictionary <BattleUnit, BattleEvent>();
        battlers[pcEvent.unit] = pcEvent;

        cursor = Cursor.GetInstance();
        cursor.gameObject.transform.SetParent(GetComponent <Map>().objectLayer.transform);
        cursor.gameObject.SetActive(false);

        dirCursor = DirectionCursor.GetInstance();
        dirCursor.gameObject.transform.SetParent(GetComponent <Map>().objectLayer.transform);
        dirCursor.gameObject.SetActive(false);

        ui = FindObjectOfType <RogueUI>();
        ui.Populate();

        AddUnitsFromMap();

        if (immediateMode)
        {
            StartCoroutine(CoUtils.RunAfterDelay(0.1f, () => {
                StartCoroutine(BattleRoutine());
            }));
        }
    }