Пример #1
0
 public ChunkTracker(int sx, int sy)
 {
     SX     = sx;
     SY     = sy;
     mapGen = new MapDataGenerator(SX, SY);
     Map    = mapGen.map;
 }
Пример #2
0
 public Village(Point Position, IslandMap Map, int sx, int sy)
 {
     CenterPosition = Position;
     IslandMap      = Map;
     SX             = sx;
     SY             = sy;
 }
Пример #3
0
        public void createBridge()
        {
            Point DeltaPosition = IslandMap.GetDeltaPoint(CenterPosition);

            Vector dir = new Vector(DeltaPosition.X - CenterPosition.X, DeltaPosition.Y - CenterPosition.Y);

            dir.Normalize();

            int distance = (int)MathUtil.MathUtil.distance(CenterPosition, DeltaPosition);

            dir.Normalize();

            int allowedDistance = (int)(distance * 0.25f);

            for (int i = 1; i < distance; i++)
            {
                float wavePosX = (float)(dir.X * i + dir.X * Math.Sin(Math.PI * i / distance) * 10);
                float wavePosY = (float)(dir.Y * i + dir.Y * Math.Sin(Math.PI * i / distance) / 10);

                int px = (int)(CenterPosition.X + wavePosX);
                int py = (int)(CenterPosition.Y + wavePosY);

                if (!IslandMap.lk[px, py] && IslandMap.r[px, py])
                {
                    if (i > allowedDistance)
                    {
                        Point BridgePosition = new Point(px - 5, py - 5);

                        int angle = MapUtil.GetDirectionAngle(px, py, IslandMap.lk);

                        //Debug.WriteLine(BridgePositionB);

                        IslandMap.StructureNames.Add("Bridge_");
                        IslandMap.StructurePoints.Add(new Point3D(BridgePosition.X, IslandMap.h[px, py], BridgePosition.Y));

                        //IslandMap.StructureRotations.Add(new Vector3D(CrossDir.X, 1, CrossDir.Y));
                        //IslandMap.StructureRotations.Add(new Vector3D(dir.X, 1, dir.Y));
                        IslandMap.StructureRotations.Add(angle + 270);
                        return;
                    }
                }
            }
        }
Пример #4
0
 public LakeVillage(Point Position, IslandMap Map, int sx, int sy) : base(Position, Map, sx, sy)
 {
 }
Пример #5
0
        public static IslandMap LoadMap(String FileName)
        {
            //retrieve file
            List <byte> Data = new List <byte>();

            using (BinaryReader FileReader = new BinaryReader(File.Open(FileName, FileMode.Open)))
            {
                Data.Add(FileReader.ReadByte());
            }

            int byteCount = 0;

            int SX = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int SY = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;

            int CompressedLSize  = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedOSize  = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedLKSize = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedRSize  = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedMSize  = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedRDSize = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedMaSize = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;
            int CompressedHSize  = Data[byteCount++] & 0xFF | (Data[byteCount++] & 0xFF) << 8 | (Data[byteCount++] & 0xFF) << 16 | (Data[byteCount++] & 0xFF) << 24;

            List <Boolean> LValues  = new List <Boolean>();
            List <Boolean> OValues  = new List <Boolean>();
            List <Boolean> LKValues = new List <Boolean>();
            List <Boolean> RValues  = new List <Boolean>();
            List <Boolean> MValues  = new List <Boolean>();
            List <Boolean> RDValues = new List <Boolean>();
            List <int>     MaValues = new List <int>();
            List <int>     HValues  = new List <int>();

            List <int> LQuantities  = new List <int>();
            List <int> OQuantities  = new List <int>();
            List <int> LKQuantities = new List <int>();
            List <int> RQuantities  = new List <int>();
            List <int> MQuantities  = new List <int>();
            List <int> RDQuantities = new List <int>();
            List <int> MaQuantities = new List <int>();
            List <int> HQuantities  = new List <int>();

            Boolean[,] L  = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            Boolean[,] O  = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            Boolean[,] LK = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            Boolean[,] R  = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            Boolean[,] M  = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            Boolean[,] RD = new Boolean[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            int[,] Ma     = new int[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];
            int[,] H      = new int[ApplicationSettings.chunkSize + 1, ApplicationSettings.chunkSize + 1];

            Decompress(LQuantities, LValues, CompressedLSize, byteCount, Data);
            Decompress(OQuantities, OValues, CompressedOSize, byteCount, Data);
            Decompress(LKQuantities, LKValues, CompressedLKSize, byteCount, Data);
            Decompress(RQuantities, RValues, CompressedRSize, byteCount, Data);
            Decompress(MQuantities, MValues, CompressedMSize, byteCount, Data);
            Decompress(RDQuantities, RDValues, CompressedRDSize, byteCount, Data);
            Decompress(MaQuantities, MaValues, CompressedMaSize, byteCount, Data);
            Decompress(HQuantities, HValues, CompressedHSize, byteCount, Data);

            ListTo2DArray(L, LQuantities, LValues);
            ListTo2DArray(O, OQuantities, OValues);
            ListTo2DArray(LK, LKQuantities, LKValues);
            ListTo2DArray(R, RQuantities, RValues);
            ListTo2DArray(M, MQuantities, MValues);
            ListTo2DArray(RD, RDQuantities, RDValues);
            ListTo2DArray(Ma, MaQuantities, MaValues);
            ListTo2DArray(H, HQuantities, HValues);

            IslandMap IslandMap = new IslandMap(SX, SY, L, O, LK, R, M, RD, Ma, H);

            return(IslandMap);
        }
Пример #6
0
        /*
         * public Boolean[,] l { get; set; }
         * public Boolean[,] o { get; set; }
         * public Boolean[,] lk { get; set; }
         * public Boolean[,] r { get; set; }
         * public Boolean[,] m { get; set; }
         * public Boolean[,] rd { get; set; }
         *
         * public int[,] ma { get; set; }
         * public int[,] h { get; set; }
         */

        //Generate CompressedLists
        //Add size of Buffers
        //add buffers
        //convert to byte array
        //create file
        public static void SaveMap(String FileName, IslandMap IslandMap)
        {
            BinaryWriter writer = new BinaryWriter(File.Open("WorldSave/" + FileName, FileMode.Create));

            List <byte> MapData = new List <byte>();

            byte[] CompressedSX = BitConverter.GetBytes(IslandMap.SX);
            byte[] CompressedSY = BitConverter.GetBytes(IslandMap.SY);

            byte[] CompressedLValues  = (byte[])CompressBooleanArray2D(IslandMap.l)[0];
            byte[] CompressedOValues  = (byte[])CompressBooleanArray2D(IslandMap.o)[0];
            byte[] CompressedLKValues = (byte[])CompressBooleanArray2D(IslandMap.lk)[0];
            byte[] CompressedRValues  = (byte[])CompressBooleanArray2D(IslandMap.r)[0];
            byte[] CompressedMValues  = (byte[])CompressBooleanArray2D(IslandMap.m)[0];
            byte[] CompressedRDValues = (byte[])CompressBooleanArray2D(IslandMap.rd)[0];
            byte[] CompressedMaValues = (byte[])CompressIntArray2D(IslandMap.ma)[0];
            byte[] CompressedHValues  = (byte[])CompressIntArray2D(IslandMap.h)[0];

            byte[] CompressedLQuantities  = (byte[])CompressBooleanArray2D(IslandMap.l)[1];
            byte[] CompressedOQuantities  = (byte[])CompressBooleanArray2D(IslandMap.o)[1];
            byte[] CompressedLKQuantities = (byte[])CompressBooleanArray2D(IslandMap.lk)[1];
            byte[] CompressedRQuantities  = (byte[])CompressBooleanArray2D(IslandMap.r)[1];
            byte[] CompressedMQuantities  = (byte[])CompressBooleanArray2D(IslandMap.m)[1];
            byte[] CompressedRDQuantities = (byte[])CompressBooleanArray2D(IslandMap.rd)[1];
            byte[] CompressedMaQuantities = (byte[])CompressIntArray2D(IslandMap.ma)[1];
            byte[] CompressedHQuantities  = (byte[])CompressIntArray2D(IslandMap.h)[1];

            byte[] CompressedLSize  = BitConverter.GetBytes(CompressedLValues.Length);
            byte[] CompressedOSize  = BitConverter.GetBytes(CompressedOValues.Length);
            byte[] CompressedLKSize = BitConverter.GetBytes(CompressedLKValues.Length);
            byte[] CompressedRSize  = BitConverter.GetBytes(CompressedRValues.Length);
            byte[] CompressedMSize  = BitConverter.GetBytes(CompressedMValues.Length);
            byte[] CompressedRDSize = BitConverter.GetBytes(CompressedRDValues.Length);
            byte[] CompressedMaSize = BitConverter.GetBytes(CompressedMaValues.Length / 4);
            byte[] CompressedHSize  = BitConverter.GetBytes(CompressedHValues.Length / 4);

            if (File.Exists(FileName))
            {
                //overwrite file
            }
            else
            {
                //create new file
                BinaryWriter FileWriter = new BinaryWriter(File.Open(FileName, FileMode.Create));

                //seedX,seexY
                FileWriter.Write(CompressedSX);
                FileWriter.Write(CompressedSY);

                //buffer value length
                FileWriter.Write(CompressedLSize);
                FileWriter.Write(CompressedOSize);
                FileWriter.Write(CompressedLKSize);
                FileWriter.Write(CompressedRSize);
                FileWriter.Write(CompressedMSize);
                FileWriter.Write(CompressedRDSize);
                FileWriter.Write(CompressedMaSize);
                FileWriter.Write(CompressedHSize);

                //values
                //Quantities
                FileWriter.Write(CompressedLValues);
                FileWriter.Write(CompressedLQuantities);
                FileWriter.Write(CompressedOValues);
                FileWriter.Write(CompressedOQuantities);
                FileWriter.Write(CompressedLKValues);
                FileWriter.Write(CompressedLKQuantities);
                FileWriter.Write(CompressedRValues);
                FileWriter.Write(CompressedRQuantities);
                FileWriter.Write(CompressedMValues);
                FileWriter.Write(CompressedMQuantities);
                FileWriter.Write(CompressedRDValues);
                FileWriter.Write(CompressedRDQuantities);
                FileWriter.Write(CompressedMaValues);
                FileWriter.Write(CompressedMaQuantities);
                FileWriter.Write(CompressedHValues);
                FileWriter.Write(CompressedHQuantities);

                FileWriter.Close();
            }
        }