internal GameObject CreateTargetGroup(int skin) { var targetGroup = Object.Instantiate(Craft.TargetingGroupBase); targetGroup.name = Type.ToString() + " Target Group"; foreach (var partFactory in parts) { partFactory.CreatePart(targetGroup, skin); } Craft.ProcessTargetGroup?.Invoke(targetGroup, Id, Type, Location); Helpers.AttachTransform(targetGroup, targetPointFactory.CreateTargetPoint(), Location); return(targetGroup); }
internal GameObject CreatePart(GameObject parent, int skin) { var partObj = UnityEngine.Object.Instantiate(Craft.PartBase) as GameObject; if (null != descriptor) { // Give the part object a useful name in the Unity GUI partObj.name = descriptor.PartType.ToString() + " part"; } var lods = new List <LOD>(); foreach (var lod in _lods) { lods.Add(lod.MakeLOD(partObj, skin)); } var lodGroup = partObj.AddComponent <LODGroup>(); lodGroup.SetLODs(lods.ToArray()); // Some low LOD meshes comletely replace meshes from other parts. // So ensure that all parts cutover at the same distance to avoid flickering. lodGroup.localReferencePoint = new Vector3(0, 0, 0); lodGroup.size = Craft.Size; // Generate hardpoints foreach (var hardpoint in ShipPart.OfType <Hardpoint <Vector3> >()) { hardpointFactory.MakeHardpoint(partObj, hardpoint, descriptor); } if (null != targetPoint) { Helpers.AttachTransform(partObj, targetPoint.CreateTargetPoint(), descriptor.HitboxCenterPoint); } Helpers.AttachTransform(parent, partObj); Craft.ProcessPart?.Invoke(partObj, descriptor, rotationInfo); return(partObj); }