Ejemplo n.º 1
0
    // Sort Logtype using path infomation and write log queue
    private void WriteLog()
    {
        // Set Looted Item Data
        DataManager.Instance.LootedItemList = dungeonMaster.record.lootedItems;

        // Set Battle Log for each battle
        LogExecuter.Instance.BattleLog = dungeonMaster.record.battleLog;

        // Set Replay Log for each turn
        char positionInfo = '\0';
        int  xPos         = 0;
        int  yPos         = 0;

        for (int i = 0; i < dungeonMaster.record.pathfinding.Count - 1; ++i)
        {
            // check what is on the next step
            xPos = dungeonMaster.record.pathfinding[i + 1].x;
            yPos = dungeonMaster.record.pathfinding[i + 1].y;
            //int nextPosition = xPos * MapManager.Instance.InstanceDungeon.size + yPos;
            positionInfo = MapManager.Instance.InstanceDungeon.mapArray2D[yPos, xPos];

            // Generate Log and push in the queue
            LogExecuter.Instance.ReplayLog.Enqueue(MakeMoveLog(i));

            switch (positionInfo)
            {
            case 'M':                     // start battle
                LogExecuter.Instance.ReplayLog.Enqueue(MakeBattleLog(tmpMaster.GetMapObject(xPos, yPos).party));
                break;

            case 'I':                     // loot item
                LogExecuter.Instance.ReplayLog.Enqueue(MakeLootLog());
                break;

            case 'T':                     // mob on the item, do two things
                LogExecuter.Instance.ReplayLog.Enqueue(MakeBattleLog(tmpMaster.GetMapObject(xPos, yPos).party));
                LogExecuter.Instance.ReplayLog.Enqueue(MakeLootLog());
                break;

            case 'O':                     // find exit
                LogExecuter.Instance.ReplayLog.Enqueue(MakeWinLog());
                break;

            case ' ':                     // just move
                break;

            default:
                //Debug.LogError( "We can't go there" );
                break;
            }

            // Clear Used Map Data
            MapManager.Instance.InstanceDungeon.mapArray2D[yPos, xPos] = ' ';
        }

        // Check dungeon had cleared
        if (positionInfo != 'O')
        {
            LogExecuter.Instance.ReplayLog.Enqueue(MakeBattleLog(tmpMaster.GetMapObject(dungeonMaster.record.lastPosition.x, dungeonMaster.record.lastPosition.y).party));
            LogExecuter.Instance.ReplayLog.Enqueue(MakeFailLog());
        }
    }
Ejemplo n.º 2
0
        public bool Move(MoveDiretion direction, GameRecord record)
        {
            switch (direction)
            {
            case MoveDiretion.DOWN:
                position = new Int2D(position.x, position.y + 1);
                break;

            case MoveDiretion.LEFT:
                position = new Int2D(position.x - 1, position.y);
                break;

            case MoveDiretion.RIGHT:
                position = new Int2D(position.x + 1, position.y);
                break;

            case MoveDiretion.UP:
                position = new Int2D(position.x, position.y - 1);
                break;

            default:
                break;
            }

            // 일단 도착했으니까 제거
            if (position.Equals(currentMovePath.Peek()))
            {
                currentMovePath.Pop();
            }

            // 몹이 있는지 확인한다
            // 있으면 일단 전투부터 요청
            Party target = dungeonMaster.GetMapObject(position.x, position.y).party;

            if (target != null && target.partyType == PartyType.MOB)
            {
                if (!dungeonMaster.StartBattle(target))
                {
                    record.lastPosition = position;

                    return(false);
                }
            }

            // 아이템 있는지 확인한다
            Item item = (Item)dungeonMaster.GetMapObject(position.x, position.y).gameObject;

            if (item != null)
            {
                if (item.code == ItemCode.Ring)
                {
                    isRingDiscovered = true;
                }
                else
                {
                    dungeonMaster.LootItem(item, currentZoneId);
                    UpdateDestination();
                }
            }

            // 현재 존 정보 업데이트 할 것
            int newZoneId = dungeonMaster.GetZoneId(position);

            if (currentZoneId != newZoneId)
            {
                // 영역이 바뀌었다!
                currentZoneId = newZoneId;

                UpdateDestination();

                // 처음 가보는 곳이면 일단 스택에도 넣고, 가봤다고 기록도 하자
                if (!exploredZone.Contains(currentZoneId))
                {
                    dungeonZoneHistory.Push(currentZoneId);
                    exploredZone.Add(currentZoneId);
                }
            }

            return(true);
        }