private void AttachObjects(AttachmentPointLogic point1, AttachmentPointLogic point2, Item ungrabbedItem, Interactor interactor) { //ungrabbed item definition ItemDefinition ungrabbedItemDefinition = point1.GetComponentInParent <ItemDefinition>(); ItemDefinition point2ItemDefinition = point2.GetComponentInParent <ItemDefinition>(); // Getting item position Transform point1ItemTransform = point1.GetComponentInParent <ItemDefinition>().transform; Transform point2ItemTransform = point2.GetComponentInParent <ItemDefinition>().transform; Item point2Item = point2ItemTransform.GetComponent <Item>(); ItemData point2ItemData = point2Item.data; point1ItemTransform.MoveAlign(point1.transform, point2.transform); // -------------------------------------------------------------------- // // Renderes and BladeMeshes // // -------------------------------------------------------------------- // foreach (Renderer renderer in ungrabbedItemDefinition.renderers) { renderer.gameObject.transform.parent = point2ItemTransform; point2ItemDefinition.renderers.Add(renderer); if (point1.partType == "blade") { bladeRenderes.Add(renderer); //Debug.Log("ADDED BLADE " + "Total " + bladeRenderes.Count); } } //Debug.Log("Total blades " + bladeRenderes.Count); // -------------------------------------------------------------------- // // Damagers // // -------------------------------------------------------------------- // foreach (ItemData.Damager damager1 in point2ItemData.damagers.ToList()) { if (ungrabbedItem.data.damagers.Contains(damager1)) { point2ItemData.damagers.Remove(damager1); //Debug.Log("Removed damager"); } } //Debug.Log(point2ItemData.damagers.Count); point2ItemData.damagers.AddRange(ungrabbedItem.data.damagers); //Debug.Log(point2ItemData.damagers.Count); foreach (DamagerDefinition damagerDefinition in ungrabbedItem.GetComponentsInChildren <DamagerDefinition>()) { damagerDefinition.colliderGroup.transform.parent = point2ItemTransform; //Debug.Log("ColliderGroup Name " + damagerDefinition.colliderGroup.name); damagerDefinition.transform.parent = point2ItemTransform; //Debug.Log("damagerDefinition " + damagerDefinition.name); } point2ItemDefinition.colliderGroups.AddRange(ungrabbedItemDefinition.colliderGroups); point2Item.damagers.Clear(); foreach (ItemData.Damager damager in point2ItemData.damagers) { foreach (DamagerDefinition damagerDefinition in point2.GetComponentInParent <ItemDefinition>().GetComponentsInChildren <DamagerDefinition>()) { if (damagerDefinition.name == damager.transformName) { Damager[] components2 = damagerDefinition.GetComponents <Damager>(); for (int j = 0; j < components2.Length; j++) { UnityEngine.Object.Destroy(components2[j]); } if (damagerDefinition.colliderGroup == null) { Debug.LogError("colliderGroup on DamagerDefinition is null"); } else { Damager damager2 = damagerDefinition.gameObject.AddComponent <Damager>(); damager2.Load(Catalog.current.GetData <DamagerData>(damager.damagerID, true)); point2Item.damagers.Add(damager2); } } } } // -------------------------------------------------------------------- // // CustomReference // // -------------------------------------------------------------------- // //Debug.Log("Custom ref start"); foreach (CustomReference customReference in ungrabbedItemDefinition.customReferences) { if (customReference.transform != null) { customReference.transform.parent = point2ItemTransform; point2ItemDefinition.customReferences.Add(customReference); } else { Debug.LogError("Customreference transform" + customReference.name + " on item " + ungrabbedItemDefinition.itemId + " is not set?"); } } // -------------------------------------------------------------------- // // Reset Mass and stuff // // -------------------------------------------------------------------- // point2Item.rb.ResetCenterOfMass(); Vector3 CoM = point2Item.rb.centerOfMass; this.itemCoM = CoM; point2Item.rb.mass = (point2Item.rb.mass + ungrabbedItem.rb.mass); this.itemMass = point2Item.rb.mass; point2Item.rb.angularDrag = 0f; this.itemAngularDrag = point2Item.rb.angularDrag; point2Item.rb.drag = 0f; this.itemDrag = point2Item.rb.drag; point2Item.OnGrabEvent += this.fixItemInfo; // -------------------------------------------------------------------- // // Whooshs // // -------------------------------------------------------------------- // foreach (ItemData.Whoosh whoosh in point2ItemData.whooshs.ToList()) { if (ungrabbedItem.data.whooshs.Contains(whoosh)) { point2ItemData.whooshs.Remove(whoosh); } } foreach (WhooshPoint whooshPoint in ungrabbedItemDefinition.whooshPoints) { whooshPoint.transform.parent = point2ItemTransform; } point2ItemDefinition.whooshPoints.AddRange(ungrabbedItemDefinition.whooshPoints); point2ItemData.whooshs.AddRange(ungrabbedItem.data.whooshs); foreach (ItemData.Whoosh whoosh in point2ItemData.whooshs.ToList()) { foreach (WhooshPoint whooshPoint in point2ItemDefinition.whooshPoints) { if (whooshPoint.name == whoosh.transformName) { FXData data = Catalog.current.GetData <FXData>(whoosh.fxId, true); if (data != null) { Whoosh whoosh2 = whooshPoint.gameObject.GetComponent <Whoosh>(); if (!whoosh2) { whoosh2 = whooshPoint.gameObject.AddComponent <Whoosh>(); } whoosh2.Load(data, whoosh.trigger, whoosh.minVelocity, whoosh.maxVelocity); } } } } // -------------------------------------------------------------------- // // Modules WIP // // -------------------------------------------------------------------- // foreach (ItemModule itemModule in ungrabbedItem.data.modules) { //Debug.Log(itemModule.type.Name); if (itemModule.type.Name != "ItemModuleAI" && itemModule.type.Name != "ItemModulePart") { addedModules.Add(itemModule); } } //Debug.Log("Total modules added " + addedModules.Count); // Get all modules on the new item and find all added modules List <ItemModule> totalAddedModules = new List <ItemModule>(); foreach (CustomReference customReference1 in point2ItemDefinition.customReferences) { if (customReference1.transform.GetComponent <AttachmentPointLogic>()) { AttachmentPointLogic apl = customReference1.transform.GetComponent <AttachmentPointLogic>(); if (apl.addedModules.Count > 0) { totalAddedModules.AddRange(apl.addedModules); } } } //Debug.Log("Total added modules to item " + totalAddedModules.Count); foreach (ItemModule itemModule1 in totalAddedModules) { point2ItemData.modules.Add(itemModule1); itemModule1.OnItemLoaded(point2Item); point2ItemData.modules.Remove(itemModule1); } // -------------------------------------------------------------------- // // Despawn // // -------------------------------------------------------------------- // ungrabbedItem.ResetObjectCollision(); ungrabbedItem.SetColliderAndMeshLayer(VRManager.GetLayer(LayerName.MovingObject)); ungrabbedItem.Despawn(); point2Item.RefreshCollision(); item = point2Item; }
public void Initialise(Item parent) { this.parent = parent; if (!string.IsNullOrEmpty(collisionRef)) { collisionBlade = parent.definition.GetCustomReference(collisionRef).GetComponent <Collider>(); collisionBlade.enabled = true; collisionBlade.enabled = isActive; } if (!string.IsNullOrEmpty(crystalEjectRef)) { crystalEject = parent.definition.GetCustomReference(crystalEjectRef); } if (!string.IsNullOrEmpty(startSoundsRef)) { startSounds = parent.definition.GetCustomReference(startSoundsRef).GetComponents <AudioSource>(); } if (!string.IsNullOrEmpty(stopSoundsRef)) { stopSounds = parent.definition.GetCustomReference(stopSoundsRef).GetComponents <AudioSource>(); } if (!string.IsNullOrEmpty(saberBodyRef)) { saberBody = parent.definition.GetCustomReference(saberBodyRef).GetComponent <MeshRenderer>(); } if (!string.IsNullOrEmpty(saberBodyRef)) { idleSound = parent.definition.GetCustomReference(saberBodyRef).GetComponent <AudioSource>(); } if (!string.IsNullOrEmpty(saberTipGlowRef)) { saberTipGlow = parent.definition.GetCustomReference(saberTipGlowRef).GetComponent <Light>(); } if (!string.IsNullOrEmpty(saberGlowRef)) { saberGlow = parent.definition.GetCustomReference(saberGlowRef).GetComponent <MeshRenderer>(); } if (!string.IsNullOrEmpty(saberGlowRef)) { saberGlowLight = parent.definition.GetCustomReference(saberGlowRef).GetComponent <Light>(); } if (!string.IsNullOrEmpty(saberParticlesRef)) { saberParticles = parent.definition.GetCustomReference(saberParticlesRef).GetComponent <ParticleSystem>(); } if (!string.IsNullOrEmpty(whooshRef)) { whooshBlade = parent.definition.GetCustomReference(whooshRef).GetComponent <Whoosh>(); } if (!string.IsNullOrEmpty(kyberCrystal)) { var kyberCrystalData = Catalog.current.GetData <ItemData>(kyberCrystal, true); if (kyberCrystalData == null) { return; } var kyberCrystalObject = kyberCrystalData.Spawn(true); if (!kyberCrystalObject.gameObject.activeInHierarchy) { kyberCrystalObject.gameObject.SetActive(true); } AddCrystal(kyberCrystalObject.GetComponent <ItemKyberCrystal>()); } SetComponentState(false); maxLength = (bladeLength > 0f) ? bladeLength / 10 : saberBody.transform.localScale.z; // Always set this to false now, it is only used for item previews if (saberGlow != null) { saberGlow.enabled = false; } // setup audio sources // Utils.ApplyStandardMixer(new AudioSource[] { idleSound }); // Utils.ApplyStandardMixer(startSounds); // Utils.ApplyStandardMixer(stopSounds); }