Exemplo n.º 1
0
 public override void OnUnitClicked(Unit unit)
 {
     if (roleInfoPanel)
     {
         GameObject.Destroy(roleInfoPanel);
     }
     foreach (var f in BattleFieldManager.GetInstance().floors)
     {
         f.Value.SetActive(false);
     }
     range = new MoveRange();
     if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd)
     {
         roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit);
     }
     else
     {
         var outline = Camera.main.GetComponent <RenderBlurOutline>();
         if (outline)
         {
             outline.RenderOutLine(unit.transform);
         }
         range.CreateMoveRange(unit.transform);
         CreatePanel(unit);
     }
     Camera.main.GetComponent <RTSCamera>().FollowTarget(unit.transform.position);
 }
Exemplo n.º 2
0
        public static void Pressure(AtkContext atk, MoveRange range)
        {
            var ts =
                atk.Move.Move.Range == MoveRange.Board || atk.Move.Move.Range == MoveRange.OpponentField ?
                atk.Attacker.Controller.Board[1 - atk.Attacker.Pokemon.TeamId].Pokemons :
                atk.Targets == null?
                Enumerable.Empty <PokemonProxy>() : null;

            if (ts == null)
            {
                foreach (var d in atk.Targets)
                {
                    if (d.Defender.Pokemon.TeamId != atk.Attacker.Pokemon.TeamId && d.Defender.AbilityE(As.PRESSURE))
                    {
                        atk.Pressure++;
                    }
                }
            }
            else
            {
                foreach (var d in ts)
                {
                    if (d.AbilityE(As.PRESSURE))
                    {
                        atk.Pressure++;
                    }
                }
            }
        }
Exemplo n.º 3
0
    public override void OnUnitClicked(Unit unit)
    {
        foreach (var f in BattleFieldManager.GetInstance().floors)
        {
            f.Value.SetActive(false);
        }
        range = new MoveRange();
        if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd && SkillManager.GetInstance().skillQueue.Peek().Key.EName == "FirstAction")
        {
            SkillManager.GetInstance().skillQueue.Peek().Key.Reset();
            roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit);
        }
        else if (SkillManager.GetInstance().skillQueue.Peek().Key.EName == "FirstAction")
        {
            var outline = Camera.main.GetComponent <RenderBlurOutline>();
            if (outline)
            {
                outline.RenderOutLine(unit.transform);
            }

            SkillManager.GetInstance().skillQueue.Peek().Key.Reset();

            RoundManager.GetInstance().RoundState = new RoundStateWaitingForInput(RoundManager.GetInstance());
            range.CreateMoveRange(unit.transform);
            ((RoundStateWaitingForInput)RoundManager.GetInstance().RoundState).CreatePanel(unit);
        }
        Camera.main.GetComponent <RTSCamera>().FollowTarget(unit.transform.position);
    }
Exemplo n.º 4
0
    private void MoveEnemy()
    {
        setMoveRange(Convert.ToInt32(ObjGridVec.x), Convert.ToInt32(ObjGridVec.y));
        //RendeMoveRange (MoveRange);
        target    = FindTarget();
        BestPlace = new Vector3(-1f, -1f, 0f);

        float shortestDis = 10000;

        for (int i = 0; i < MoveRange.Count; i++)
        {
            float distance = Mathf.Abs(Vector3.Distance(target, MoveRange [i]));
            if (distance < shortestDis)
            {
                shortestDis = distance;
                BestPlace   = MoveRange [i];
            }
        }

        //moveFinished = false;
        if (BestPlace != new Vector3(FarPosValue, FarPosValue, 0f))
        {
            BoardManager.instance.floorMoveableArray [Convert.ToInt32(ObjGridVec.y), Convert.ToInt32(ObjGridVec.x)] = 1;
            setBestPath(BestPlace);
            ObjGridVec = BestPlace;
            BoardManager.instance.floorMoveableArray [Convert.ToInt32(ObjGridVec.y), Convert.ToInt32(ObjGridVec.x)] = 0;

            //moving = true;
            movingToNum = bestPath.Count - 1;
            //print (movingToNum);
        }
        MoveRange.Clear();
    }
Exemplo n.º 5
0
 public override void OnUnitClicked(Unit unit)
 {
     if (!EventSystem.current.IsPointerOverGameObject())
     {
         if (roleInfoPanel)
         {
             GameObject.Destroy(roleInfoPanel);
         }
         foreach (var f in BattleFieldManager.GetInstance().floors)
         {
             f.Value.SetActive(false);
         }
         range = new MoveRange();
         if (unit.playerNumber.Equals(roundManager.CurrentPlayerNumber) && !unit.UnitEnd)
         {
             roundManager.RoundState = new RoundStateUnitSelected(roundManager, unit);
         }
         else
         {
             Camera.main.GetComponent <RenderBlurOutline>().RenderOutLine(unit.transform);
             range.CreateMoveRange(unit.transform);
             CreatePanel(unit);
         }
     }
 }
Exemplo n.º 6
0
 internal MoveType(int id, BattleType type, MoveCategory category, int power, int accuracy, int pp, MoveRange range)
 {
     _id       = id;
     _type     = type;
     _category = category;
     _power    = power;
     _accuracy = accuracy;
     _pp       = pp;
     _range    = range;
 }
Exemplo n.º 7
0
        public MoveRange(MoveRange copy)
        {
            RangeType   = copy.RangeType;
            Mobility    = copy.Mobility;
            CutsCorners = copy.CutsCorners;
            Distance    = copy.Distance;

            HitsSelf   = copy.HitsSelf;
            HitsFriend = copy.HitsFriend;
            HitsFoe    = copy.HitsFoe;
        }
Exemplo n.º 8
0
    internal IEnumerator ActivateAITree(Unit _aiUnit)
    {
        aiUnit    = _aiUnit;
        rtsCamera = Camera.main.GetComponent <RTSCamera>();
        outline   = Camera.main.GetComponent <RenderBlurOutline>();

        //create move Range and Delete() it after AINodeMoveAI
        moveRange = new MoveRange();
        moveRange.CreateMoveRange(aiUnit.transform);

        yield return(StartCoroutine(ActionNode(root)));
    }
Exemplo n.º 9
0
    internal IEnumerator ActivateAITree(Unit _aiUnit)
    {
        rtsCamera = Camera.main.GetComponent <RTSCamera>();
        outline   = Camera.main.GetComponent <RenderBlurOutline>();

        //init
        aiUnit         = _aiUnit;
        aiTarget       = null;
        moveTarget     = aiUnit.transform.position;
        skillName      = "";
        dodgeSkillName = "";
        finalDirection = "forward";

        //create move Range and Delete() it after AINodeMoveAI
        moveRange = new MoveRange();
        moveRange.CreateMoveRange(aiUnit.transform, false);

        yield return(StartCoroutine(ActionNode(root)));
    }
Exemplo n.º 10
0
 public bool Move(SimMove move, bool mega)
 {
     if (Pms[CurrentI].Move(move))
     {
         if (NeedTarget)
         {
             MoveRange = move.Type.Id == Ms.CURSE && Pms[CurrentI].Curse ? MoveRange.SelectedTarget : move.Type.Range;
             this.move = move;
             this.mega = mega;
         }
         else
         {
             input.UseMove(CurrentI, move, mega);
             NextPm();
         }
         return(true);
     }
     error = Pms[CurrentI].GetErrorMessage();
     return(false);
 }
Exemplo n.º 11
0
    private void GetAttackMovePosition()
    {
        //get move range
        MoveRange moveRange = new MoveRange();

        moveRange.CreateMoveRange(aiUnit.transform);
        //find the nearest enemy
        getNeareatTarget(aiUnit);
        //find if the nearest enemy in attack range
        List <Vector3> enemyFloor = moveRange.enemyFloor;

        foreach (Vector3 v in enemyFloor)
        {
            enemyList.Add(getEnemyUnit(v));
        }

        if (enemyList.Contains(aiTarget))
        { //if the enemy is in attack range of aiUnit
            //choose a floor in moveRange and it is the neareast from aiUnit to aiTarget
            //get the four floors next aiTarget
            List <Vector3> nextFloors = getNextFloors(aiTarget.transform.position);

            //just leave these floors that could be reached in moveRange
            List <Vector3> canReachNextFloors = nextFloors.FindAll(nf => moveRange.rangeDic.ContainsKey(nf));

            //detect if there are other team mates in these floors
            List <Unit>    teamMatesList   = UnitManager.GetInstance().units.FindAll(p => p.playerNumber == aiUnit.playerNumber);
            List <Vector3> availableFloors = new List <Vector3>(canReachNextFloors);
            foreach (Unit u in teamMatesList)
            {
                foreach (Vector3 v in canReachNextFloors)
                {
                    if (u.transform.position == v)
                    {
                        availableFloors.Remove(v);
                    }
                }
            }

            if (availableFloors.Count > 0)
            {
                //find the nearest floor
                moveTarget = getNeareastFloor(aiUnit, availableFloors);
            }
            else
            {
                if (remoteAttackDetect())
                {
                    remoteAttack();
                }
                else
                {
                    moveMoreStep();
                }
            }
            //cancel render moveRange
            moveRange.Delete();
        }
        else
        {
            moveMoreStep();
        }
    }
Exemplo n.º 12
0
        public static IEnumerable <Tile> GetRangeTiles(AtkContext atk, MoveRange range, Tile select)
        {
            var aer = atk.Attacker;
            IEnumerable <Tile> targets = null;
            Board b      = aer.Controller.Board;
            var   remote = atk.Move.IsRemote;
            var   team   = aer.Pokemon.TeamId;
            var   oTeam  = 1 - team;
            var   x      = aer.OnboardPokemon.X;
            var   ox     = aer.Controller.GameSettings.Mode.XBound() - 1 - x;

            switch (range)
            {
            case MoveRange.TeamField:     //do nothing
            case MoveRange.OpponentField: //do nothing
            case MoveRange.Board:         //do nothing
            case MoveRange.TeamPokemons:  //防音防不住治愈铃铛,所以这只是个摆设
                break;

            case MoveRange.Adjacent:
            {
                var  ts = new List <Tile>();
                Tile t;
                t = b[team][x - 1]; if (t != null)
                {
                    ts.Add(t);
                }
                t = b[team][x + 1]; if (t != null)
                {
                    ts.Add(t);
                }
                t = b[oTeam][ox - 1]; if (t != null)
                {
                    ts.Add(t);
                }
                ts.Add(b[oTeam][ox]);
                t = b[oTeam][ox + 1]; if (t != null)
                {
                    ts.Add(t);
                }
                targets = ts;
            }
            break;

            case MoveRange.OpponentPokemons:
            {
                var  ts = new List <Tile>();
                Tile t;
                t = b[oTeam][ox - 1]; if (t != null)
                {
                    ts.Add(t);
                }
                ts.Add(b[oTeam][ox]);
                t = b[oTeam][ox + 1]; if (t != null)
                {
                    ts.Add(t);
                }
                targets = ts;
            }
            break;

            case MoveRange.All:
                targets = b.Tiles;
                break;

            case MoveRange.SelectedTeammate:
                if (select == null)
                {
                    var pms = new List <PokemonProxy>();
                    foreach (var pm in remote ? b[team].Pokemons : b[team].GetAdjacentPokemonsByX(x))
                    {
                        if (pm != aer)
                        {
                            pms.Add(pm);
                        }
                    }
                    targets = pms.Any() ? new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile } : Enumerable.Empty <Tile>();
                }
                else
                {
                    targets = new Tile[] { select }
                };
                break;

            case MoveRange.RandomOpponentPokemon:
            {
                var pms = (List <PokemonProxy>)(remote? b[oTeam].Pokemons : b[oTeam].GetAdjacentPokemonsByX(ox));
                targets = pms.Any() ? new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile } : Enumerable.Empty <Tile>();
            }
            break;

            case MoveRange.SelectedTarget:
                if (select == null || select.Field.Team == oTeam)
                {
                    goto case MoveRange.SelectedOpponent;
                }
                targets = new Tile[] { select };
                break;

            case MoveRange.SelectedOpponent:
                //非鬼系选诅咒后变诅咒随机对方一个精灵
                if (select == null)
                {
                    goto case MoveRange.RandomOpponentPokemon;
                }
                //因为移动或交换位置造成距离不足,技能失败
                if (!(remote || ox - 1 <= select.X && select.X <= ox + 1))
                {
                    targets = Enumerable.Empty <Tile>();
                }
                if (select.Pokemon != null)
                {
                    targets = new Tile[] { select }
                }
                ;
                else if (b[oTeam][ox].Pokemon != null)
                {
                    targets = new Tile[] { b[oTeam][ox] }
                }
                ;                                                                                 //据说正对面精灵优先
                else
                {
                    goto case MoveRange.RandomOpponentPokemon;
                }
                break;

            case MoveRange.Self:     //done?
                targets = new Tile[] { aer.Tile };
                break;

            case MoveRange.RandomTeamPokemon:
            {
                var pms = (List <PokemonProxy>)(remote ? b[team].Pokemons : b[team].GetAdjacentPokemonsByX(x));
                targets = new Tile[] { pms[aer.Controller.GetRandomInt(0, pms.Count - 1)].Tile };
            }
            break;
            }
            return(targets);
        }
Exemplo n.º 13
0
 public void SetModel(MoveRange model)
 {
     _model = model;
     RaiseAllPropertiesChanged();
 }
Exemplo n.º 14
0
 public MoveRangeViewModel()
 {
     _model = new MoveRange();
 }
Exemplo n.º 15
0
 public virtual void AssignMoveRange(MoveRange pRange)
 {
     this.enRange = pRange;
 }
        public void Set(int userX, MoveRange range)
        {
            CanSelect = false;
            //如果要支持三打对战,IsRemote要拿到客户端
            PO1.IsEnabled = false;
            PO0.IsEnabled = false;
            P0.IsEnabled  = false;
            P1.IsEnabled  = false;
            var user    = userX == 0 ? P0 : P1;
            var partner = user == P0 ? P1 : P0;

            switch (range)
            {
            case MoveRange.SelectedTarget:
                CanSelect         = true;
                PO1.IsEnabled     = true;
                PO0.IsEnabled     = true;
                partner.IsEnabled = true;
                break;

            case MoveRange.SelectedTeammate:
                CanSelect         = true;
                partner.IsEnabled = true;
                break;

            case MoveRange.SelectedOpponent:
                CanSelect     = true;
                PO1.IsEnabled = true;
                PO0.IsEnabled = true;
                break;

            case MoveRange.Adjacent:
                PO1.IsEnabled     = true;
                PO0.IsEnabled     = true;
                partner.IsEnabled = true;
                break;

            case MoveRange.OpponentPokemons:
            case MoveRange.OpponentField:
                PO1.IsEnabled = true;
                PO0.IsEnabled = true;
                break;

            case MoveRange.TeamPokemons:
            case MoveRange.TeamField:
                P0.IsEnabled = true;
                P1.IsEnabled = true;
                break;

            case MoveRange.All:
            case MoveRange.Board:
                PO1.IsEnabled = true;
                PO0.IsEnabled = true;
                P0.IsEnabled  = true;
                P1.IsEnabled  = true;
                break;

            default:
                user.IsEnabled = true;
                break;
            }
            PO1.OnPropertyChanged();
            PO0.OnPropertyChanged();
            P0.OnPropertyChanged();
            P1.OnPropertyChanged();
            OnPropertyChanged();
        }