示例#1
0
 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);
         }
     }
 }
示例#2
0
    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);
        }
    }