Ejemplo n.º 1
0
    public Transform AddUnit(EnumCharacterCamp t, string name, Sprite[] stay, Sprite[] move, Vector2Int tilePos)
    {
        Transform  root = GetUnitTransformRoot(t);
        GameObject unit = new GameObject(name);
        GameObject hp   = new GameObject("hp");

        unit.transform.SetParent(root, false);
        var hp_sp = hp.AddComponent <SpriteRenderer>();

        Utils.GameUtil.DelayFuncEndOfFrame(() => hp_sp.size = new Vector2(HP_WIDTH, HP_HEIGHT));
        hp_sp.drawMode     = SpriteDrawMode.Sliced;
        hp_sp.sortingOrder = 1;
        hp_sp.sprite       = BarSprite;
        hp_sp.color        = ConstTable.CAMP_COLOR(t, 1.0f);
        hp.transform.SetParent(unit.transform, false);
        hp.transform.localPosition = new Vector3(-0.50f, 0.08f, 0);
        hp.transform.localScale    = Vector3.one;
        hp.SetActive(false);
        var sr = unit.AddComponent <SpriteRenderer>();

        sr.sharedMaterial = UnitMaterials[(int)t];
        MultiSpriteAnimator anim = unit.AddComponent <MultiSpriteAnimator>();

        anim.SetAnimatorContent(MultiSpriteAnimator.EAnimateType.Stay, stay);
        anim.SetAnimatorContent(MultiSpriteAnimator.EAnimateType.Move, move);
        anim.SetActiveAnimator(MultiSpriteAnimator.EAnimateType.Stay);
        PositionMath.SetUnitLocalPosition(unit.transform, tilePos);
        keyValue.Add(tilePos, anim);
        return(unit.transform);
    }
Ejemplo n.º 2
0
 public void NextTurn()
 {
     gameMode.LockInput(true);
     if (TurnIndex == 0)
     {
         TurnIndex++;
         TurnCamp = EnumCharacterCamp.Player;
         EnableAllPlayerAction();
         CheckTurnEvent(TurnIndex, TurnCamp);
         return;
     }
     if (TurnCamp == EnumCharacterCamp.Player)
     {
         TurnCamp = EnumCharacterCamp.Enemy;
         DisableAllPlayerAction();
         CheckTurnEvent(TurnIndex, TurnCamp);
     }
     else
     {
         TurnIndex++;
         TurnCamp = EnumCharacterCamp.Player;
         EnableAllPlayerAction();
         CheckTurnEvent(TurnIndex, TurnCamp);
     }
 }
Ejemplo n.º 3
0
    public List <RPGCharacter> GetAllCharacters(EnumCharacterCamp camp)
    {
        List <RPGCharacter> r = new List <RPGCharacter>();

        switch (camp)
        {
        case EnumCharacterCamp.Player:
        {
            foreach (var v in players.Players)
            {
                r.Add(v);
            }
            return(r);
        }

        case EnumCharacterCamp.Enemy:
        {
            foreach (var v in enemies.Enemies)
            {
                r.Add(v);
            }
            return(r);
        }

        case EnumCharacterCamp.Ally:
            break;

        case EnumCharacterCamp.NPC:
            break;

        default:
            break;
        }
        return(r);
    }
Ejemplo n.º 4
0
 public void Show(EnumCharacterCamp camp, int Turn, UnityAction onHide)
 {
     base.Show();
     RegisterHideEvent(onHide);
     text.text  = camp.ToString() + "  Turn " + Turn;
     text.color = ConstTable.CAMP_COLOR(camp);
     AnimatePos(true, MoveOut);
 }
Ejemplo n.º 5
0
 public void Hide(EnumCharacterCamp control)
 {
     if (control == EnumCharacterCamp.Player)
     {
         Player.Hide();
     }
     else
     {
         Enemy.Hide();
     }
 }
Ejemplo n.º 6
0
 public TurnEventType GetTurnEvent(int Round, EnumCharacterCamp Camp)
 {
     foreach (TurnEventType Event in TurnEvent)
     {
         if (Event.Enable && Event.TriggerCamp == Camp && Round >= Event.From && Round <= Event.To)
         {
             return(Event);
         }
     }
     return(null);
 }
Ejemplo n.º 7
0
    public RPGCharacter GetCharacterFromCoord(Vector2Int tilePos, EnumCharacterCamp camp)
    {
        switch (camp)
        {
        case EnumCharacterCamp.Player:
        {
            foreach (var v in players.Players)
            {
                if (v.GetTileCoord() == tilePos)
                {
                    return(v);
                }
            }
            break;
        }

        case EnumCharacterCamp.Enemy:
        {
            foreach (var v in enemies.Enemies)
            {
                if (v.GetTileCoord() == tilePos)
                {
                    return(v);
                }
            }
            break;
        }

        case EnumCharacterCamp.Ally:
        {
            foreach (var v in players.Players)
            {
                if (v.GetTileCoord() == tilePos)
                {
                    return(v);
                }
            }
            break;
        }

        case EnumCharacterCamp.NPC:
        {
            foreach (var v in players.Players)
            {
                if (v.GetTileCoord() == tilePos)
                {
                    return(v);
                }
            }
            break;
        }
        }
        return(null);
    }
Ejemplo n.º 8
0
    public static Material GetUnitMaterial(EnumCharacterCamp camp)
    {
        switch (camp)
        {
        case EnumCharacterCamp.Player: return(UnitPlayerMaterial);

        case EnumCharacterCamp.Enemy: return(UnitEnemyMaterial);

        case EnumCharacterCamp.Ally: return(UnitAllyMaterial);

        case EnumCharacterCamp.NPC: return(UnitNPCMaterial);
        }
        return(UnitPlayerMaterial);
    }
Ejemplo n.º 9
0
    public void MoveUnitAfterAction(EnumCharacterCamp camp, Vector2Int srcPos, Vector2Int destPos, float speed, UnityAction onComplete)
    {
        List <Vector2Int> routine = PositionMath.GetMoveRoutine(destPos);

        gameMode.unitShower.MoveUnit(routine, onComplete, speed);
        PositionMath.ResetTileOccupyStatus(srcPos);

        if (camp == EnumCharacterCamp.Enemy)
        {
            PositionMath.SetTileEnemyOccupied(destPos);
        }
        else
        {
            PositionMath.SetTilePlayerOccupied(destPos);
        }
    }
Ejemplo n.º 10
0
    public static Color CAMP_COLOR(EnumCharacterCamp camp, float alpha = 1.0f)
    {
        switch (camp)
        {
        case EnumCharacterCamp.Player:
            return(new Color(0, 167f / 255f, 1, alpha));

        case EnumCharacterCamp.Enemy:
            return(new Color(1.0f, 98f / 255f, 20f / 255f, alpha));

        case EnumCharacterCamp.Ally:
            return(new Color(10f / 255f, 1, 0, alpha));

        case EnumCharacterCamp.NPC:
            return(Color.green);
        }
        return(Color.white);
    }
Ejemplo n.º 11
0
        public void Show(int Round, EnumCharacterCamp CampTurn)
        {
            if (CampTurn == EnumCharacterCamp.Player)
            {
                text.text = "回合" + Round + "\n" + "我方行动回合";
            }
            if (CampTurn == EnumCharacterCamp.Enemy)
            {
                text.text = "回合" + Round + "\n" + "敌方行动回合";
            }

            if (CampTurn == EnumCharacterCamp.NPC)
            {
                text.text = "回合" + Round + "\n" + "我方同盟行动回合";
            }

            gameObject.SetActive(true);
            StartCoroutine(Anim());
        }
Ejemplo n.º 12
0
    public void CheckTurnEvent(int round, EnumCharacterCamp camp)
    {
        var turnEvent = Event.EventInfo.GetTurnEvent(round, camp);

        if (AppConst.DebugMode)
        {
            if (turnEvent == null)
            {
                Debug.Log("没有Turn事件");
            }
            else
            {
                Debug.Log("找到相匹配的Turn Event" + turnEvent);
            }
        }
        UnityAction onCompleteTurnEvent = null;

        if (camp == EnumCharacterCamp.Player)
        {
            onCompleteTurnEvent = StartPlayerAction;
        }
        if (camp == EnumCharacterCamp.Enemy)
        {
            onCompleteTurnEvent = StartEnemyAction;
        }
        if (turnEvent == null || turnEvent.Sequence == null)
        {
            OnShowTurnIndicate(camp, round, onCompleteTurnEvent);
            return;
        }

        //如果有事件发生,则在事件发生后显示回合条
        {
            gameMode.BeforePlaySequence();
            turnEvent.Execute(chapterManager.Event.EventInfo, () =>
            {
                gameMode.AfterPlaySequence();
                OnShowTurnIndicate(camp, round, onCompleteTurnEvent);
            });
        }
    }
Ejemplo n.º 13
0
    public static void InitActionScope(EnumCharacterCamp camp, EnumMoveClassType moveClass, int Movement, Vector2Int pos, EnumSelectEffectRangeType weaponRangeType, Vector2Int atkRange)
    {
        _bPlayer         = (camp != EnumCharacterCamp.Enemy);//0,2为我方的单位
        _Mov             = Movement;
        _MoveClass       = moveClass;
        _CharacterCenter = pos;

        ResetMoveAcessList();
        _bMoveAcessList[_CharacterCenter.x, _CharacterCenter.y]         = true;
        _bMoveAcessListExcluded[_CharacterCenter.x, _CharacterCenter.y] = true;
        _FootData.Add(_CharacterCenter, new Vector2Int(-1, -1));
        _TempFootData.Add(_CharacterCenter, _Mov);

        int countPoint = 0;

        while (countPoint < _Mov)
        {
            _FindDistance(_Mov);//递归查询距离   _FindDistance(Table._JobTable.getBranch(gamechar.attribute.Job), _Mov, 0, 0);
            countPoint++;
        }
        if (atkRange.x > 0 && atkRange.y > 0)//装备武器不为空
        {
            _AttackRangeData.Clear();
            _ItemRangeMin    = atkRange.x;
            _ItemRangeMax    = atkRange.y;
            _WeaponRangeType = weaponRangeType;
            if (_ItemRangeMax != 0 && _ItemRangeMax - _ItemRangeMin > -1) //武器有距离
            {
                for (int i = 0; i < _PList.Count; i++)                    //遍历可移动的区域
                {
                    AttackScan(_PList[i]);                                //递归查询距离   _FindDistance(Table._JobTable.getBranch(gamechar.attribute.Job), _Mov, 0, 0);
                }
            }
            MoveAcessListToAttackRange();
        }
    }
Ejemplo n.º 14
0
 public void SetCamp(EnumCharacterCamp Camp)
 {
     logic.Info.Camp = Camp;
 }
Ejemplo n.º 15
0
 public Transform GetUnitTransformRoot(EnumCharacterCamp t)
 {
     return(UnitTransform[(int)t]);
 }
Ejemplo n.º 16
0
 public void ChangeUnitColor(Vector2Int pos, EnumCharacterCamp camp)
 {
     keyValue[pos].GetComponent <SpriteRenderer>().sharedMaterial = UnitMaterials[(int)camp];
 }
Ejemplo n.º 17
0
 /// <summary>
 /// 开始战斗
 /// </summary>
 /// <param name="FirstActionCamp">第一个回合行动的阵营</param>
 public void StartBattle(EnumCharacterCamp FirstActionCamp)
 {
     uiManager.ShowBattleHPBar(true);
     modeInfo.modeState = GameModeInfo.ModeState.Battle;
     chapterManager.NextTurn();
 }