protected override bool Initialize() { if (Wire == null) { Debug.LogWarning("Wire not assigned to winch. Winch invalid and ignored.", this); return(false); } WireRouteNode winchNode = Wire.Route.FirstOrDefault(node => node.Winch == this); if (winchNode == null) { Debug.LogWarning("Unable to initialize winch - no winch node assigned.", this); return(false); } RigidBody rb = winchNode.Parent != null?winchNode.Parent.GetInitializedComponentInParent <RigidBody>() : null; if (rb == null) { Native = new agxWire.WireWinchController(null, winchNode.Position.ToHandedVec3(), (winchNode.Rotation * Vector3.forward).ToHandedVec3(), PulledInLength); } else { Native = new agxWire.WireWinchController(rb.Native, winchNode.CalculateLocalPosition(rb.gameObject).ToHandedVec3(), (winchNode.CalculateLocalRotation(rb.gameObject) * Vector3.forward).ToHandedVec3()); } return(true); }
/// <summary> /// Construct a route node given type, parent game object, local position to parent and /// local rotation to parent. /// </summary> /// <param name="type">Node type.</param> /// <param name="parent">Parent game object - world if null.</param> /// <param name="localPosition">Position in parent frame. If parent is null this is the position in world frame.</param> /// <param name="localRotation">Rotation in parent frame. If parent is null this is the rotation in world frame.</param> /// <returns>Wire route node instance.</returns> public static WireRouteNode Create(Wire.NodeType type = Wire.NodeType.BodyFixedNode, GameObject parent = null, Vector3 localPosition = default(Vector3), Quaternion localRotation = default(Quaternion)) { WireRouteNode node = Create <WireRouteNode>(parent, localPosition, localRotation); node.Type = type; return(node); }