예제 #1
0
    public void SaveGrid()
    {
        if (pCurrentLevel == null)
        {
            Debug.LogError("You need an active level to save!");
            return;
        }

        pCurrentLevel.pListGrid.Clear();
        for (int j = 0; j < mGrid.GetLength(1); j++)
        {
            for (int i = 0; i < mGrid.GetLength(0); i++)
            {
                if (i % 2 != j % 2)
                {
                    continue;
                }
                TileStruct ts = new TileStruct()
                {
                    pPosition  = mGrid[i, j].pPosition,
                    pBlockType = mGrid[i, j].pBlockType,
                    pVisibilty = mGrid[i, j].eVisibility
                };
                pCurrentLevel.pListGrid.Add(ts);
            }
        }
    }
예제 #2
0
    void Update() 
    {
        if (Oldposition != transform.position)
        {
            TileData = map.GetTileData(TileData.X, TileData.Y);
            Type = TileData.Type;
            x = TileData.X;
            y = TileData.Y;    

            if (!ReferenceEquals(oldTileData, TileData))
            {
                if (TileData.Type == TileType.Dirt)
                {
                    sr.sprite = SpriteHandler.GetTexture(TileData, map);
                    gameObject.tag = "Tile";
                }
                else if (TileData.Type == TileType.Rock)
                {
                    sr.sprite = SpriteHandler.GetTexture(TileData, map);
                    gameObject.tag = "Wall";
                }
                else if (TileData.Type == TileType.Wood)
                {
                    sr.sprite = rock;
                }
                else
                {
                    sr.sprite = dirt;
                }
            }
        }
        oldTileData = TileData;
        Oldposition = transform.position;
    }
 ////////////////////////////////////////////////////////////////////////
 // コンストラクタ
 ////////////////////////////////////////////////////////////////////////
 public TileBlock(Vector2 coord, TileType type)
 {
     tile            = new TileStruct();
     tile.coordinate = coord;
     tile.tileType   = type;
     tile.attributes = AnalyzeAttributes.INull;
     tile.isAnalyzed = false;
 }
예제 #4
0
            public static TileStruct CreateTileStruct(ref FileStruct.TSAreaTile tsAreaTile)
            {
                TileStruct ss = new TileStruct();

                ss.fullName   = Utils.CharsToString(tsAreaTile.tileName);
                ss.priSqStart = tsAreaTile.priSqStart;
                ss.priSqCount = tsAreaTile.priSqCount;
                ss.secSqStart = tsAreaTile.secSqStart;
                ss.secSqCount = tsAreaTile.secSqCount;
                return(ss);
            }
예제 #5
0
    public static TileStruct findAvailableTile(TileMap map, int Xoffset, int Yoffset)
    {
        TileStruct tile = new TileStruct(0,0,TileType.None);
        while (tile.Type != TileType.Dirt)
	    {

            tile = map.GetTileData(rand.Next(0, map.map[0].Length - 1) + Xoffset, rand.Next(0, map.map.Length - 1) + Yoffset);
	    }

        return tile;
    }
예제 #6
0
 //direction zero vertical corridor
 private static TileStruct[][] addCorridor(TileStruct[][] arr1, TileStruct[][] arr2, int corridorMin, int corridorMax, int direction)
 {
     var corridorSize = rand.Next(corridorMin, corridorMax);
     if (direction == 0)
     {
      //   addRoom(TileMap.CropMap2(arr1, arr1[0].Length/2, arr1.Length/2 - corridorSize, arr1[0].Length, arr1.Length/2 + corridorSize), corridorMin, corridorMax, 0, TileType.Dirt, TileType.Dirt);
     }
     //arr1[connectingIndexes] make corridor
     //arr2[connectingIndexes] make corridor
     // merge(arr1 = arr2);
     return null;
 }
예제 #7
0
    private Tile CreateNewTile(Vector2 position)
    {
        GameObject tileInstance = Instantiate(tilePrefab, position, Quaternion.identity, transform);
        Tile       tile         = tileInstance.GetComponent <Tile>();

        int x = (int)position.x;
        int y = (int)position.y;

        tileInstance.name = x + " | " + y;

        TileStruct newTile = new TileStruct(tile, position);

        tiles.Add(newTile);

        return(tile);
    }
예제 #8
0
    public static TileStruct[][] horizontalMerge(TileStruct[][] arr1, TileStruct[][] arr2)
    {
        //Use lists?

        TileStruct[][] result;
        result = new TileStruct[arr1.Length + arr2.Length][];
        int count = 0;
        for (int i = 0; i < arr1.Length; i++)
        {
            result[count] = arr1[i];
            count++;
        }
        for (int i = 0; i < arr2.Length; i++)
        {
            result[count] = arr2[i];
            count++;
        }
        return result;
    }
예제 #9
0
    public static TileStruct[][] GenMap(TileStruct[][] arr, int roomMin, int roomMax, int corridorMin, int corridorMax, int roomMargin, bool first) {

        //TODO crops return wrong result
        //Checks if the size of the inputted array is big enough to hold a room
        if (arr[0].Length >= roomMax + (roomMargin * 2) && arr[0].Length <= (roomMax + (roomMargin * 2))*RoomMaxEmptySpaceMod)
        {
            return addRoom(arr, roomMin, roomMax, roomMargin, TileType.Rock, TileType.Dirt);
        }
        else
        {
            //var leftLeaf = rand.Next(45,55);
            //var rightLeaf = 100-leftLeaf;
            if (first) //(rand.Next(1, 2) == 1)
            {
                var leftLeafMap = TileMap.CropMap(arr, 0, 0, arr.Length, arr.Length / 2);
                var leftLeaf = GenMap(leftLeafMap, roomMin, roomMax, corridorMin, corridorMax, roomMargin, !first);

                var rightLeafMap = TileMap.CropMap(arr, arr.Length / 2, arr.Length, arr.Length, arr.Length);
                var rightLeaf = GenMap(rightLeafMap, roomMin, roomMax, corridorMin, corridorMax,roomMargin, !first);
                var mergedLeaves = horizontalMerge(leftLeaf, rightLeaf);
                var corridorSize = rand.Next(corridorMin,corridorMax);
                return TileMap.CropMap2(mergedLeaves, arr[0].Length/2 - corridorSize - roomMargin, arr.Length/2 - corridorSize - roomMargin,
                    arr[0].Length/2+corridorSize+roomMargin, arr.Length/2 + corridorSize + roomMargin,
                    TileType.Dirt);
                //    GenMap(), GenMap)
                //return addCorridor(GenMap(cropmapHorizontal(leftLeaf)), (GenMap(cropmapHorizontal(rightLeaf)),
            }
            else
            {
                var lowerLeafMap = TileMap.CropMap(arr, 0, 0, arr.Length, arr.Length / 2);
                var lowerLeaf = GenMap(lowerLeafMap, roomMin, roomMax, corridorMin, corridorMax, roomMargin, !first);

                var upperLeafMap = TileMap.CropMap(arr, arr.Length / 2, arr.Length, arr.Length, arr.Length);
                var upperLeaf = GenMap(upperLeafMap, roomMin, roomMax, corridorMin, corridorMax, roomMargin, !first);


                //return addCorridor(GenMap(cropmapVertical(leftLeaf)), (GenMap(cropmapVertical(rightLeaf)),
            }   
        }
        return null;
    }
예제 #10
0
    /// <summary>
    /// Work around constructor DO NOT USE
    /// </summary>
	public virtual void Start () {




        map = new TileStruct[Height][];
        for (int i = 0; i < map.Length; i++)
        {
            map[i] = new TileStruct[Width];
        }


        for (int i = 0; i < 1000; i++)
        {
            GameObject coll = (GameObject)Instantiate(collider, new Vector3(0, 0, 0), Quaternion.identity);
            coll.transform.parent = colliderContainer.transform;
            colliders.Add(coll);
        }


    }
예제 #11
0
    public void CreateNewTiles()
    {
        Color[] colors = new Color[4];
        colors[0] = Color.red;
        colors[1] = Color.blue;
        colors[2] = Color.black;
        colors[3] = Color.yellow;

        Color currColor = Color.red;

        int nextColorIndex = 0;
        int colorCount     = colors.Length;

        int numbAssign = 1;

        for (int i = 0; i < 104; i++)
        {
            if (i % 13 == 0)
            {
                nextColorIndex++;
                if (nextColorIndex >= colorCount)
                {
                    nextColorIndex = 0;
                }
                numbAssign = 1;
            }

            TileStruct T = new TileStruct();
            T.color  = colors[nextColorIndex];
            T.number = numbAssign++;
            T.isUsed = false;
            tiles.Add(T);
        }

        if (CreateTileCR != null)
        {
            StopCoroutine(CreateTileCR);
        }
        CreateTileCR = StartCoroutine(CreateTiles());
    }
예제 #12
0
    public void SpawnStartExitPoint(TileStruct location, bool exit)
    { 
        if (!exit)
	    {
            int count = -1;
            TileStruct x = GetTileData(location.X, location.Y);

            int distance = 0 - location.X;

            for (int i = distance; i <= 0; i++)
            {
                x = GetTileData(location.X+i, location.Y);
                x.SetBoth(TerrainType.BlackCave);
                x.Type = TileType.Dirt;

                var downWalls = GetTileData(location.X + i, location.Y-1);
                downWalls.SetBoth(TerrainType.BlackCave);
                downWalls.Type = TileType.Rock;
                var upWalls = GetTileData(location.X + i, location.Y+1);
                upWalls.SetBoth(TerrainType.BlackCave);
                upWalls.Type = TileType.Rock;


                if (i == 0)
                {
                    var Wall = GetTileData(location.X + i + 1, location.Y);
                    Wall.SetBoth(TerrainType.BlackCave);
                    Wall.Type = TileType.Dirt;

                    Wall = GetTileData(location.X + i +1, location.Y-1);
                    Wall.SetBoth(TerrainType.BlackCave);
                    Wall.Type = TileType.Dirt;

                    Wall = GetTileData(location.X + i + 1, location.Y + 1);
                    Wall.SetBoth(TerrainType.BlackCave);
                    Wall.Type = TileType.Dirt;

                    Wall = GetTileData(location.X + i + 2, location.Y);
                    Wall.SetBoth(TerrainType.BlackCave);
                    Wall.Type = TileType.Dirt;

                }
            }
	    }
        
    }
예제 #13
0
    public void Copy(TileStruct[][] original, TileStruct[][] newCopy)
    {
        for (int y = 0; y < original.Length; y++)
        {
            for (int x = 0; x < original[0].Length; x++)
            {
                var tile = newCopy[y][x];
                original[y][x].Type = tile.Type;
                original[y][x].DecorType = tile.DecorType;
                original[y][x].SetBoth(tile.terrainType);


            }
        }


    }
예제 #14
0
 /// <summary>
 /// Draws the map.
 /// </summary>
 /// <param name="map">The map.</param>
 public void DrawMap(TileStruct[][] map)
 {
     var prefab = Resources.Load("Tile");
     foreach (var item in map)
     {
         foreach (var item2 in item)
         {
             var tile = (GameObject)Instantiate(prefab, new Vector3(((float)item2.X*3.2f),((float)item2.Y*3.2f)), Quaternion.identity);
             tile.transform.parent = gameObject.transform;
             var script = (Tile)tile.GetComponent<Tile>();
             script.TileData = item2;
         }
     }
 }
예제 #15
0
    public static void FloodFill(TileStruct[][] map, int x, int y, TileType targetType, TileType replacementType)
    {
        /*
        1: stuff the start pixel into a queue, note its color. note it as added.
        2: begin picking a pixel off the queue. If it's similar to the start pixel:
           2: put all its neighbours into the queue
              for each added pixel, note it's added. if already noted for a pixel, don't 
              add it anymore.
           3: color it with the destination color.
        3: nonempty => jump back to 2
        4: empty => we are finished

         */

        List<string> list = new List<string>();
        Queue<TileStruct> q = new Queue<TileStruct>();
        q.Enqueue(map[y][x]);

        while (q.Count != 0)
        {
            var tile = q.Dequeue();
            if (tile.Type == targetType)
            {
                tile.Type = replacementType;

                var west = MapGen.GetTileData(map, tile.X - 1, tile.Y);
                if (!list.Contains(west.X + "," + west.Y)) { q.Enqueue(west); list.Add(west.X + "," + west.Y); }
                //west.Type = replacementType;

                var east = MapGen.GetTileData(map, tile.X + 1, tile.Y);
                if (!list.Contains(east.X + "," + east.Y)) { q.Enqueue(east); list.Add(east.X + "," + east.Y); }
                //east.Type = replacementType;


                var north = MapGen.GetTileData(map, tile.X, tile.Y + 1);
                if (!list.Contains(north.X + "," + north.Y)) { q.Enqueue(north); list.Add(north.X + "," + north.Y); }
                //north.Type = replacementType;

                var south = MapGen.GetTileData(map, tile.X, tile.Y - 1);
                if (!list.Contains(south.X + "," + south.Y)) { q.Enqueue(north); list.Add(south.X + "," + south.Y); }
                //south.Type = replacementType;

            }
        }

    }
예제 #16
0
     public void PlaceRoadsign(TileStruct[][] map, TileStruct start, string hash)
     {
         Queue<TileStruct> stack = new Queue<TileStruct>();
         
         foreach (var item in map)
         {
             foreach (var item2 in item)
             {
                 item2.Visited = false;
             }
         }
         stack.Enqueue(start);

         int sentinel = 0;
         while (stack.Count != 0 || sentinel > 400)
         {
             sentinel++;

             var tile = stack.Dequeue();

             tile.Debug = true;

             var west = MapGen.GetTileData(map, tile.X - 1, tile.Y);
             var east = MapGen.GetTileData(map, tile.X + 1, tile.Y);
             var north = MapGen.GetTileData(map, tile.X, tile.Y + 1);
             var south = MapGen.GetTileData(map, tile.X, tile.Y - 1);

             if (tile.X >= WestMap.Width-1)
             {
                 west = MapGen.GetTileData(map, (tile.X - WestMap.Width) - 1, (tile.Y - SouthMap.Height));
                 east = MapGen.GetTileData(map, (tile.X - WestMap.Width) + 1, (tile.Y - SouthMap.Height));
                 north = MapGen.GetTileData(map, (tile.X - WestMap.Width), (tile.Y - SouthMap.Height) + 1);
                 south = MapGen.GetTileData(map, (tile.X - WestMap.Width), (tile.Y - SouthMap.Height) - 1);
             }

             List<TileStruct> dirts = new List<TileStruct>();
             if (west.Type  == TileType.Dirt)   dirts.Add(west);
             if (east.Type  == TileType.Dirt)   dirts.Add(east); 
             if (north.Type == TileType.Dirt)   dirts.Add(north); 
             if (south.Type == TileType.Dirt)   dirts.Add(south); 

             if (dirts.Count >= 3)
             {
                 foreach (var dirt in dirts)
                 {
                     if (tile.X != start.X && tile.Y != start.Y)
                     {
                        if(tile.X >= WestMap.Width-1)
                        {
                            var obj = (GameObject)Instantiate(Resources.Load("RoadSign"), new Vector3((tile.X) * 3.2f, (tile.Y) * 3.2f, -0.5f), Quaternion.identity);
                            obj.transform.GetChild(0).GetComponent<RoadSignBehaviour>().text = hash;
                            return;
                        }
                        else
	                    {
                            var obj = (GameObject)Instantiate(Resources.Load("RoadSign"), new Vector3((tile.X + WestMap.Width) * 3.2f, (tile.Y + SouthMap.Height) * 3.2f, -0.5f), Quaternion.identity);
                            obj.transform.GetChild(0).GetComponent<RoadSignBehaviour>().text = hash;
                            return;
	                    }
                     }
                 }
             }

             if (west.Visited == false && west.Type == TileType.Dirt)   stack.Enqueue(west);
             if (east.Visited == false && east.Type == TileType.Dirt)   stack.Enqueue(east);
             if (north.Visited == false && north.Type == TileType.Dirt) stack.Enqueue(north);
             if (south.Visited == false && south.Type == TileType.Dirt) stack.Enqueue(south);

         }
     }
예제 #17
0
    public void DrawCorridorHVertical(TileStruct[][] map, int y1, int y2, int x, TileType wallType, TileType floorType, TerrainType wallTerrainType, TerrainType floorTerrainType)
    {
        int length = Mathf.Abs(y1 - y2) + 1;

        int distanceA = y1 - y2;
        int distanceB = y1 - y2;


        for (int i = 0; i < length; i++)
        {
            TileStruct pointA;
            if (distanceA <= 0)
            {
                pointA = GetTileData(map, x, y1 + i);
            }
            else
            {
                pointA = GetTileData(map, x, y1 - i);
            }
            pointA.Type = floorType;
            pointA.SetBoth(wallTerrainType);

        }


    }
예제 #18
0
        /// <summary>
        /// 버튼을 생성하는 메소드
        /// </summary>
        /// <param name="ctrlNewTile">버튼 데이터 구조체</param>
        private void ButtonMaker(TileStruct ctrlNewTile = null)
        {
            #region 현재 + 버튼의 위치를 가져옴

            Point curPlusPos  = tileAdd.Location;
            Size  curPlusSize = tileAdd.Size;

            #endregion

            #region 새롭게 추가할 버튼

            bool bIsNextLined = false;
            bool bIsNew       = false;
            if (ctrlNewTile == null)
            {
                ctrlNewTile = new TileStruct(mTileList.Count, "새로운 연결")
                {
                    Text          = "새로운 연결",
                    MainThemeType = mSettingStruct.ThemeType,
                    MainStyleType = mSettingStruct.StyleType,
                    Name          = (mTileList.Count + 1).ToString()
                };
                bIsNew = true;
            }
            else
            {
                ctrlNewTile.MainThemeType = mSettingStruct.ThemeType;
                ctrlNewTile.MainStyleType = mSettingStruct.StyleType;
                ctrlNewTile.Name          = ctrlNewTile.TileNo.ToString();
            }
            ctrlNewTile.SaveSerialDataEvent += SaveSerialData;
            ctrlNewTile.RefreshEvent        += RefreshData;

            Point ptNewPoint = new Point(curPlusPos.X, curPlusPos.Y);
            if (mMainPanelRight < ptNewPoint.X + Const.DEFAULT_BUTTON_WIDTH)
            {
                ptNewPoint.X = Const.DEFAULT_MARGIN;
                ptNewPoint.Y = curPlusPos.Y + Const.DEFAULT_BUTTON_HEIGHT + Const.DEFAULT_MARGIN;
                bIsNextLined = true;
            }
            ctrlNewTile.Location = ptNewPoint;
            ctrlNewTile.Size     = Const.DEFAULT_BUTTON_SIZE;
            //ctrlNewTile.TileNo = ++mCurNewTileNum;
            if (bIsNew)
            {
                mTileList.Add(ctrlNewTile);
            }

            #endregion

            #region 버튼 패널에 붙임
            if (bIsNew)
            {
                // 버튼에 현재 테마 적용
                ThemeChangeEvent(mSettingStruct.ThemeType);
                StyleChangeEvent(mSettingStruct.StyleType);

                panMain.Controls.Add(mTileList[mTileList.Count - 1] as TileStruct);
            }
            else
            {
                panMain.Controls.Add(mTileList[ctrlNewTile.TileNo] as TileStruct);
            }

            #endregion

            #region +버튼 옮기기

            curPlusPos.X = ptNewPoint.X + Const.DEFAULT_BUTTON_WIDTH + Const.DEFAULT_MARGIN;
            if (bIsNextLined == false)
            {
                if (mMainPanelRight < curPlusPos.X + Const.DEFAULT_PLUS_BUTTON_WIDTH)
                {
                    curPlusPos.X = Const.DEFAULT_MARGIN;
                    curPlusPos.Y = ptNewPoint.Y + Const.DEFAULT_BUTTON_HEIGHT + Const.DEFAULT_MARGIN;
                }
            }
            else
            {
                curPlusPos.Y = ptNewPoint.Y;
            }
            tileAdd.Location = curPlusPos;

            #endregion
        }
예제 #19
0
    public void MergeAllMaps()
    {
        var outArr = new TileStruct[NorthMap.Height+CenterMap.Height+SouthMap.Height][];
        for (int i = 0; i < outArr.Length; i++)
		{
            outArr[i] = new TileStruct[WestMap.Width + CenterMap.Width + SouthMap.Height];
            for (int i2 = 0; i2 < outArr[i].Length; i2++)
            {
                outArr[i][i2] = new TileStruct(i2, i, TileType.None);
            }
		}

        for (int y = 0; y  < WestMap.Height; y++)
        {
            for (int x = 0; x < WestMap.Width; x++)
            {
                var tile = WestMap.map[y][x];
                tile.Y = tile.Y + SouthMap.Height;
                outArr[y + SouthMap.Height][x] = tile;
            }
        }

        for (int y = 0; y < EastMap.Height; y++)
        {
            for (int x = 0; x < EastMap.Width; x++)
            {
                var tile = EastMap.map[y][x];
                tile.Y = tile.Y + SouthMap.Height;
                tile.X = tile.X + WestMap.Width + CenterMap.Width;
                outArr[y + SouthMap.Height][x+WestMap.Width+CenterMap.Width] = tile;
            }
        }

        for (int y = 0; y < CenterMap.Height; y++)
        {
            for (int x = 0; x < CenterMap.Width; x++)
            {
                var tile = CenterMap.map[y][x];
                tile.Y = tile.Y + SouthMap.Height;
                tile.X = tile.X + WestMap.Width;
                outArr[y + SouthMap.Height][x + WestMap.Width] = tile;
            }
        }

        for (int y = 0; y < SouthMap.Height; y++)
        {
            for (int x = 0; x < SouthMap.Width; x++)
            {
                var tile = SouthMap.map[y][x];
                tile.X = tile.X + WestMap.Width;
                outArr[y][x + WestMap.Width] = tile;
            }
        }

        for (int y = 0; y < NorthMap.Height; y++)
        {
            for (int x = 0; x < NorthMap.Width; x++)
            {
                var tile = NorthMap.map[y][x];
                tile.X = tile.X + WestMap.Width;
                tile.Y = tile.Y + SouthMap.Height + CenterMap.Height;
                outArr[y + SouthMap.Height + CenterMap.Height][x + WestMap.Width] = tile;
            }
        }
        map = outArr;
        Height = map.Length;
        Width = map[0].Length;

    }
예제 #20
0
    public static TileStruct[][] CropMap(TileStruct[][] map,int x1, int y1, int x2, int y2)
    {
        int height = Mathf.Abs(y1 - y2);
        IEnumerable<TileStruct> arr = map.Skip(x1)
                            .Take(x2 - x1)
                            .SelectMany(a => a.Skip(y1).Take(y2 - y1));

         var array = arr.Select((x, i) => new { Index = i, Value = x })
        .GroupBy(x => x.Index / height)
        .Select(x => x.Select(v => v.Value).ToList().ToArray())
        .ToArray();

        TileStruct[][] outArray = new TileStruct[array.Length][];
         for (int i = 0; i < array.Length; i++)
		{
             outArray[i] = new TileStruct[array[i].Length];
            for (int y = 0; y < array[i].Length; y++)
            {
                var input = array[i][y];
                outArray[i][y] = new TileStruct(input.X, input.Y, input.Type);
            }
		}

         return outArray;
    }
예제 #21
0
파일: XmlMgr.cs 프로젝트: Eskeptor/SeeReal
        /// <summary>
        /// 계정을 불러오는 메소드
        /// (각 배열의 짝수구간에는 ID, 홀수구간에는 PW가 들어있음)
        /// </summary>
        /// <param name="listSerial">불러온 계정을 저장할 리스트(ref)</param>
        /// <returns>로드 결과</returns>
        public static LoadResult LoadSerialData(ref ArrayList mTileList)
        {
            LoadResult eResult = LoadResult.NoData;
            string     strPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Const.PATH_SERIAL_FOLDER + Path.DirectorySeparatorChar + XML_FILE;

            if (mTileList.Count > 0)
            {
                mTileList.Clear();
            }

            try
            {
                string strNodes       = string.Format(@"/{0}/{1}", XML_ROOT, XML_SUB);
                string strParity      = string.Empty;
                string strStopBit     = string.Empty;
                string strFlowControl = string.Empty;

                XmlDocument xDoc = new XmlDocument();
                xDoc.Load(strPath);
                XmlNodeList nodeList = xDoc.SelectNodes(strNodes);

                foreach (XmlNode xmlNode in nodeList)
                {
                    int        nTileNo    = int.Parse(xmlNode.SelectSingleNode(XML_SUB_TILE).InnerText);
                    TileStruct tileStruct = new TileStruct(nTileNo, xmlNode.Attributes[XML_SUB_TITLE].Value);
                    tileStruct.SerialData.SerialName  = xmlNode.Attributes[XML_SUB_TITLE].Value;
                    tileStruct.SerialData.PortNum     = int.Parse(xmlNode.SelectSingleNode(XML_SUB_COM).InnerText);
                    tileStruct.SerialData.BaudRate    = int.Parse(xmlNode.SelectSingleNode(XML_SUB_BAUD).InnerText);
                    tileStruct.SerialData.DataBit     = int.Parse(xmlNode.SelectSingleNode(XML_SUB_DATABIT).InnerText);
                    tileStruct.SerialData.ParityCode  = (Parity)int.Parse(xmlNode.SelectSingleNode(XML_SUB_PARITY).InnerText);
                    tileStruct.SerialData.StopBitCode = (StopBits)int.Parse(xmlNode.SelectSingleNode(XML_SUB_STOPBIT).InnerText);
                    tileStruct.SerialData.FlowControl = (SerialStruct.FlowC) int.Parse(xmlNode.SelectSingleNode(XML_SUB_FLOW).InnerText);
                    tileStruct.SerialData.MacroEnable = int.Parse(xmlNode.SelectSingleNode(XML_SUB_MACROENABLE).InnerText) == 1;
                    tileStruct.SerialData.RunDelay    = int.Parse(xmlNode.SelectSingleNode(XML_SUB_DELAY).InnerText);
                    tileStruct.TileColor              = (Const.StyleType) int.Parse(xmlNode.SelectSingleNode(XML_SUB_TILECOLOR).InnerText);
                    tileStruct.SerialName             = tileStruct.SerialData.SerialName;
                    tileStruct.Text                   = tileStruct.SerialData.SerialName;
                    tileStruct.SerialData.LogSave     = int.Parse(xmlNode.SelectSingleNode(XML_SUB_LOG_SAVE).InnerText) == 1;
                    tileStruct.SerialData.LogSaveType = (Const.LogSaveType) int.Parse(xmlNode.SelectSingleNode(XML_SUB_LOG_SAVE_TYPE).InnerText);
                    tileStruct.SerialData.LogToken    = (Const.LogToken) int.Parse(xmlNode.SelectSingleNode(XML_SUB_LOG_SAVE_TOKEN).InnerText);
                    tileStruct.SerialData.LogSavePath = xmlNode.SelectSingleNode(XML_SUB_LOG_SAVE_PATH).InnerText;

                    XmlNodeList nodeMacroList = xmlNode.SelectSingleNode(XML_SUB_SUB).ChildNodes;
                    foreach (XmlNode xmlMacro in nodeMacroList)
                    {
                        MacroStruct macroStruct = new MacroStruct();
                        macroStruct.MacroName = xmlMacro.SelectSingleNode(XML_SUB_SUB_MACRO_NAME).InnerText;
                        macroStruct.Macro     = xmlMacro.SelectSingleNode(XML_SUB_SUB_MACRO).InnerText;
                        macroStruct.Enable    = int.Parse(xmlMacro.SelectSingleNode(XML_SUB_SUB_MACRO_ENABLE).InnerText) == 1 ? true : false;
                        tileStruct.SerialData.MacroList.Add(macroStruct);
                    }

                    mTileList.Add(tileStruct);
                }

                if (mTileList.Count > 0)
                {
                    eResult = LoadResult.Success;
                }
                else
                {
                    eResult = LoadResult.NoData;
                }
            }
            catch
            {
                eResult = LoadResult.Fail_FileLoad;
            }

            return(eResult);
        }
예제 #22
0
 /// <summary>
 /// Modify the index of the map at specified coordinates
 /// </summary>
 /// <param name="x">X coordinate</param>
 /// <param name="y">Y coordinate</param>
 /// <param name="type">Tile type</param>
 public void SetTileStruct(int x, int y, TileType type)
 {
     Array values = Enum.GetValues(typeof(TileType));
     TileType randomBar = (TileType)values.GetValue(rand.Next(values.Length-1));
     map[x][y] = new TileStruct(x, y, randomBar);
 }
예제 #23
0
    public void BreadthFirst(TileStruct[][] map, TileStruct start)
    {
        stack.Push(start);

        while (stack.Count != 0)
        {
            var tile = stack.Pop();

            tile.Visited = true;

            var west = MapGen.GetTileData(map, tile.X - 1, tile.Y);
            var east = MapGen.GetTileData(map, tile.X + 1, tile.Y);
            var north = MapGen.GetTileData(map, tile.X, tile.Y + 1);
            var south = MapGen.GetTileData(map, tile.X, tile.Y - 1);

            if (west.Visited == false && west.Type == TileType.Dirt) stack.Push(west);
            if (east.Visited == false && east.Type == TileType.Dirt) stack.Push(east);
            if (north.Visited == false && north.Type == TileType.Dirt) stack.Push(north);
            if (south.Visited == false && south.Type == TileType.Dirt) stack.Push(south);

        }

        for (int y = 0; y < map.Length; y++)
        {
            for (int x = 0; x < map[0].Length; x++)
            {
                var tile = map[y][x];
                if (tile.Type == TileType.Dirt && tile.Visited == false)
                {
                    tile.Type = TileType.Rock;
                }
            }
        }
    }
예제 #24
0
 public TileStruct ClosestToBorderYReverse(TileStruct[][] map, TileType type)
 {
     int bestValue = 0;
     TileStruct bestMatch = null;
     for (int y = map.Length - 1; y >= 0; y--)
     {
         for (int x = map[0].Length - 1; x >= 0; x--)
         {
             if (map[y][x].Type == type && y > bestValue)
             {
                 bestValue = map[y][x].Y;
                 bestMatch = map[y][x];
             }
         }
     }
     List<TileStruct> bestMatches = new List<TileStruct>();
     for (int i = 0; i < map[0].Length; i++)
     {
         if (map[bestValue][i].Type == TileType.Dirt)
         {
             bestMatches.Add(map[bestValue][i]);
         }
     }
     return bestMatches[rand.Next(0, bestMatches.Count - 1)];
 }
예제 #25
0
    //Merge arr1 with arr2, arr1 is at top arr2 is at bottom
    public static TileStruct[][] verticalMerge(TileStruct[][] arr1, TileStruct[][] arr2)
    {
        var xOdd = arr2.Length % 2;


    
        //var yOdd = arr[0].Length % 2;


        TileStruct[][] result;
        result = new TileStruct[arr1.Length][];

        for (int i = 0; i < result.Length; i++)
        {
            result[i] = new TileStruct[arr1[0].Length + arr2[0].Length];

            int count = 0;//TODO fix off by one
            for (int y = 0; y < (result[i].Length / 2); y++)
            {
                result[i][y] = arr1[i][count];
                result[i][y].Y = y;
                result[i][y].X = i;

               //var originalX = r
               result[i][y + arr1[0].Length] = arr2[i][y];
               var arr = result[i][y + arr1[0].Length];
               result[i][y + arr1[0].Length].Y += arr1.Length/2;
               //result[i][y + arr1[0].Length].X = result[i][y].X + arr1[0].Length;
               count++;

            }
            if (arr1[0].Length-arr2[0].Length == 1)
            {
                result[i][count] = arr2[i][arr2[i].Length - 1];
            }
            else if (arr1[0].Length-arr2[0].Length == -1)
            {
                result[i][count + arr1[0].Length + 1] = arr1[i][arr1[i].Length - 1];
                
            }
        }

        return result;
    }
예제 #26
0
    //private static TileStruct[][] tileListToArr(List<List<TileStruct>> list)
    //{
    //    TileStruct[][] outArr = new TileStruct[list.Count][];

    //    for (int i = 0; i < list.Count; i++)
    //    {
    //        outArr[i] = list[i].ToArray();
    //    }

    //    return outArr;
    //}

    public static TileStruct[][] addRoom(TileStruct[][] arr, int roomMin, int roomMax, int roomMargin, TileType wall, TileType floor)
    {
        int roomSize = rand.Next(roomMin, roomMax);



        for (int i = 0; i < arr.Length; i++)
        {
            for (int y = 0; y < arr[i].Length; y++)
            {
                //Checks if the loop is in the position to add a floor tile
                if ((i < (arr.Length-1) - roomMargin && i > roomMargin) && y < (arr[i].Length-1) - roomMargin && y > roomMargin)
                {
                    arr[i][y].Type = floor;
                    //add to a room object
                }

                //Checks if the loop is in the position to add a Wall tile
                else if ((i <= (arr.Length-1) - roomMargin && i >= roomMargin) && y <= (arr[i].Length-1) - roomMargin && y >= roomMargin)
                {
                    arr[i][y].Type = wall;
                    //add to a room object
                }

            }
        }
        return arr;
    }
예제 #27
0
    private TileStruct findAvailableTile(bool EastOrNorth)
    {
        TileStruct tile = new TileStruct(0, 0, TileType.None);
        while (tile.Type != TileType.Dirt)
        {
            if (!EastOrNorth)
            {
                tile = GetTileData(rand.Next(0, (map[0].Length - 1) - 20), rand.Next(0, (map.Length - 1) - 20));
            }
            else
            {
                tile = GetTileData(rand.Next(20, (map[0].Length - 1)), rand.Next(20, (map.Length - 1)));
            }

        }

        return tile;
    }
예제 #28
0
    public TileStruct Clone()
    {
        var outTile = new TileStruct(X,Y,Type);

        outTile.FloorTerrainType = FloorTerrainType;
        outTile.WallTerrainType = FloorTerrainType;

        return outTile;
    }
예제 #29
0
파일: XmlMgr.cs 프로젝트: Eskeptor/SeeReal
        /// <summary>
        /// 계정 정보를 저장하는 메소드
        /// (각 배열의 짝수구간에는 ID, 홀수구간에는 PW가 들어있음)
        /// </summary>
        /// <param name="listSerial"></param>
        /// <returns></returns>
        public static bool SaveSerialData(ArrayList mTileList)
        {
            bool   bResult = false;
            string strPath = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + Const.PATH_SERIAL_FOLDER + Path.DirectorySeparatorChar + XML_FILE;

            try
            {
                XmlDocument xDoc = new XmlDocument();

                // 루트 노드
                XmlNode rootNode = xDoc.CreateElement(XML_ROOT);            // Serials
                xDoc.AppendChild(rootNode);

                int        nSize      = mTileList.Count;
                TileStruct tileStruct = null;

                // 하위 노드
                for (int i = 0; i < nSize; i++)
                {
                    tileStruct = mTileList[i] as TileStruct;

                    if (tileStruct != null)
                    {
                        XmlNode xmlSubNode = xDoc.CreateElement(XML_SUB);                   // Serial

                        XmlAttribute xmlAttribute = xDoc.CreateAttribute(XML_SUB_TITLE);    // Name
                        xmlAttribute.Value = tileStruct.SerialData.SerialName;
                        xmlSubNode.Attributes.Append(xmlAttribute);

                        XmlNode nodeTile = xDoc.CreateElement(XML_SUB_TILE);                // TileNo
                        nodeTile.InnerText = tileStruct.TileNo.ToString();
                        xmlSubNode.AppendChild(nodeTile);

                        XmlNode nodePort = xDoc.CreateElement(XML_SUB_COM);                 // COM
                        nodePort.InnerText = tileStruct.SerialData.PortNum.ToString();
                        xmlSubNode.AppendChild(nodePort);

                        XmlNode nodeBaud = xDoc.CreateElement(XML_SUB_BAUD);                // Baudrate
                        nodeBaud.InnerText = tileStruct.SerialData.BaudRate.ToString();
                        xmlSubNode.AppendChild(nodeBaud);

                        XmlNode nodeDataBit = xDoc.CreateElement(XML_SUB_DATABIT);          // DataBit
                        nodeDataBit.InnerText = tileStruct.SerialData.DataBit.ToString();
                        xmlSubNode.AppendChild(nodeDataBit);

                        XmlNode nodeParity = xDoc.CreateElement(XML_SUB_PARITY);            // Parity
                        nodeParity.InnerText = string.Format("{0}", (int)tileStruct.SerialData.ParityCode);
                        xmlSubNode.AppendChild(nodeParity);

                        XmlNode nodeStopBit = xDoc.CreateElement(XML_SUB_STOPBIT);          // StopBit
                        nodeStopBit.InnerText = string.Format("{0}", (int)tileStruct.SerialData.StopBitCode);
                        xmlSubNode.AppendChild(nodeStopBit);

                        XmlNode nodeFlow = xDoc.CreateElement(XML_SUB_FLOW);                // FlowControl
                        nodeFlow.InnerText = string.Format("{0}", (int)tileStruct.SerialData.FlowControl);
                        xmlSubNode.AppendChild(nodeFlow);

                        XmlNode nodeMacroEnable = xDoc.CreateElement(XML_SUB_MACROENABLE);  // MacroEnable
                        nodeMacroEnable.InnerText = string.Format("{0}", tileStruct.SerialData.MacroEnable ? 1 : 0);
                        xmlSubNode.AppendChild(nodeMacroEnable);

                        XmlNode nodeDelay = xDoc.CreateElement(XML_SUB_DELAY);              // Delay
                        nodeDelay.InnerText = string.Format("{0}", tileStruct.SerialData.RunDelay);
                        xmlSubNode.AppendChild(nodeDelay);

                        XmlNode nodeTileColor = xDoc.CreateElement(XML_SUB_TILECOLOR);      // Tile Color
                        nodeTileColor.InnerText = string.Format("{0}", (int)tileStruct.TileColor);
                        xmlSubNode.AppendChild(nodeTileColor);

                        XmlNode nodeLogSave = xDoc.CreateElement(XML_SUB_LOG_SAVE);         // Log Save
                        nodeLogSave.InnerText = string.Format("{0}", tileStruct.SerialData.LogSave ? 1 : 0);
                        xmlSubNode.AppendChild(nodeLogSave);

                        XmlNode nodeLogSaveType = xDoc.CreateElement(XML_SUB_LOG_SAVE_TYPE);// Log Save Type
                        nodeLogSaveType.InnerText = string.Format("{0}", (int)tileStruct.SerialData.LogSaveType);
                        xmlSubNode.AppendChild(nodeLogSaveType);

                        XmlNode nodeLogToken = xDoc.CreateElement(XML_SUB_LOG_SAVE_TOKEN);  // Log Save Token
                        nodeLogToken.InnerText = string.Format("{0}", (int)tileStruct.SerialData.LogToken);
                        xmlSubNode.AppendChild(nodeLogToken);

                        XmlNode nodeLogSavePath = xDoc.CreateElement(XML_SUB_LOG_SAVE_PATH);// Log Save Path
                        nodeLogSavePath.InnerText = string.Format("{0}", tileStruct.SerialData.LogSavePath);
                        xmlSubNode.AppendChild(nodeLogSavePath);

                        XmlNode nodeMacroList = xDoc.CreateElement(XML_SUB_SUB);            // MacroList
                        int     nCount        = 0;
                        string  strNodeNo     = string.Empty;
                        foreach (MacroStruct macro in tileStruct.SerialData.MacroList)
                        {
                            strNodeNo = string.Format("{0}{1}", XML_SUB_SUB_MACRO_NO, nCount++);
                            XmlNode nodeNo = xDoc.CreateElement(strNodeNo);

                            XmlNode nodeName = xDoc.CreateElement(XML_SUB_SUB_MACRO_NAME);
                            nodeName.InnerText = macro.MacroName;
                            nodeNo.AppendChild(nodeName);

                            XmlNode nodeMacro = xDoc.CreateElement(XML_SUB_SUB_MACRO);
                            nodeMacro.InnerText = macro.Macro;
                            nodeNo.AppendChild(nodeMacro);

                            XmlNode nodeEnable = xDoc.CreateElement(XML_SUB_SUB_MACRO_ENABLE);
                            nodeEnable.InnerText = string.Format("{0}", macro.Enable ? 1 : 0);
                            nodeNo.AppendChild(nodeEnable);

                            nodeMacroList.AppendChild(nodeNo);
                        }
                        xmlSubNode.AppendChild(nodeMacroList);

                        rootNode.AppendChild(xmlSubNode);
                    }
                }

                xDoc.Save(strPath);
                bResult = true;
            }
            catch
            {
                bResult = false;
            }

            return(bResult);
        }
예제 #30
0
    public TileStruct ClosestToBorderXReverse(TileStruct[][] map, TileType type)
    {
        int bestValue = 0;
        //List<TileStruct> bestMatches = new List<TileStruct>();
        TileStruct bestMatch = null;
        for (int y = map.Length - 1; y >= 0; y--)
        {
            for (int x = map[0].Length - 1; x >= 0; x--)
            {
                if (map[y][x].Type == type && x > bestValue)
                {
                    bestValue = map[y][x].X;
                    bestMatch = map[y][x];



                    //if (bestMatches.Count == 0 || bestValue < bestMatches[bestMatches.Count - 1].X)
                    //{
                    //    bestMatches = new List<TileStruct>();
                    //    bestMatches.Add(bestMatch);
                    //}
                    //else if (bestValue == bestMatches[bestMatches.Count - 1].X)
                    //{
                    //    bestMatches.Add(bestMatch);
                    //}
                }
            }
        }
        List<TileStruct> bestMatches = new List<TileStruct>();
        for (int i = 0; i < map.Length; i++)
        {
            if (map[i][bestValue].Type == TileType.Dirt)
            {
                bestMatches.Add(map[i][bestValue]);
            }
        }
        return bestMatches[rand.Next(0, bestMatches.Count-1)];
    }
예제 #31
0
    public static Sprite GetTexture(TileStruct tile, TileMap map)
    {

        var left =  map.GetTileData(tile.X - 1, tile.Y);
        var right =    map.GetTileData(tile.X + 1, tile.Y);
        var north =    map.GetTileData(tile.X, tile.Y + 1);
        var south =    map.GetTileData(tile.X, tile.Y - 1);
        var upLeft =    map.GetTileData(tile.X - 1, tile.Y + 1);
        var upRight =    map.GetTileData(tile.X + 1, tile.Y + 1);
        var downLeft =    map.GetTileData(tile.X - 1, tile.Y - 1);
        var downRight =    map.GetTileData(tile.X + 1, tile.Y - 1);




        if (left.Type == TileType.Rock || right.Type == TileType.Rock || north.Type == TileType.Rock || south.Type == TileType.Rock || upLeft.Type == TileType.Rock || upRight.Type == TileType.Rock || downLeft.Type == TileType.Rock || downRight.Type == TileType.Rock)
        {
            tile.DecorType = DecorType.None;
        }

        if (tile.Type == TileType.Rock)
        {
            return getSpriteWithName(tile.WallTerrainType + getNumber(
            tile.WallTerrainType,
            left.GetTerrainType(),
            right.GetTerrainType(),
            north.GetTerrainType(),
            south.GetTerrainType(),
            upLeft.GetTerrainType(),
            upRight.GetTerrainType(),
            downLeft.GetTerrainType(),
            downRight.GetTerrainType()
            ),


            tile.Type);

        }




        string decor = Enum.GetName(typeof(DecorType), tile.DecorType);



        if (tile.Type == TileType.Dirt)
        {
            if (tile.DecorType == DecorType.None)
            {
                return getSpriteWithName(tile.GetTerrainType() + getNumberFloors(
                tile.GetTerrainType(),
                left.GetTerrainType(),
                right.GetTerrainType(),
                north.GetTerrainType(),
                south.GetTerrainType(),
                upLeft.GetTerrainType(),
                upRight.GetTerrainType(),
                downLeft.GetTerrainType(),
                downRight.GetTerrainType()),
                tile.Type);
            }
            else
            {
                return getSpriteWithName(tile.GetTerrainType() + decor + getNumberFloors(
                tile.GetTerrainType() + tile.GetDecorType(),
                left.GetTerrainType() + left.GetDecorType(),
                right.GetTerrainType() + right.GetDecorType(),
                north.GetTerrainType() + north.GetDecorType(),
                south.GetTerrainType() + south.GetDecorType(),
                upLeft.GetTerrainType() + upLeft.GetDecorType(),
                upRight.GetTerrainType() + upRight.GetDecorType(),
                downLeft.GetTerrainType() + downLeft.GetDecorType(),
                downRight.GetTerrainType() + downRight.GetDecorType()
                ),


                tile.Type);
            }
        }

        return null;

    }
예제 #32
0
 public TileStruct ClosestToBorderX(TileStruct[][] map, TileType type)
 {
     int bestValue = map[0].Length;
     TileStruct bestMatch = null;
     for (int y = 0; y < map.Length; y++)
     {
         for (int x = 0; x < map[0].Length; x++)
         {
             if (map[y][x].Type == type && x < bestValue)
             {
                 bestValue = x;
                 bestMatch = map[y][x];
             }
             if (map[y][x].Type == type && x < bestValue)
             {
                 bestValue = x;
                 bestMatch = map[y][x];
             }
         }
     }
     List<TileStruct> bestMatches = new List<TileStruct>();
     for (int i = 0; i < map.Length; i++)
     {
         if (map[i][bestValue].Type == TileType.Dirt)
         {
             bestMatches.Add(map[i][bestValue]);
         }
     }
     return bestMatches[rand.Next(0, bestMatches.Count - 1)];
 }
예제 #33
0
 private TileStruct[][] clone(TileStruct[][] map)
 {
     var newMap = new TileStruct[map.Length][];
     for (int y = 0; y < map.Length; y++)
     {
         newMap[y] = new TileStruct[map[0].Length];
         for (int x = 0; x < map[0].Length; x++)
         {
             var currentTile = map[y][x];
             newMap[y][x] = new TileStruct(currentTile.X, currentTile.Y, currentTile.Type, currentTile.terrainType, currentTile.DecorType);
         }
     }
     return newMap;
 }
예제 #34
0
    /// <summary>
    /// Gets the tile data at specified map coordinates
    /// </summary>
    /// <param name="x">X coordinate</param>
    /// <param name="y">Y coordinate</param>
    /// <returns>TileStruct.</returns>
    public TileStruct GetTileData(int x, int y)
    {
        var outType = new TileStruct(x, y, TileType.None);
        if (x < 0 || x >= map[0].Length)
        {
            outType.Type = TileType.None;
            
        }
        else if (y < 0 || y >= map.Length)
        {
            outType.Type = TileType.None;
        }
        else
        {

                return map[y][x];


        }
        return outType;

    }
예제 #35
0
    public void CopyWithStartPoints(TileMap target, TileStruct[][] template, int startX, int startY, int endX, int endY)
    {
        Copy(target.map, template);
        target.StartPointX = startX;
        target.StartPointY = startY;
        target.EndPointX = endX;
        target.EndPointY = endY;

    }
예제 #36
0
    public TileStruct GetTileData2(int x, int y)
    {
        var outType = new TileStruct(x, y, TileType.None);
        if (x < 0 || x >= map[0].Length)
        {
            outType.Type = TileType.None;

        }
        else if (y < 0 || y >= map.Length)
        {
            outType.Type = TileType.None;
        }
        else
        {
            var oldTile = map[y][x];
            oldTile.X = x;
            oldTile.Y = y;
            return oldTile;


        }
        return outType;

    }
예제 #37
0
    //no cloning
    public static TileStruct[][] CropMap2(TileStruct[][] map, int x1, int y1, int x2, int y2, TileType corridor)
    {
        int height = Mathf.Abs(y1 - y2);
        IEnumerable<TileStruct> arr = map.Skip(x1)
                            .Take(x2 - x1)
                            .SelectMany(a => a.Skip(y1).Take(y2 - y1));

        var array = arr.Select((x, i) => new { Index = i, Value = x })
       .GroupBy(x => x.Index / height)
       
       .Select(x => x.Select(v => v.Value).ToList().ToArray())
   
       .ToArray();


        foreach (var item in array)
        {
            foreach (var item2 in item)
            {
                item2.Type = corridor;
            }
        }

        

        return array;
    }
예제 #38
0
    public void DrawCorridorHorizontal(TileStruct[][] map, int x1, int x2, int y, TileType wallType, TileType floorType, TerrainType wallTerrainType, TerrainType floorTerrainType)
    {
        int length = Mathf.Abs(x1 - x2) + 1;

        int distanceA = x1 - x2;
        int distanceB = x1 - x2;


        for (int i = 0; i < length; i++)
        {
            TileStruct pointA;
            if (distanceA <= 0)
            {
                pointA = GetTileData(map, x1 + i, y);
            }
            else
            {
                pointA = GetTileData(map, x1 - i, y);
            }
            pointA.Type = floorType;
            pointA.SetBoth(wallTerrainType);



        }


    }