Esempio n. 1
0
        public bool Load(Stream rsw, Map owner)
        {
            BinaryReader br     = new BinaryReader(rsw);
            string       header = ((char)br.ReadByte()).ToString() + ((char)br.ReadByte()) + ((char)br.ReadByte()) + ((char)br.ReadByte());

            if (header != "GRSW")
            {
                return(false);
            }

            majorVersion = br.ReadByte();
            minorVersion = br.ReadByte();

            if (!(majorVersion == 1 && minorVersion >= 2 && minorVersion <= 9) &&
                !(majorVersion == 2 && minorVersion <= 2))
            {
                return(false);
            }

            _iniFile      = br.ReadCString(40);
            _groundFile   = br.ReadCString(40);
            _altitudeFile = br.ReadCString(40);
            _scrFile      = br.ReadCString(40);

            _waterInfo.Load(br, majorVersion, minorVersion);
            _lightInfo.Load(br, majorVersion, minorVersion);
            _groundInfo.Load(br, majorVersion, minorVersion);

            _models = new List <ModelObject>();

            Logger.TabLevel++;

            int count = br.ReadInt32();

            for (int i = 0; i < count; i++)
            {
                int type     = br.ReadInt32();
                int skipSize = 0;

                if (type == 1)
                {
                    ModelObject mo = new ModelObject();

                    mo.Load(br, majorVersion, minorVersion, owner.Ground);

                    Vector3 tmp = mo.Position;
                    tmp.X       = (mo.Position.X / 5) + owner.Ground.Width;
                    tmp.Z       = (mo.Position.Z / 5) + owner.Ground.Height;
                    mo.Position = tmp;

                    _models.Add(mo);
                }
                else if (type == 2)
                {
                    skipSize = 80 + sizeof(float) * 3 + sizeof(int) + sizeof(int) + sizeof(int) + sizeof(float);
                }
                else if (type == 3)
                {
                    skipSize = 80 + 80 + sizeof(float) * 3 + sizeof(float) + sizeof(int) + sizeof(int) + sizeof(float);

                    if (majorVersion >= 2)
                    {
                        skipSize += sizeof(float);
                    }
                }
                else if (type == 4)
                {
                    skipSize = 80 + sizeof(float) * 3 + sizeof(int) + sizeof(float) + sizeof(float) * 4;
                }

                if (skipSize > 0)
                {
                    br.ReadBytes(skipSize);
                }
            }

            Logger.TabLevel--;

            Logger.WriteLine("Loading water type {0} textures...", _waterInfo.Type);
            SetupWater(_waterInfo.Type);

            Logger.WriteLine("Creating water vertex buffer...");
            UpdateWaterVertices(owner);

            Logger.WriteLine("World v{0}.{1} status: {2} objects - {3} models", majorVersion, minorVersion, count, _models.Count);
            Logger.WriteLine("    Water height: {0}", _waterInfo.Level);
            Logger.WriteLine("    Water type: {0}", _waterInfo.Type);

            return(true);
        }
Esempio n. 2
0
        public bool Load(Stream gat, Stream gnd, Stream rsw)
        {
            Logger.WriteLine("Loading altitude...");
            _altitude = new Altitude();
            if (!_altitude.Load(gat))
                return false;

            Logger.WriteLine("Loading ground...");
            _ground = new Ground(_graphicsDevice);
            if (!_ground.Load(gnd))
                return false;

            Logger.WriteLine("Loading world...");
            _world = new World(_graphicsDevice);
            if (!_world.Load(rsw, this))
                return false;

            Logger.WriteLine("Creating ground vertex buffer...");
            _ground.SetupVertices();

            Logger.WriteLine("Building lightmaps...");
            BuildLightmaps();

            _effect.Parameters["Lightmap"].SetValue(_lightmap);

            _effect.Parameters["AmbientColor"].SetValue(new Vector3(1, 1, 1));
            _effect.Parameters["DiffuseColor"].SetValue(new Vector3(0, 0, 0));

            // FIXME: Where I put the light? O_O
            _effect.Parameters["LightPosition"].SetValue(new Vector3(0, 0, 0));

            return true;
        }