예제 #1
0
 public Map()
 {
     this.m_MapID           = 0u;
     this.m_oMapData        = null;
     this.m_oDicRolesPos    = new Dictionary <long, CVector3>();
     this.m_oTablePathNodes = new Dictionary <int, Dictionary <int, PathNode> >();
 }
예제 #2
0
 /// <summary>
 /// 初始化地图,根据配置文件
 /// </summary>
 /// <param name="mapID">地图id</param>
 /// <param name="strConfigFile">配置文件</param>
 /// <returns></returns>
 public bool Init(uint mapID, string strConfigFile)
 {
     this.m_MapID    = mapID;
     this.m_oMapData = new CMapData();
     this.m_oMapData.Init(this.m_MapID, strConfigFile);
     this.OnInitFinished();
     return(true);
 }
예제 #3
0
        public byte[] Save()
        {
            //direct save to a raw, compressed ymap file (openIV-compatible format)


            //since Ymap object contents have been modified, need to recreate the arrays which are what is saved.
            BuildCEntityDefs();
            BuildCCarGens();


            //TODO:
            //BuildInstances();
            //BuildLodLights();
            //BuildDistantLodLights();
            //BuildTimecycleModifiers(); //already being saved - update them..
            //BuildBoxOccluders();
            //BuildOccludeModels();
            //BuildContainerLods();



            MetaBuilder mb = new MetaBuilder();


            var mdb = mb.EnsureBlock(MetaName.CMapData);

            CMapData mapdata = CMapData;


            if (CEntityDefs != null)
            {
                for (int i = 0; i < CEntityDefs.Length; i++)
                {
                    var yent = AllEntities[i]; //save the extensions..
                    CEntityDefs[i].extensions = mb.AddWrapperArrayPtr(yent.Extensions);
                }
            }

            mapdata.entities = mb.AddItemPointerArrayPtr(MetaName.CEntityDef, CEntityDefs);

            mapdata.timeCycleModifiers = mb.AddItemArrayPtr(MetaName.CTimeCycleModifier, CTimeCycleModifiers);

            mapdata.physicsDictionaries = mb.AddHashArrayPtr(physicsDictionaries);

            mapdata.carGenerators = mb.AddItemArrayPtr(MetaName.CCarGen, CCarGens);

            if (CMloInstanceDefs != null)
            {
                LogSaveWarning("CMloInstanceDefs were present, may not save properly. (TODO!)");
            }

            //clear everything out for now - TODO: fix
            if (mapdata.containerLods.Count1 != 0)
            {
                LogSaveWarning("containerLods were not saved. (TODO!)");
            }
            if (mapdata.occludeModels.Count1 != 0)
            {
                LogSaveWarning("occludeModels were not saved. (TODO!)");
            }
            if (mapdata.boxOccluders.Count1 != 0)
            {
                LogSaveWarning("boxOccluders were not saved. (TODO!)");
            }
            if (mapdata.instancedData.GrassInstanceList.Count1 != 0)
            {
                LogSaveWarning("instancedData.GrassInstanceList was not saved. (TODO!)");
            }
            if (mapdata.instancedData.PropInstanceList.Count1 != 0)
            {
                LogSaveWarning("instancedData.PropInstanceList was not saved. (TODO!)");
            }
            if (mapdata.LODLightsSOA.direction.Count1 != 0)
            {
                LogSaveWarning("LODLightsSOA was not saved. (TODO!)");
            }
            if (mapdata.DistantLODLightsSOA.position.Count1 != 0)
            {
                LogSaveWarning("DistantLODLightsSOA was not saved. (TODO!)");
            }
            mapdata.containerLods       = new Array_Structure();
            mapdata.occludeModels       = new Array_Structure();
            mapdata.boxOccluders        = new Array_Structure();
            mapdata.instancedData       = new rage__fwInstancedMapData();
            mapdata.LODLightsSOA        = new CLODLight();
            mapdata.DistantLODLightsSOA = new CDistantLODLight();



            var block = new CBlockDesc();

            block.name       = mb.AddStringPtr(Path.GetFileNameWithoutExtension(Name));
            block.exportedBy = mb.AddStringPtr("CodeWalker");
            block.time       = mb.AddStringPtr(DateTime.UtcNow.ToString("dd MMMM yyyy HH:mm"));

            mapdata.block = block;


            string name     = Path.GetFileNameWithoutExtension(Name);
            uint   nameHash = JenkHash.GenHash(name);

            mapdata.name = new MetaHash(nameHash);//make sure name is upto date...


            mb.AddItem(MetaName.CMapData, mapdata);



            //make sure all the relevant structure and enum infos are present.
            mb.AddStructureInfo(MetaName.rage__fwInstancedMapData);
            mb.AddStructureInfo(MetaName.CLODLight);
            mb.AddStructureInfo(MetaName.CDistantLODLight);
            mb.AddStructureInfo(MetaName.CBlockDesc);
            mb.AddStructureInfo(MetaName.CMapData);
            mb.AddStructureInfo(MetaName.CEntityDef);
            mb.AddStructureInfo(MetaName.CTimeCycleModifier);
            if ((CCarGens != null) && (CCarGens.Length > 0))
            {
                mb.AddStructureInfo(MetaName.CCarGen);
            }

            mb.AddEnumInfo((MetaName)1264241711); //LODTYPES_
            mb.AddEnumInfo((MetaName)648413703);  //PRI_


            Meta meta = mb.GetMeta();

            byte[] data = ResourceBuilder.Build(meta, 2); //ymap is version 2...


            return(data);
        }