public virtual void ModuleEntityRemoved(BaseVehicleModule removedModule) { if (!base.IsDestroyed) { if (moduleAddActions.ContainsKey(removedModule)) { removedModule.CancelInvoke(moduleAddActions[removedModule]); moduleAddActions.Remove(removedModule); } if (AttachedModuleEntities.Contains(removedModule)) { RemoveMass(removedModule.Mass, removedModule.CentreOfMass, removedModule.transform.position); AttachedModuleEntities.Remove(removedModule); removedModule.ModuleRemoved(); RefreshModulesExcept(removedModule); } } }
public virtual void ModuleEntityAdded(BaseVehicleModule addedModule) { if (AttachedModuleEntities.Contains(addedModule)) { return; } if (base.isServer && (this == null || IsDead() || base.IsDestroyed)) { if (addedModule != null && !addedModule.IsDestroyed) { addedModule.Kill(); } return; } int index = -1; if (base.isServer && addedModule.AssociatedItemInstance != null) { index = addedModule.AssociatedItemInstance.position; } if (index == -1 && !TryDeduceSocketIndex(addedModule, out index)) { string text = $"{GetType().Name}: Couldn't get socket index from position ({addedModule.transform.position})."; for (int i = 0; i < moduleSockets.Count; i++) { text += $" Sqr dist to socket {i} at {moduleSockets[i].WorldPosition} is {Vector3.SqrMagnitude(moduleSockets[i].WorldPosition - addedModule.transform.position)}."; } Debug.LogError(text, addedModule.gameObject); return; } if (moduleAddActions.ContainsKey(addedModule)) { moduleAddActions.Remove(addedModule); } AttachedModuleEntities.Add(addedModule); addedModule.ModuleAdded(this, index); AddMass(addedModule.Mass, addedModule.CentreOfMass, addedModule.transform.position); RefreshModulesExcept(addedModule); if (base.isServer) { Inventory.SyncModuleInventory(addedModule, index); } }