public override void Init(MyObjectBuilder_EntityBase builder) { ProfilerShort.Begin("base init"); SyncFlag = true; base.Init(builder); base.Init(null, null, null, null, null); ProfilerShort.BeginNextBlock("Load file"); var ob = (MyObjectBuilder_VoxelMap)builder; if (ob == null) { return; } if (ob.MutableStorage) { StorageName = ob.StorageName; } else { StorageName = string.Format("{0}-{1}", ob.StorageName, m_immutableStorageNameSalt++); } m_storage = MyStorageBase.Load(ob.StorageName); m_storage.RangeChanged += storage_RangeChanged; m_storageMax = m_storage.Size; InitVoxelMap(ob.PositionAndOrientation.Value.Position, m_storage.Size); ProfilerShort.End(); }
public override void Init(MyObjectBuilder_EntityBase builder) { var ob = (MyObjectBuilder_VoxelMap)builder; if (ob == null) { return; } m_storage = MyStorageBase.Load(ob.StorageName); //By Gregory: Added for compatibility with old saves if (m_storage == null) { return; } Init(builder, m_storage); if (ob.ContentChanged.HasValue) { ContentChanged = ob.ContentChanged.Value; } else { ContentChanged = true; } }
public override void Init(MyObjectBuilder_EntityBase builder) { var ob = (MyObjectBuilder_VoxelMap)builder; if (ob == null) { return; } m_storage = MyStorageBase.Load(ob.StorageName); if (m_storage == null) { throw new Exception("Voxel storage not found: " + ob.StorageName); } Init(builder, m_storage); if (ob.ContentChanged.HasValue) { ContentChanged = ob.ContentChanged.Value; } else { ContentChanged = true; } }
public override void Init(MyObjectBuilder_EntityBase builder) { if (MyFakes.ENABLE_PLANETS == false) { throw new PlanetsNotEnabledException(); } ProfilerShort.Begin("base init"); SyncFlag = true; base.Init(builder); base.Init(null, null, null, null, null); ProfilerShort.BeginNextBlock("Load file"); var ob = (MyObjectBuilder_Planet)builder; if (ob == null) { return; } if (ob.MutableStorage) { StorageName = ob.StorageName; } else { StorageName = string.Format("{0}", ob.StorageName); } m_savedEnviromentSectors = ob.SavedEnviromentSectors; m_planetInitValues.StorageName = StorageName; m_planetInitValues.Storage = MyStorageBase.Load(ob.StorageName); m_planetInitValues.PositionMinCorner = ob.PositionAndOrientation.Value.Position; m_planetInitValues.AveragePlanetRadius = ob.Radius; m_planetInitValues.AtmosphereRadius = ob.AtmosphereRadius; m_planetInitValues.MaximumHillRadius = ob.MaximumHillRadius; m_planetInitValues.MinimumSurfaceRadius = ob.MinimumSurfaceRadius; m_planetInitValues.HasAtmosphere = ob.HasAtmosphere; m_planetInitValues.AtmosphereWavelengths = ob.AtmosphereWavelengths; m_planetInitValues.MaxOxygen = ob.MaximumOxygen; m_planetInitValues.GravityFalloff = ob.GravityFalloff; m_planetInitValues.MarkAreaEmpty = ob.MarkAreaEmpty; Init(m_planetInitValues); ProfilerShort.End(); }
protected override void OnLoad(BitStream stream, Action <MyVoxelBase> loadingDoneHandler) { MyVoxelBase map = null; bool isFromPrefab = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); bool rangeChanged = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); byte[] data = null; if (rangeChanged) { data = VRage.Serialization.MySerializer.CreateAndRead <byte[]>(stream); } if (isFromPrefab) { var builder = VRage.Serialization.MySerializer.CreateAndRead <MyObjectBuilder_EntityBase>(stream, MyObjectBuilderSerializer.Dynamic); var voxelMap = new MyVoxelMap(); if (rangeChanged && data != null) { IMyStorage storage = MyStorageBase.Load(data); MyEntity entity; if (MyEntities.TryGetEntityById(builder.EntityId, out entity) && entity is MyVoxelMap) { voxelMap = (entity as MyVoxelMap); voxelMap.Storage = storage; } else { voxelMap.Init(builder, storage); MyEntities.Add(voxelMap); } } else { voxelMap.Init(builder); MyEntities.Add(voxelMap); } map = voxelMap; } else { long voxelMapId = VRage.Serialization.MySerializer.CreateAndRead <long>(stream); MyEntity entity = null; MyEntities.TryGetEntityById(voxelMapId, out entity); map = entity as MyVoxelBase; } loadingDoneHandler(map); }
public override void Init(MyObjectBuilder_EntityBase builder) { var ob = (MyObjectBuilder_VoxelMap)builder; if (ob == null) { return; } m_storage = MyStorageBase.Load(ob.StorageName); Init(builder, m_storage); if (ob.ContentChanged.HasValue) { ContentChanged = ob.ContentChanged.Value; } else { ob.ContentChanged = true; } }
public override void Init(MyObjectBuilder_EntityBase builder, Sandbox.Engine.Voxels.IMyStorage storage) { ProfilerShort.Begin("MyPlanet::Init()"); if (MyFakes.ENABLE_PLANETS == false) { throw new PlanetsNotEnabledException(); } ProfilerShort.Begin("MyVoxelBase Init"); SyncFlag = true; base.Init(builder); ProfilerShort.BeginNextBlock("Load Saved Data"); var ob = (MyObjectBuilder_Planet)builder; if (ob == null) { return; } MyLog.Default.WriteLine("Planet init info - MutableStorage:" + ob.MutableStorage + " StorageName:" + ob.StorageName + " storage?:" + (storage != null).ToString()); if (ob.MutableStorage) { StorageName = ob.StorageName; } else { StorageName = string.Format("{0}", ob.StorageName); } m_planetInitValues.StorageName = StorageName; m_planetInitValues.PositionMinCorner = ob.PositionAndOrientation.Value.Position; m_planetInitValues.HasAtmosphere = ob.HasAtmosphere; m_planetInitValues.AtmosphereRadius = ob.AtmosphereRadius; m_planetInitValues.AtmosphereWavelengths = ob.AtmosphereWavelengths; m_planetInitValues.GravityFalloff = ob.GravityFalloff; m_planetInitValues.MarkAreaEmpty = ob.MarkAreaEmpty; m_planetInitValues.SurfaceGravity = ob.SurfaceGravity; m_planetInitValues.AddGps = ob.ShowGPS; m_planetInitValues.SpherizeWithDistance = ob.SpherizeWithDistance; m_planetInitValues.Generator = ob.PlanetGenerator == "" ? null : MyDefinitionManager.Static.GetDefinition <MyPlanetGeneratorDefinition>( MyStringHash.GetOrCompute(ob.PlanetGenerator)); if (m_planetInitValues.Generator == null) { string message = string.Format("No definition found for planet generator {0}.", ob.PlanetGenerator); MyLog.Default.WriteLine(message); throw new MyIncompatibleDataException(message); } m_planetInitValues.AtmosphereSettings = m_planetInitValues.Generator.AtmosphereSettings.HasValue ? m_planetInitValues.Generator.AtmosphereSettings.Value : MyAtmosphereSettings.Defaults(); m_planetInitValues.UserCreated = false; ProfilerShort.BeginNextBlock("Load Storage"); if (storage != null) { m_planetInitValues.Storage = storage; } else { m_planetInitValues.Storage = MyStorageBase.Load(ob.StorageName); if (m_planetInitValues.Storage == null) { string message = string.Format("No storage loaded for planet {0}.", ob.StorageName); MyLog.Default.WriteLine(message); throw new MyIncompatibleDataException(message); } } m_planetInitValues.InitializeComponents = false; ProfilerShort.BeginNextBlock("Init Internal"); // MZ: if any crashes are related to MP planet init in the future, i added logging of MyPlanetInitArguments and other sanity checks. // we are currently having crashes without this additional info and it is likely that even after my hotfixes it is going to crash again // ...but we can check the logs and know the setup of the player :) MyLog.Default.Log(MyLogSeverity.Info, "Planet generator name: {0}", ob.PlanetGenerator ?? "<null>"); // Initialize! Init(m_planetInitValues); ProfilerShort.End(); ProfilerShort.End(); }
public override void Init(MyObjectBuilder_EntityBase builder, Sandbox.Engine.Voxels.IMyStorage storage) { ProfilerShort.Begin("MyPlanet::Init()"); if (MyFakes.ENABLE_PLANETS == false) { throw new PlanetsNotEnabledException(); } ProfilerShort.Begin("MyVoxelBase Init"); SyncFlag = true; base.Init(builder); ProfilerShort.BeginNextBlock("Load Saved Data"); var ob = (MyObjectBuilder_Planet)builder; if (ob == null) { return; } if (ob.MutableStorage) { StorageName = ob.StorageName; } else { StorageName = string.Format("{0}", ob.StorageName); } m_planetInitValues.StorageName = StorageName; m_planetInitValues.PositionMinCorner = ob.PositionAndOrientation.Value.Position; m_planetInitValues.HasAtmosphere = ob.HasAtmosphere; m_planetInitValues.AtmosphereRadius = ob.AtmosphereRadius; m_planetInitValues.AtmosphereWavelengths = ob.AtmosphereWavelengths; m_planetInitValues.GravityFalloff = ob.GravityFalloff; m_planetInitValues.MarkAreaEmpty = ob.MarkAreaEmpty; m_planetInitValues.SurfaceGravity = ob.SurfaceGravity; m_planetInitValues.AddGps = ob.ShowGPS; m_planetInitValues.SpherizeWithDistance = ob.SpherizeWithDistance; m_planetInitValues.Generator = ob.PlanetGenerator == "" ? null : MyDefinitionManager.Static.GetDefinition <MyPlanetGeneratorDefinition>(MyStringHash.GetOrCompute(ob.PlanetGenerator)); if (m_planetInitValues.Generator == null) { string message = string.Format("No definition found for planet generator {0}.", ob.PlanetGenerator); MyLog.Default.WriteLine(message); throw new Exception(message); } m_planetInitValues.AtmosphereSettings = m_planetInitValues.Generator.AtmosphereSettings.HasValue ? m_planetInitValues.Generator.AtmosphereSettings.Value : MyAtmosphereSettings.Defaults(); m_planetInitValues.UserCreated = false; ProfilerShort.BeginNextBlock("Load Storage"); if (storage != null) { m_planetInitValues.Storage = storage; } else { m_planetInitValues.Storage = MyStorageBase.Load(ob.StorageName); } ProfilerShort.BeginNextBlock("Init Internal"); Init(m_planetInitValues); ProfilerShort.End(); ProfilerShort.End(); }
IMyStorage IMyVoxelMaps.CreateStorage(byte[] data) { return(MyStorageBase.Load(data)); }
protected override void OnLoad(BitStream stream, Action <MyVoxelBase> loadingDoneHandler) { MyVoxelBase voxelMap; bool isUserCreated = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); bool isFromPrefab = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); bool rangeChanged = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); byte[] data = null; string asteroidName = null; if (rangeChanged) { data = VRage.Serialization.MySerializer.CreateAndRead <byte[]>(stream); } else if (isUserCreated) { asteroidName = VRage.Serialization.MySerializer.CreateAndRead <string>(stream); } if (isFromPrefab) { var builder = VRage.Serialization.MySerializer.CreateAndRead <MyObjectBuilder_EntityBase>(stream, MyObjectBuilderSerializer.Dynamic); if (rangeChanged && data != null) { IMyStorage storage = MyStorageBase.Load(data); if (MyEntities.TryGetEntityById <MyVoxelBase>(builder.EntityId, out voxelMap)) { if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Storage = storage; } else if (voxelMap is MyPlanet) { ((MyPlanet)voxelMap).Storage = storage; } else { Debug.Fail("Unknown voxel kind"); } } else { voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Init(builder, storage); } else if (voxelMap is MyPlanet) { ((MyPlanet)voxelMap).Init(builder, storage); } else { Debug.Fail("Unknown voxel kind"); } if (voxelMap != null) { MyEntities.Add(voxelMap); } } } else if (isUserCreated) { TryRemoveExistingEntity(builder.EntityId); IMyStorage storage = MyGuiScreenDebugSpawnMenu.CreateAsteroidStorage(asteroidName, 0); voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Init(builder, storage); } if (voxelMap != null) { MyEntities.Add(voxelMap); } } else { TryRemoveExistingEntity(builder.EntityId); voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); if (voxelMap != null) { voxelMap.Init(builder); MyEntities.Add(voxelMap); } } } else { long voxelMapId = VRage.Serialization.MySerializer.CreateAndRead <long>(stream); MyEntities.TryGetEntityById <MyVoxelBase>(voxelMapId, out voxelMap); } if (voxelMap != null) { BoundingBoxD voxelBox = new BoundingBoxD(voxelMap.PositionLeftBottomCorner, voxelMap.PositionLeftBottomCorner + voxelMap.SizeInMetres); m_entities = MyEntities.GetEntitiesInAABB(ref voxelBox); foreach (var entity in m_entities) { MyVoxelBase voxel = entity as MyVoxelBase; if (voxel != null) { if (voxel.Save == false && voxel != voxelMap) { voxel.Close(); break; } } } m_entities.Clear(); } loadingDoneHandler(voxelMap); }
protected override void OnLoad(BitStream stream, Action <MyVoxelBase> loadingDoneHandler) { MyVoxelBase voxelMap; bool isUserCreated = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); bool isFromPrefab = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); bool rangeChanged = VRage.Serialization.MySerializer.CreateAndRead <bool>(stream); byte[] data = null; string asteroidName = null; if (rangeChanged) { data = VRage.Serialization.MySerializer.CreateAndRead <byte[]>(stream); } else if (isUserCreated) { asteroidName = VRage.Serialization.MySerializer.CreateAndRead <string>(stream); } if (isFromPrefab) { var builder = VRage.Serialization.MySerializer.CreateAndRead <MyObjectBuilder_EntityBase>(stream, MyObjectBuilderSerializer.Dynamic); if (rangeChanged && data != null) { IMyStorage storage = MyStorageBase.Load(data); if (MyEntities.TryGetEntityById <MyVoxelBase>(builder.EntityId, out voxelMap)) { if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Storage = storage; } else if (voxelMap is MyPlanet) { ((MyPlanet)voxelMap).Storage = storage; } else { Debug.Fail("Unknown voxel kind"); } } else { voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Init(builder, storage); } else if (voxelMap is MyPlanet) { ((MyPlanet)voxelMap).Init(builder, storage); } else { Debug.Fail("Unknown voxel kind"); } MyEntities.Add(voxelMap); } } else if (isUserCreated) { TryRemoveExistingEntity(builder.EntityId); IMyStorage storage = MyGuiScreenDebugSpawnMenu.CreateAsteroidStorage(asteroidName, 0); voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); if (voxelMap is MyVoxelMap) { ((MyVoxelMap)voxelMap).Init(builder, storage); } MyEntities.Add(voxelMap); } else { TryRemoveExistingEntity(builder.EntityId); voxelMap = (MyVoxelBase)MyEntities.CreateFromObjectBuilderNoinit(builder); voxelMap.Init(builder); MyEntities.Add(voxelMap); } } else { long voxelMapId = VRage.Serialization.MySerializer.CreateAndRead <long>(stream); MyEntities.TryGetEntityById <MyVoxelBase>(voxelMapId, out voxelMap); } loadingDoneHandler(voxelMap); }
private void LoadFile(Vector3 position, MyObjectBuilder_VoxelMap objectBuilder) { m_storage = new MyProxyStorage(objectBuilder.MutableStorage, MyStorageBase.Load(objectBuilder.Name)); InitVoxelMap(position); }