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> >(); }
/// <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); }
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); }