コード例 #1
0
    public void LineAddWithMapBlockInfo(MapBlockInfo start, MapBlockInfo end)
    {
        bool isExist = false;

        //验重
        lineList.ForEach(line =>
        {
            if (line.start == start && line.end == end)
            {
                isExist = true;
            }
            else if (line.start == start && line.end == end)
            {
                isExist = true;
            }
        });
        if (!isExist)
        {
            Line newLine = new Line
            {
                start = start,
                end   = end
            };

            lineList.Add(newLine);
        }
    }
コード例 #2
0
    public void PlayerEnterBlock(BlockController bc)
    {
        MapBlockInfo mbi       = bc.mbi;
        List <Line>  showLines = new List <Line>();

        lineList.ForEach(line =>
        {
            if (line.start == mbi || line.end == mbi)
            {
                showLines.Add(line);
            }
        });

        channelLines.ForEach(cline =>
        {
            foreach (Line line in showLines)
            {
                if (cline.line.start == line.start && cline.line.end == line.end)
                {
                    //线段显示
                    cline.ChangeColor(ColorAngleChange(cline.CurrColor(), 1.0f));
                }
            }
        });
        //block显示
        foreach (Line line in showLines)
        {
            //中心位置会重复设置
            line.start.ChangeColor(ColorAngleChange(line.start.CurrColor(), 1.0f));
            line.end.ChangeColor(ColorAngleChange(line.end.CurrColor(), 1.0f));
        }
    }
コード例 #3
0
    public MapBlockInfo SpwanMapBlockInfo(int x, int y, MapBlockType type)
    {
        GameObject   gb      = (GameObject)Instantiate(Resources.Load("Block/MapBlock"), transform.position, Quaternion.identity);
        MapBlockInfo mapInfo = gb.GetComponent <MapBlockInfo>();

        mapInfo.indexInfo.x        = x;
        mapInfo.indexInfo.y        = y;
        mapInfo.blockType          = type;
        mapInfo.transform.position = new Vector2(mapInfo.indexInfo.x, mapInfo.indexInfo.y);
        mapInfo.transform.parent   = mapLocation.transform;
        return(mapInfo);
    }
コード例 #4
0
 //判断mbi的方向
 public void CalBlockDirection(MapBlockInfo mbi, BlockController bc)
 {
     foreach (Line line in lineList)
     {
         if (line.start == mbi)
         {
             if (line.start.indexInfo.x > line.end.indexInfo.x)
             {
                 bc.directions.Add(BlockDireciton.Left);
                 continue;
             }
             if (line.start.indexInfo.x < line.end.indexInfo.x)
             {
                 bc.directions.Add(BlockDireciton.Right);
                 continue;
             }
             if (line.start.indexInfo.y > line.end.indexInfo.y)
             {
                 bc.directions.Add(BlockDireciton.Bottom);
                 continue;
             }
             if (line.start.indexInfo.y < line.end.indexInfo.y)
             {
                 bc.directions.Add(BlockDireciton.Top);
                 continue;
             }
         }
         if (line.end == mbi)
         {
             if (line.start.indexInfo.x > line.end.indexInfo.x)
             {
                 bc.directions.Add(BlockDireciton.Right);
                 continue;
             }
             if (line.start.indexInfo.x < line.end.indexInfo.x)
             {
                 bc.directions.Add(BlockDireciton.Left);
                 continue;
             }
             if (line.start.indexInfo.y > line.end.indexInfo.y)
             {
                 bc.directions.Add(BlockDireciton.Top);
                 continue;
             }
             if (line.start.indexInfo.y < line.end.indexInfo.y)
             {
                 bc.directions.Add(BlockDireciton.Bottom);
                 continue;
             }
         }
     }
 }
コード例 #5
0
    public void AddShopAndEvent()
    {
        Location     randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)];
        MapBlockInfo mapInfoShop    = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.shopType);

        nodeList.Add(mapInfoShop);
        canAddNodeLocationList.Remove(randomLocation);
        randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)];
        MapBlockInfo mapInfoEvent = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.eventType);

        nodeList.Add(mapInfoEvent);
        canAddNodeLocationList.Remove(randomLocation);
    }
コード例 #6
0
    private void ConfigMap()
    {
        MapBlockInfo mapInfo = SpwanMapBlockInfo(0, 0, MapBlockType.startType);

        nodeList.Add(mapInfo);

        while (nodeList.Count < endStep)
        {
            AddNext(nodeList[nodeList.Count - 1]);
        }

        if (nodeList.Count == endStep)
        {
            ConfigKeyNodeLink();

            if (isBossMap)
            {
                nodeList[nodeList.Count - 1].blockType = MapBlockType.BossType;
            }
            else
            {
                nodeList[nodeList.Count - 1].blockType = MapBlockType.endType;
            }
        }


        FindLocationsCanAddLocations();
        AddShopAndEvent();

        if (nodeList.Count < maxCount)
        {
            Location     randomLocation = canAddNodeLocationList[Random.Range(0, canAddNodeLocationList.Count - 1)];
            MapBlockInfo mapInfoShop    = SpwanMapBlockInfo(randomLocation.x, randomLocation.y, MapBlockType.battleType);
            nodeList.Add(mapInfoShop);
            canAddNodeLocationList.Remove(randomLocation);
        }

        ConfigElseNodeLink();
        ConfigMiniMapColor();

        ConfigBlock();
        ConfigChannelComponent();
        ConfigChannel();
    }
コード例 #7
0
    public void AddNext(MapBlockInfo _mapBlockInfo)
    {
        bool IsCalculate = true;

        while (IsCalculate)
        {
            int tempX          = (int)_mapBlockInfo.indexInfo.x;
            int tempY          = (int)_mapBlockInfo.indexInfo.y;
            int DirectionIndex = Random.Range(0, 4);
            switch (DirectionIndex)
            {
            case (int)DirectionType.up:
                tempY += 1;
                break;

            case (int)DirectionType.right:
                tempX += 1;
                break;

            case (int)DirectionType.down:
                tempY -= 1;
                break;

            case (int)DirectionType.left:
                tempX -= 1;
                break;
            }
            if (CheckNewNodeValid(tempX, tempY) && !CheckNewNodeExist(tempX, tempY))
            {
                IsCalculate = false;
                MapBlockInfo mapInfo = SpwanMapBlockInfo(tempX, tempY, MapBlockType.battleType);
                mapInfo.parent = _mapBlockInfo;
                nodeList.Add(mapInfo);
            }
        }

        //colorful
    }