// Handles Detaching Hardpoint-Mountpoint pairs void Handle(DetachEvent e) { Hardpoint hardpoint; if (e.Child.parent.TryGetComponents(out hardpoint)) { e.Child.transform.SetParent(null); Ego.SetParent(null, e.Child); Rigidbody2D rigidbody2D; // Should actually return a rigidbody to their defaults for their dropped state, which is usually this if (e.Child.TryGetComponents(out rigidbody2D)) { rigidbody2D.isKinematic = false; rigidbody2D.simulated = true; } hardpoint.Attached = null; } }
// Handles Attaching Hardpoint-Mountpoint pairs void Handle(AttachEvent e) { Hardpoint hardpoint; Mountpoint mountpoint; if (e.Parent != e.Child && e.Parent.TryGetComponents(out hardpoint) && e.Child.TryGetComponents(out mountpoint)) { e.Child.transform.SetParent(e.Parent.transform); Ego.SetParent(e.Parent, e.Child); e.Child.transform.localRotation = Quaternion.AngleAxis(mountpoint.LocalRotation, Vector3.forward); e.Child.transform.localPosition = hardpoint.LocalVector2D + mountpoint.LocalVector2D; // Makes sure attached body doesn't change parent's center of gravity or mass, and doesn't collide with the parent Rigidbody2D rigidbody2D; if (e.Child.TryGetComponents(out rigidbody2D)) { rigidbody2D.isKinematic = true; rigidbody2D.simulated = false; } hardpoint.Attached = mountpoint.GetComponent <EgoComponent>(); } }