Skip to content

Commit

Permalink
Fix a crash when trying to use the replace block function when the wo…
Browse files Browse the repository at this point in the history
…rld includes a mod with a block definition with an extremely high max integrity value.
  • Loading branch information
mmusu3 committed Jun 10, 2023
1 parent fcc58d5 commit 0b3f686
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 16 deletions.
4 changes: 2 additions & 2 deletions SEToolbox/Interop/SpaceEngineersResources.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,9 +73,9 @@ public IList<MyBlueprintDefinitionBase> BlueprintDefinitions
get { return MyDefinitionManager.Static.GetBlueprintDefinitions().ToList(); }
}

public IList<MyCubeBlockDefinition> CubeBlockDefinitions
public IEnumerable<MyCubeBlockDefinition> CubeBlockDefinitions
{
get { return MyDefinitionManager.Static.GetAllDefinitions().Where(e => e is MyCubeBlockDefinition).Cast<MyCubeBlockDefinition>().ToList(); }
get { return MyDefinitionManager.Static.GetAllDefinitions().Where(e => e is MyCubeBlockDefinition).Cast<MyCubeBlockDefinition>(); }
}

public IList<MyComponentDefinition> ComponentDefinitions
Expand Down
34 changes: 25 additions & 9 deletions SEToolbox/Models/ComponentListModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -183,15 +183,34 @@ public void Load()
props.Add(field.Name, GetValue(field, cubeDefinition));
}

CubeAssets.Add(new ComponentItemModel
string textureFile = null;

if (cubeDefinition.Icons != null)
{
string icon = cubeDefinition.Icons.FirstOrDefault();

if (icon != null)
textureFile = SpaceEngineersCore.GetDataPathOrDefault(icon, Path.Combine(contentPath, icon));
}

var buildTime = TimeSpan.Zero;

if (cubeDefinition.IntegrityPointsPerSec != 0)
{
double buildTimeSeconds = (double)cubeDefinition.MaxIntegrity / cubeDefinition.IntegrityPointsPerSec;

if (buildTimeSeconds <= TimeSpan.MaxValue.TotalSeconds)
buildTime = TimeSpan.FromSeconds(buildTimeSeconds);
}

CubeAssets.Add(new ComponentItemModel {
Name = cubeDefinition.DisplayNameText,
Definition = cubeDefinition,
TypeId = cubeDefinition.Id.TypeId,
TypeIdString = cubeDefinition.Id.TypeId.ToString(),
SubtypeId = cubeDefinition.Id.SubtypeName,
TextureFile = (cubeDefinition.Icons == null || cubeDefinition.Icons.First() == null) ? null : SpaceEngineersCore.GetDataPathOrDefault(cubeDefinition.Icons.First(), Path.Combine(contentPath, cubeDefinition.Icons.First())),
Time = TimeSpan.FromSeconds(cubeDefinition.IntegrityPointsPerSec != 0 ? cubeDefinition.MaxIntegrity / cubeDefinition.IntegrityPointsPerSec : 0),
TextureFile = textureFile,
Time = buildTime,
Accessible = cubeDefinition.Public,
PCU = cubeDefinition.PCU,
Mass = SpaceEngineersApi.FetchCubeBlockMass(cubeDefinition.Id.TypeId, cubeDefinition.CubeSize, cubeDefinition.Id.SubtypeName),
Expand All @@ -209,8 +228,7 @@ public void Load()
if (bp != null && bp.Results.Length > 0)
amount = (float)bp.Results[0].Amount;

ComponentAssets.Add(new ComponentItemModel
{
ComponentAssets.Add(new ComponentItemModel {
Name = componentDefinition.DisplayNameText,
TypeId = componentDefinition.Id.TypeId,
TypeIdString = componentDefinition.Id.TypeId.ToString(),
Expand Down Expand Up @@ -239,8 +257,7 @@ public void Load()
|| physicalItemDefinition.Id.TypeId == typeof(MyObjectBuilder_Ingot))
timeMassMultiplyer = physicalItemDefinition.Mass;

ItemAssets.Add(new ComponentItemModel
{
ItemAssets.Add(new ComponentItemModel {
Name = physicalItemDefinition.DisplayNameText,
TypeId = physicalItemDefinition.Id.TypeId,
TypeIdString = physicalItemDefinition.Id.TypeId.ToString(),
Expand All @@ -258,8 +275,7 @@ public void Load()
{
string texture = voxelMaterialDefinition.GetVoxelDisplayTexture();

MaterialAssets.Add(new ComponentItemModel
{
MaterialAssets.Add(new ComponentItemModel {
Name = voxelMaterialDefinition.Id.SubtypeName,
TextureFile = texture == null ? null : SpaceEngineersCore.GetDataPathOrDefault(texture, Path.Combine(contentPath, texture)),
IsRare = voxelMaterialDefinition.IsRare,
Expand Down
37 changes: 32 additions & 5 deletions SEToolbox/Models/SelectCubeModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,20 +71,40 @@ public ComponentItemModel CubeItem
public void Load(MyCubeSize cubeSize, MyObjectBuilderType typeId, string subTypeId)
{
CubeList.Clear();

var list = new SortedList<string, ComponentItemModel>();
var contentPath = ToolboxUpdater.GetApplicationContentPath();
var cubeDefinitions = SpaceEngineersCore.Resources.CubeBlockDefinitions.Where(c => c.CubeSize == cubeSize);

foreach (var cubeDefinition in cubeDefinitions)
{
var c = new ComponentItemModel
string textureFile = null;

if (cubeDefinition.Icons != null)
{
string icon = cubeDefinition.Icons.FirstOrDefault();

if (icon != null)
textureFile = SpaceEngineersCore.GetDataPathOrDefault(icon, Path.Combine(contentPath, icon));
}

var buildTime = TimeSpan.Zero;

if (cubeDefinition.IntegrityPointsPerSec != 0)
{
double buildTimeSeconds = (double)cubeDefinition.MaxIntegrity / cubeDefinition.IntegrityPointsPerSec;

if (buildTimeSeconds <= TimeSpan.MaxValue.TotalSeconds)
buildTime = TimeSpan.FromSeconds(buildTimeSeconds);
}

var c = new ComponentItemModel {
Name = cubeDefinition.DisplayNameText,
TypeId = cubeDefinition.Id.TypeId,
TypeIdString = cubeDefinition.Id.TypeId.ToString(),
SubtypeId = cubeDefinition.Id.SubtypeName,
TextureFile = (cubeDefinition.Icons == null || cubeDefinition.Icons.First() == null) ? null : SpaceEngineersCore.GetDataPathOrDefault(cubeDefinition.Icons.First(), Path.Combine(contentPath, cubeDefinition.Icons.First())),
Time = TimeSpan.FromSeconds(cubeDefinition.IntegrityPointsPerSec != 0 ? cubeDefinition.MaxIntegrity / cubeDefinition.IntegrityPointsPerSec : 0),
TextureFile = textureFile,
Time = buildTime,
Accessible = cubeDefinition.Public,
Mass = SpaceEngineersApi.FetchCubeBlockMass(cubeDefinition.Id.TypeId, cubeDefinition.CubeSize, cubeDefinition.Id.SubtypeName),
CubeSize = cubeDefinition.CubeSize,
Expand All @@ -94,12 +114,19 @@ public void Load(MyCubeSize cubeSize, MyObjectBuilderType typeId, string subType
list.Add(c.FriendlyName + c.TypeIdString + c.SubtypeId, c);
}

ComponentItemModel cubeItem = null;

foreach (var kvp in list)
{
CubeList.Add(kvp.Value);
var cube = kvp.Value;

CubeList.Add(cube);

if (cubeItem == null && cube.TypeId == typeId && cube.SubtypeId == subTypeId)
cubeItem = cube;
}

CubeItem = CubeList.FirstOrDefault(c => c.TypeId == typeId && c.SubtypeId == subTypeId);
CubeItem = cubeItem;
}

#endregion
Expand Down

0 comments on commit 0b3f686

Please sign in to comment.