protected override void OnUpdate(TimeSlice time) { base.OnUpdate(time); var targetPosition = this.targetPosition; if (null != target) { targetPosition.x += target.transform.position.x; targetPosition.y += target.transform.position.y; } var degreeAngle = AngleUtils.Vector2ToDegreeAngle(new Vector2(targetPosition.x - transform.position.x, targetPosition.y - transform.position.y)); rotationObject.transform.eulerAngles = new Vector3(0, 0, -degreeAngle); switch (layoutType) { case LayoutType.None: break; } if (cutoffDistance > 0) { if (null == parentObject) { Debug.Log("Error. Parent object required for cutoff"); return; } var distance = AngleUtils.Distance(parentObject.transform.position, targetPosition); Cutoff(distance <= cutoffDistance); } }
public void OnInputMove(InputAction.CallbackContext context) { if (!CanMove()) { return; } if (null == node || null == boardRunner) { return; } //Debug.Log("Input Move: " + context.ToString()); var axisVector = context.ReadValue <Vector2>(); var distance = AngleUtils.Distance(Vector2.zero, axisVector); if (distance <= deadZone) { return; } var angle = AngleUtils.Vector2ToDegreeAngle(axisVector); var direction = MapUtils.DegreeAngleToMapDirection(angle, axisLimit); var moveResult = boardRunner.MovePiece(node.piece, direction, moveTime); OnMoveResult(node, direction, moveResult); }
protected virtual void Update() { switch (stateMachine.State) { case StateType.Arrived: return; } var node = GetComponent <Node2D>(); if (null == node) { return; } var distanceToTarget = AngleUtils.Distance(new Vector2(transform.position.x, transform.position.y), waypoint); if (distanceToTarget <= arriveDistance) { stateMachine.State = StateType.Arrived; node.Velocity = Vector2.zero; return; } var degreeAngle = AngleUtils.Vector2ToDegreeAngle(new Vector2(waypoint.x - transform.position.x, waypoint.y - transform.position.y)); node.Velocity = AngleUtils.DegreeAngleToVector2(degreeAngle, velocity); switch (orientType) { case OrientType.Rotate: node.RotationDegreeAngle = degreeAngle; break; } }
public void OnInputMove(InputAction.CallbackContext context) { if (null == node) { return; } // Don't use Node2D Velocity (it is constant). Use rigidbody velocity, which decays // This results in more fluid movement node.VelocityType = Node2D.MoveType.None; //Debug.Log("Input Move: " + context.ToString()); var angleAxisLimiter = new AngleAxisLimiter2D(axisLimit); var rigidbody = node.GetComponent <Rigidbody2D>(); var axisVector = context.ReadValue <Vector2>(); var angle = AngleUtils.Vector2ToDegreeAngle(axisVector); var distance = AngleUtils.Distance(Vector2.zero, axisVector); if (distance <= deadZone) { rigidbody.velocity = Vector2.zero; return; } var factor = (distance - deadZone) / (1.0f - deadZone); var interpolatedFactor = interpolate.Transform(factor); var moveSpeed = minMoveSpeed + ((maxMoveSpeed - minMoveSpeed) * interpolatedFactor); var limitedAngle = angleAxisLimiter.LimitAngle(angle); var velocity = AngleUtils.DegreeAngleToVector2(limitedAngle, moveSpeed); rigidbody.velocity = velocity; }
protected virtual void OnTriggerStay2D(Collider2D collider) { var colliderObject = collider.gameObject; var colliderWorldCenter = colliderObject.transform.position; var thisWorldCenter = transform.position; var distance = AngleUtils.Distance(colliderWorldCenter, thisWorldCenter); //Debug.Log("Trigger Gravity collider: " + colliderWorldCenter.ToString() + " well: " + thisWorldCenter.ToString() + " Distance: " + distance.ToString()); if (distance > radius) { return; } // Avoid divide by zero if (distance == 0 || radius == 0) { return; } var rigidbody = colliderObject.GetComponent <Rigidbody2D>(); if (null == rigidbody) { return; } var mass1 = rigidbody.mass; var mass2 = gravityMass; // Linear force var force = minForce + (maxForce - minForce) * (distance / radius); switch (forceType) { case ForceType.InverseSquareMass: force = (mass1 * mass2) / (distance * distance); break; case ForceType.Linear: break; } // Clamp force to prevent strange values near center and weak value at edge force = Mathf.Max(minForce, MathF.Min(maxForce, force)); var vectorToWell = new Vector2(thisWorldCenter.x - colliderWorldCenter.x, thisWorldCenter.y - colliderWorldCenter.y); //Debug.Log("Vector to well: " + vectorToWell.ToString() + " Force: " + force.ToString()); vectorToWell.Normalize(); var forceVector = vectorToWell * force; //Debug.Log("Force Vector: " + forceVector.ToString()); rigidbody.AddForce(forceVector); }