private void StartComps() { var reassign = false; for (int i = 0; i < CompsToStart.Count; i++) { var weaponComp = CompsToStart[i]; if (weaponComp.MyCube.CubeGrid.IsPreview) { //Log.Line($"[IsPreview] MyCubeId:{weaponComp.MyCube.EntityId} - Grid:{weaponComp.MyCube.CubeGrid.DebugName} - !Marked:{!weaponComp.MyCube.MarkedForClose} - inScene:{weaponComp.MyCube.InScene} - gridMatch:{weaponComp.MyCube.CubeGrid == weaponComp.Ai.MyGrid}"); weaponComp.RemoveComp(); PlatFormPool.Return(weaponComp.Platform); weaponComp.Platform = null; CompsToStart.Remove(weaponComp); continue; } if (weaponComp.MyCube.CubeGrid.Physics == null && !weaponComp.MyCube.CubeGrid.MarkedForClose && weaponComp.MyCube.BlockDefinition.HasPhysics) { continue; } if (weaponComp.Ai.MyGrid != weaponComp.MyCube.CubeGrid) { if (!GridToFatMap.ContainsKey(weaponComp.MyCube.CubeGrid)) { continue; } Log.Line($"[StartComps - gridMisMatch] MyCubeId:{weaponComp.MyCube.EntityId} - Grid:{weaponComp.MyCube.CubeGrid.DebugName} - WeaponName:{weaponComp.MyCube.BlockDefinition.Id.SubtypeId.String} - !Marked:{!weaponComp.MyCube.MarkedForClose} - inScene:{weaponComp.MyCube.InScene} - gridMatch:{weaponComp.MyCube.CubeGrid == weaponComp.Ai.MyGrid} - {weaponComp.Ai.MyGrid.MarkedForClose}"); InitComp(weaponComp.MyCube, false); reassign = true; CompsToStart.Remove(weaponComp); } else if (weaponComp.Platform.State == MyWeaponPlatform.PlatformState.Fresh) { if (weaponComp.MyCube.MarkedForClose) { CompsToStart.Remove(weaponComp); continue; } if (!GridToFatMap.ContainsKey(weaponComp.MyCube.CubeGrid)) { continue; } weaponComp.MyCube.Components.Add(weaponComp); CompsToStart.Remove(weaponComp); } else { Log.Line($"comp didn't match CompsToStart condition, removing"); CompsToStart.Remove(weaponComp); } } CompsToStart.ApplyRemovals(); if (reassign) { CompsToStart.ApplyAdditions(); StartComps(); } }
private void StartComps() { for (int i = 0; i < CompsToStart.Count; i++) { var weaponComp = CompsToStart[i]; if (weaponComp.MyCube.CubeGrid.IsPreview || CompRestricted(weaponComp)) { PlatFormPool.Return(weaponComp.Platform); weaponComp.Platform = null; CompsToStart.Remove(weaponComp); continue; } if (weaponComp.MyCube.CubeGrid.Physics == null && !weaponComp.MyCube.CubeGrid.MarkedForClose && weaponComp.MyCube.BlockDefinition.HasPhysics) { continue; } QuickDisableGunsCheck = true; if (weaponComp.Platform.State == MyWeaponPlatform.PlatformState.Fresh) { if (weaponComp.MyCube.MarkedForClose) { CompsToStart.Remove(weaponComp); continue; } if (!GridToInfoMap.ContainsKey(weaponComp.MyCube.CubeGrid)) { continue; } if (ShieldApiLoaded) { SApi.AddAttacker(weaponComp.MyCube.EntityId); } IdToCompMap[weaponComp.MyCube.EntityId] = weaponComp; weaponComp.MyCube.Components.Add(weaponComp); CompsToStart.Remove(weaponComp); } else { Log.Line($"comp didn't match CompsToStart condition, removing"); CompsToStart.Remove(weaponComp); } } CompsToStart.ApplyRemovals(); }