Exemplo n.º 1
0
    public void Unmask(BattleMapMonster monster)
    {
        BattleMapTile centerTile = holder.BattleMap.BattleMapTiles[monster.X, monster.Y];

        // 視界のタイルセットを取得
        List <BattleMapTile> set = MapUtils.GetRangeTileList(centerTile, monster.BattleStatus.View);

        BattleMapTileMaskGroup maskGroup = holder.BattleMap.BattleMapTileMaskGroup[monster.GetTeamIndex()];

        foreach (BattleMapTile bmt in set)
        {
            // マスクを取得
            BattleMapTileMask mask = maskGroup.BattleMapTileMask[bmt.X, bmt.Y];

            // すでにマスク解除されているならなにもしない
            if (mask.Mask == false)
            {
                continue;
            }

            mask.Mask = false;
            mask.GameObject.SetActive(false);
            mask.GameObjectShadow.SetActive(false);

            // オブジェクトが存在しない場合
            // オブジェクトを描画
            BattleMapObjectSet bmoSet = holder.BattleMap.BattleMapObjectSets[bmt.X, bmt.Y];
            if (bmoSet == null)
            {
                mapObjectGenerator.DecoreteMapTile(bmt);
            }
        }
    }
    /// <summary>
    /// マップタイルを装飾
    /// </summary>
    /// <param name="bmt"></param>
    public void DecoreteMapTileByDropdown(BattleMapTile bmt)
    {
        //// ドロップダウンから装飾のタイプを取得
        MapTileType mapTileType = GetDecorationTypeByDropdown();

        DecoreteMapTile(bmt, bmt.MapTileType);
    }
    /// <summary>
    /// タイル間の座標をキューに追加
    /// </summary>
    /// <param name="queue"></param>
    /// <param name="monster"></param>
    /// <param name="bmt1"></param>
    /// <param name="bmt2"></param>
    private void EnqueuePosition(Queue <Vector2> queue, BattleMapMonster monster, BattleMapTile bmt1, BattleMapTile bmt2)
    {
        float tmpX  = bmt2.GameObject.transform.position.x - bmt1.GameObject.transform.position.x;
        float diffX = tmpX / (float)MOVE_COUNT_PER_TILE;

        float tmpY  = bmt2.GameObject.transform.position.y - bmt1.GameObject.transform.position.y;
        float diffY = tmpY / (float)MOVE_COUNT_PER_TILE;

        BattleMapMonsterPositionCalculator calculator = new BattleMapMonsterPositionCalculator();

        for (int i = 0; i < MOVE_COUNT_PER_TILE - 1; i++)
        {
            float x = bmt1.GameObject.transform.position.x + (diffX * (i + 1));
            float y = bmt1.GameObject.transform.position.y + (diffY * (i + 1));

            Vector2 pos = calculator.CalculateMonsterPosition(monster, x, y);

            queue.Enqueue(pos);
        }

        // 最後は目的地
        Vector2 lastPos = calculator.CalculateMonsterPosition(monster, bmt2);

        queue.Enqueue(lastPos);
    }
Exemplo n.º 4
0
    /// <summary>
    /// 範囲の描画
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="tileSet"></param>
    private static void DrawRangeTile(BattleMapTile bmt, HashSet <BattleMapTile> tileSet, Action <BattleMapTile, int> iconInstaller)
    {
        BattleMapTileJointInfo jointInfo = bmt.JointInfo;

        foreach (MapTileJointPositionType jointPositionType in Enum.GetValues(typeof(MapTileJointPositionType)))
        {
            BattleMapTile jointTile = jointInfo.GetJointTile(jointPositionType);

            bool isDraw = false;

            // はじっこは描写
            if (jointTile == null)
            {
                isDraw = true;
            }

            else
            {
                // 移動可能タイルに存在しない場合は描写
                if (tileSet.Contains(jointTile) == false)
                {
                    isDraw = true;
                }
            }

            // 描写
            if (isDraw == true)
            {
                iconInstaller(bmt, (int)jointPositionType * 60);
            }
        }
    }
    /// <summary>
    /// 相手を選択
    /// </summary>
    /// <param name="monster"></param>
    private void SelectOpponent(BattleMapMonster monster)
    {
        BattleMapActionStatus actionStatus = holder.BattleMapStatus.BattleMapActionStatus;
        MonsterSkill          skill        = actionStatus.SelectedSkill;

        // ステータスを移動
        statusGenerator.ShowStatus(
            actionStatus.TargetMonster, BattleMapStatusPanelType.SKILL1, BattleMapStatusPanelPositionType.ON_RESERVE);
        statusGenerator.SetSkill(skill);

        // 相手のステータスを表示
        statusGenerator.ShowStatusReserve(monster, BattleMapStatusPanelType.SKILL1);

        // 距離を計算
        BattleMapTile from  = holder.BattleMap.GetByMonster(actionStatus.TargetMonster);
        BattleMapTile to    = holder.BattleMap.GetByMonster(monster);
        int           range = MapUtils.GetRange(from, to);

        // カウンタースキルを取得
        MonsterSkill counterSkill = monster.GetCounterSkill(range);

        statusGenerator.SetSkillReserve(counterSkill);

        // ステータスの更新
        actionStatus.BattleMapActionStatusType = BattleMapActionStatusType.CONFIRM_OPPONENT_SELECT;
        actionStatus.OpponentMonster           = monster;
        actionStatus.CounterSkill = counterSkill;
    }
    /// <summary>
    /// 移動の終了
    /// </summary>
    private void FinishMove()
    {
        BattleMapMonster monster = holder.BattleMapStatus.BattleMapMoveStatus.TargetMonster;

        // マーカーを削除
        mapIconGenerator.UninstallMonsterMarker(monster);

        // モンスターを移動
        BattleMapTile endTile = holder.BattleMapStatus.BattleMapMoveStatus.GetEndMapTile();

        monster.X = endTile.X;
        monster.Y = endTile.Y;

        // モンスターのリセット
        // 傾き、移動で位置がずれるため
        monsterGenerator.ResetMonsterGameObject(monster);

        // sortingOrderを再設定
        monsterGenerator.SetMonsterSortingOrder(monster);

        // マーカーを作り直す
        mapIconGenerator.InstallMonsterMarker(monster);

        // 移動パスの削除
        moveProcessor.ClearFlameAndPath();

        // ステータスの削除
        holder.BattleMapStatus.BattleMapMoveStatus = null;

        // 現在のチームの選択されているコマンド
        BattleMapCommand command = holder.GetCurrentCommand();

        command.Count = command.Count - 1;
    }
Exemplo n.º 7
0
    /// <summary>
    /// マップを作成
    /// </summary>
    /// <returns></returns>
    public BattleMap Create(int[,] map)
    {
        BattleMap battleMap = new BattleMap(map);

        int sizeX = map.GetLength(0);
        int sizeY = map.GetLength(1);

        battleMap.BattleMapTiles      = new BattleMapTile[sizeX, sizeY];
        battleMap.BattleMapObjectSets = new BattleMapObjectSet[sizeX, sizeY];

        for (int x = 0; x < sizeX; x++)
        {
            for (int y = 0; y < sizeY; y++)
            {
                BattleMapTile bmt = new BattleMapTile(x, y, map[x, y]);
                battleMap.BattleMapTiles[x, y] = bmt;
            }
        }

        // 隣接するタイルを設定
        SetJointTile(battleMap);

        // マスクを作成
        CreateMask(battleMap);

        return(battleMap);
    }
Exemplo n.º 8
0
    private Vector3 CreateCenterPosition()
    {
        BattleMapMonster fromMonster = holder.BattleMapMonsters.MonsterList[0];
        BattleMapTile    from        = holder.BattleMap.GetByMonster(fromMonster);

        BattleMapMonster toMonster = holder.BattleMapMonsters.MonsterList[1];
        BattleMapTile    to        = holder.BattleMap.GetByMonster(toMonster);

        Vector3 pos1 = fromMonster.GameObject.transform.position;
        Vector3 pos2 = toMonster.GameObject.transform.position;

        Vector3 center = Vector3.Lerp(pos1, pos2, 0.5f);

        center.z = -10;

        // ズーム
        Camera  camera      = cameraController.GetCamera();
        Vector3 screenPoint = camera.WorldToScreenPoint(center);


        Debug.Log("center:" + center);
        Debug.Log("spoint:" + screenPoint);

        return(center);
    }
Exemplo n.º 9
0
 public BattleMapTile(int x, int y, int type)
 {
     X               = x;
     Y               = y;
     MapTileType     = ConvertType(type);
     MapTileViewType = ConvertViewType(MapTileType);
     Name            = BattleMapTile.CreateName(x, y);
 }
Exemplo n.º 10
0
    /// <summary>
    /// 枠、水色を設定
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="rotate"></param>
    public void InstallFrameAque(BattleMapTile bmt, int rotate)
    {
        GameObject iconGo = prefabHolder.InstantiateFrameAqua();

        iconGo.transform.Rotate(new Vector3(0, 0, -rotate));

        InstallIcon(bmt, BattleMapIconType.FRAME_AQUA, iconGo);
    }
Exemplo n.º 11
0
    /// <summary>
    /// モンスターのマーカーを設定
    /// </summary>
    /// <param name="battleMapMonster"></param>
    public void InstallMonsterMarker(BattleMapMonster battleMapMonster)
    {
        BattleMapTile bmt = holder.BattleMap.BattleMapTiles[battleMapMonster.X, battleMapMonster.Y];

        GameObject iconGo = prefabHolder.InstantiateCircle(battleMapMonster.Team.TeamColor);

        InstallIcon(bmt, BattleMapIconType.MONSTER_MAKER, iconGo);
    }
    /// <summary>
    /// パスリストの処理
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="movableTileList"></param>
    /// <param name="pathList"></param>
    /// <param name="currentPath"></param>
    /// <param name="moveCount"></param>
    private void ProcessPathList(
        BattleMapTile targetTile, List <BattleMapTile> movableTileList,
        List <string> pathList, string currentPath, int moveCount)
    {
        // 終点なら終了
        BattleMapTile startTile = holder.BattleMapStatus.BattleMapMoveStatus.StartMapTile;

        if (targetTile == startTile)
        {
            currentPath += targetTile.X + "," + targetTile.Y + "-" + moveCount;
            pathList.Add(currentPath);
            return;
        }

        // 移動可能かどうか
        if (movableTileList.Contains(targetTile) == false)
        {
            return;
        }

        // 該当タイルに別モンスターがいたら侵入不可
        BattleMapMonster monster        = holder.BattleMapStatus.BattleMapMoveStatus.TargetMonster;
        BattleMapMonster anotherMonster = holder.BattleMapMonsters.GetMonster(targetTile.X, targetTile.Y);

        if (anotherMonster != null && monster != anotherMonster)
        {
            return;
        }

        // 移動コストを取得
        MapTileType tileType = targetTile.MapTileType;
        int         cost     = monster.BattleStatus.BattleMapMonsterMoveCost.GetMoveCost(tileType);

        // 侵入不可の場合
        if (cost < 0)
        {
            return;
        }

        // タイルのコストごとに移動力を減少
        moveCount = moveCount - cost;

        // 移動力がなくなったら終了
        if (moveCount <= 0)
        {
            return;
        }

        // パスに追加
        currentPath += targetTile.X + "," + targetTile.Y + "_";

        // タイルごとの処理
        foreach (BattleMapTile jointTile in targetTile.JointInfo.GetJointTileList())
        {
            ProcessPathList(jointTile, movableTileList, pathList, currentPath, moveCount);
        }
    }
    /// <summary>
    /// 範囲の描画
    /// </summary>
    /// <param name="skill"></param>
    /// <param name="monster"></param>
    private void DrawRange(MonsterSkill skill, BattleMapMonster monster)
    {
        BattleMapTile bmt = holder.BattleMap.GetByMonster(monster);

        // 範囲の取得
        List <BattleMapTile> list = MapUtils.GetRangeTileList(bmt, skill.Range);

        // 描画
        MapUtils.DrawRangeTile(new HashSet <BattleMapTile>(list), iconGenerator.InstallFrameAque);
    }
Exemplo n.º 14
0
    public GameObject InstantiateMaskShadow(BattleMapTile bmt)
    {
        GameObject go = Instantiate(maskShadow01Prefab) as GameObject;

        go.name = "maskShadow_" + bmt.X + "_" + bmt.Y;

        go.transform.position = bmt.GetMapTilePosition();

        go.GetComponent <SpriteRenderer>().sortingOrder = SORTING_ORDER_MASK_SHADOW;

        return(go);
    }
    /// <summary>
    /// 選択ステータスを設定
    /// </summary>
    /// <param name="startTile"></param>
    /// <param name="monster"></param>
    /// <param name="movableTileList"></param>
    private void SetSelectedStatus(BattleMapTile startTile, BattleMapMonster monster, List <BattleMapTile> movableTileList)
    {
        // ステータスを設定
        BattleMapMoveStatus moveStatus = new BattleMapMoveStatus();

        moveStatus.BattleMapMoveStatusType = BattleMapMoveStatusType.SELECTED;
        moveStatus.TargetMonster           = monster;
        moveStatus.MapTileMovableList      = movableTileList;
        moveStatus.StartMapTile            = startTile;

        holder.BattleMapStatus.BattleMapMoveStatus = moveStatus;
    }
Exemplo n.º 16
0
    private void Create(BattleMapTile bmt, BattleMapObjectSet bmoSet, IMapObjectSimpleCreatorHelper helper)
    {
        foreach (string point in helper.GetPointList())
        {
            string[] strs = point.Split(',');
            int      posX = int.Parse(strs[0]);
            int      posY = int.Parse(strs[1]);

            BattleMapObject bmo = CreateBattleMapObject(bmt, posX, posY, helper);
            bmoSet.BattleMapObjectList.Add(bmo);
        }
    }
Exemplo n.º 17
0
    /// <summary>
    /// モンスターのGameObjectをリセットする
    /// </summary>
    /// <param name="monster"></param>
    public void ResetMonsterGameObject(BattleMapMonster monster)
    {
        Destroy(monster.GameObject);

        BattleMapTile bmt = holder.BattleMap.GetByMonster(monster);

        GameObject newGo = GetMonsterGameObject(bmt, monster.BattleStatus.MonsterType);

        monster.GameObject = newGo;

        // 位置の調整
        ConditionMonsterPosition(bmt, monster);
    }
Exemplo n.º 18
0
    public GameObject Instantiate(BattleMapTile bmt)
    {
        GameObject prefab = PrefabUtils.GetPrefab(this, bmt.MapTileViewType.ToString().ToLower());

        GameObject go = Instantiate(prefab) as GameObject;

        go.name = bmt.Name;

        go.transform.position = bmt.GetMapTilePosition();

        go.GetComponent <SpriteRenderer>().sortingOrder = SORTING_ORDER;

        return(go);
    }
Exemplo n.º 19
0
    public void Load()
    {
        // ファイルを読み込み
        string path = inputFieldFilePath.text;

        StreamReader reader = new StreamReader(path, Encoding.GetEncoding(ENCODING));

        bool first = true;

        BattleMapTile[,] tiles = null;

        while (reader.EndOfStream == false)
        {
            string line = reader.ReadLine();


            // 最初の行はヘッダ
            if (first)
            {
                string[] strs = line.Split(new string[] { SEP }, StringSplitOptions.None);
                int      x    = int.Parse(strs[0]);
                int      y    = int.Parse(strs[1]);

                tiles = new BattleMapTile[x, y];

                first = false;
            }

            // 以降は一行ずつ読み込み
            else
            {
                BattleMapTile bmt = new BattleMapTile();
                bmt.FromFileString(line, SEP);
                tiles[bmt.X, bmt.Y] = bmt;
            }
        }
        reader.Close();

        // 現在のタイルをクリア
        ClearTile();

        // 読み込まれたタイルを設定
        holder.BattleMap.BattleMapTiles      = tiles;
        holder.BattleMap.BattleMapObjectSets = new BattleMapObjectSet[tiles.GetLength(0), tiles.GetLength(1)];

        // タイルを描画
        DrawTiles(tiles);

        Debug.Log("Load Successful!");
    }
Exemplo n.º 20
0
    /// <summary>
    /// マップタイルを交換する
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="viewType"></param>
    private void ChangeMapTile(BattleMapTile bmt, MapTileViewType viewType)
    {
        bmt.MapTileViewType = viewType;

        // 既存のGameObjectを破棄
        Destroy(bmt.GameObject);

        // 新規にGameObjectを作成
        GameObject go = prefabHolder.Instantiate(bmt);

        bmt.GameObject = go;

        // マップ上にオブジェクトを設置
        mapObjectGenerator.DecoreteMapTile(bmt);
    }
Exemplo n.º 21
0
    /// <summary>
    /// 指定された距離のタイル取得
    /// </summary>
    /// <param name="centerTile"></param>
    /// <param name="range"></param>
    /// <returns></returns>
    public static List <BattleMapTile> GetRangeTileList(BattleMapTile centerTile, int range)
    {
        HashSet <BattleMapTile> tileSet = new HashSet <BattleMapTile>();

        // このタイルを移動可能に追加
        tileSet.Add(centerTile);

        // タイルごとの処理
        foreach (BattleMapTile jointTile in centerTile.JointInfo.GetJointTileList())
        {
            CheckRange(jointTile, range, tileSet);
        }

        return(new List <BattleMapTile>(tileSet));
    }
    /// <summary>
    /// 移動チェック
    /// </summary>
    /// <param name="monster"></param>
    /// <param name="targetTile"></param>
    /// <param name="moveCount"></param>
    /// <param name="movableTileSet"></param>
    private void CheckMove(
        BattleMapMonster monster, BattleMapTile targetTile, int moveCount, HashSet <BattleMapTile> movableTileSet)
    {
        // 該当タイルに別モンスターがいたら侵入不可
        BattleMapMonster anotherMonster = holder.BattleMapMonsters.GetMonster(targetTile.X, targetTile.Y);

        if (anotherMonster != null && monster != anotherMonster)
        {
            return;
        }

        // マスクしてあったら侵入不可
        BattleMapTileMaskGroup group = holder.BattleMap.BattleMapTileMaskGroup[monster.GetTeamIndex()];
        BattleMapTileMask      mask  = group.BattleMapTileMask[targetTile.X, targetTile.Y];

        if (mask.Mask)
        {
            return;
        }

        // 移動コストを取得
        MapTileType tileType = targetTile.MapTileType;
        int         cost     = monster.BattleStatus.BattleMapMonsterMoveCost.GetMoveCost(tileType);

        // 侵入不可の場合
        if (cost < 0)
        {
            return;
        }

        // このタイルを移動可能に追加
        movableTileSet.Add(targetTile);

        // タイルのコストごとに移動力を減少
        moveCount = moveCount - cost;

        // 移動力がなくなったら終了
        if (moveCount <= 0)
        {
            return;
        }

        // タイルごとの処理
        foreach (BattleMapTile jointTile in targetTile.JointInfo.GetJointTileList())
        {
            CheckMove(monster, jointTile, moveCount, movableTileSet);
        }
    }
    /// <summary>
    /// 移動可能範囲の表示
    /// </summary>
    public void ShowMovable(BattleMapMonster monster)
    {
        // 現在地
        BattleMapTile startTile = holder.BattleMap.BattleMapTiles[monster.X, monster.Y];

        // 移動可能なタイルを取得
        HashSet <BattleMapTile> movableTileSet = GetMovableTileSet(startTile, monster);

        // 範囲の描画
        MapUtils.DrawRangeTile(movableTileSet, iconGenerator.InstallFrameAque);

        // マーカーを強調表示
        iconController.HighlightMarker(monster);

        // 選択ステータスを設定
        SetSelectedStatus(startTile, monster, new List <BattleMapTile>(movableTileSet));
    }
Exemplo n.º 24
0
    /// <summary>
    /// タイル間の距離を取得
    /// </summary>
    /// <param name="from"></param>
    /// <param name="to"></param>
    /// <returns></returns>
    public static int GetRange(BattleMapTile from, BattleMapTile to)
    {
        int max = 500;

        // 距離内にあるかひたすら計算
        for (int i = 1; i < max; i++)
        {
            List <BattleMapTile> list = GetRangeTileList(from, i);

            if (list.Contains(to))
            {
                return(i);
            }
        }

        return(-1);
    }
    /// <summary>
    /// ステータスを表示する
    /// </summary>
    /// <param name="bmt"></param>
    public void ShowStatus(BattleMapTile bmt)
    {
        Initialize();

        // モンスターがいれば表示
        BattleMapMonster monster = holder.BattleMapMonsters.GetMonster(bmt);

        if (monster != null)
        {
            ShowStatus(monster);
        }

        else
        {
            HideStatus();
        }
    }
Exemplo n.º 26
0
    /// <summary>
    /// モンスターの位置の調整
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="bmm"></param>
    private void ConditionMonsterPosition(BattleMapTile bmt, BattleMapMonster bmm)
    {
        BattleMapMonsterPositionCalculator calculator = new BattleMapMonsterPositionCalculator();

        Vector2 position = calculator.CalculateMonsterPosition(bmm, bmt);

        GameObject monsterGo = bmm.GameObject;

        monsterGo.transform.position = position;

        // 傾けた回数だけ傾ける
        // 一度に傾けるとずれる
        for (int i = 0; i < holder.BattleMapSetting.TiltCount; i++)
        {
            tiltController.Tilt(monsterGo, BattleMapCameraController.TITL_ANGLE);
        }
    }
Exemplo n.º 27
0
    /// <summary>
    /// アイコンを設定
    /// </summary>
    /// <param name="bmt"></param>
    /// <param name="iconType"></param>
    /// <param name="iconGo"></param>
    private void InstallIcon(BattleMapTile bmt, BattleMapIconType iconType, GameObject iconGo)
    {
        BattleMapIcon icon = new BattleMapIcon();

        icon.BattleMapIconType = iconType;
        icon.X = bmt.X;
        icon.Y = bmt.Y;

        Vector3 pos = bmt.GameObject.transform.position;

        iconGo.transform.position = pos;

        icon.GameObject = iconGo;

        BattleMapIcons icons = holder.BattleMapIcons;

        icons.Add(icon);
    }
    /// <summary>
    /// 移動可能なタイルのセットを取得
    /// </summary>
    /// <param name="currentTile"></param>
    /// <param name="monster"></param>
    /// <returns></returns>
    private HashSet <BattleMapTile> GetMovableTileSet(BattleMapTile currentTile, BattleMapMonster monster)
    {
        HashSet <BattleMapTile> movableTileSet = new HashSet <BattleMapTile>();

        // 移動力
        int moveCount = monster.BattleStatus.MoveCount;

        // このタイルを移動可能に追加
        movableTileSet.Add(currentTile);

        // タイルごとの処理
        foreach (BattleMapTile jointTile in currentTile.JointInfo.GetJointTileList())
        {
            CheckMove(monster, jointTile, moveCount, movableTileSet);
        }

        return(movableTileSet);
    }
    /// <summary>
    /// パスのリストを作成
    /// </summary>
    /// <param name="bmt"></param>
    /// <returns></returns>
    private List <string> CreatePathList(BattleMapTile bmt)
    {
        List <string> pathList = new List <string>();

        // 移動可能タイル
        List <BattleMapTile> movableTileList = holder.BattleMapStatus.BattleMapMoveStatus.MapTileMovableList;

        // パス
        string path = bmt.X + "," + bmt.Y + "_";

        // 移動力
        int moveCount = holder.BattleMapStatus.BattleMapMoveStatus.TargetMonster.BattleStatus.MoveCount;

        foreach (BattleMapTile jointTile in bmt.JointInfo.GetJointTileList())
        {
            ProcessPathList(jointTile, movableTileList, pathList, path, moveCount);
        }

        return(pathList);
    }
Exemplo n.º 30
0
    /// <summary>
    /// 距離のチェック
    /// </summary>
    /// <param name="targetTile"></param>
    /// <param name="range"></param>
    /// <param name="tileSet"></param>
    private static void CheckRange(
        BattleMapTile targetTile, int range, HashSet <BattleMapTile> tileSet)
    {
        // このタイルを追加
        tileSet.Add(targetTile);

        // 距離を減少
        int tmpRange = range - 1;

        // 距離がなくなったら終了
        if (tmpRange <= 0)
        {
            return;
        }

        // タイルごとの処理
        foreach (BattleMapTile jointTile in targetTile.JointInfo.GetJointTileList())
        {
            CheckRange(jointTile, tmpRange, tileSet);
        }
    }