示例#1
0
文件: Plate.cs 项目: bscal/ConquestV2
        public void Split(SplitType type)
        {
            if (hexes.Count < 1)
            {
                GameManager.Singleton.World.GetPlates().Remove(this);
                return;
            }

            if (type == SplitType.NORMAL)
            {
                Plate newPlate = new Plate(gen, UnityEngine.Random.ColorHSV());
                newPlate.direction = (HexDirection)UnityEngine.Random.Range(0, HexConstants.MAX_DIR);
                int id = GameManager.Singleton.World.AddPlate(newPlate);
                Debug.Log("CREATING PLATE");
                int q = 0;
                int r = 0;
                foreach (Hex h in hexes)
                {
                    q += h.q;
                    r += h.r;
                }
                q /= hexes.Count;
                r /= hexes.Count;

                FractionalHex fHexCenter = new FractionalHex(q, r, -q - r);
                Hex           centerHex  = fHexCenter.HexRound();

                for (int i = hexes.Count - 1; i > -1; i--)
                {
                    Hex cur = hexes[i];

                    if ((cur.q - centerHex.q) > 0)
                    {
                        int dist = cur.Distance(centerHex);
                        if (dist < 2 && UnityEngine.Random.value < .5)
                        {
                            continue;
                        }
                        hexes.RemoveAt(i);
                        newPlate.AddHex(cur);
                        if (GameManager.Singleton.World.TryGetHexData(cur, out TileObject obj))
                        {
                            obj.hexData.plateId = id;
                        }
                    }
                }
            }
        }