public CCRotateAroundToState(CCRotateAroundTo action, CCNode target) : base(action, target) { DistanceAngle = action.DistanceAngle; Origin = action.Origin; StartPosition = target.Position; RotationDirection = action.RotationDirection; offsetX = StartPosition.X - Origin.X; offsetY = StartPosition.Y - Origin.Y; // Calculate the Starting Angle of the target in relation to the Origin in which it is to rotate // Math.Atan2 returns the mathematical angle which is counter-clockwise [-Math.PI, +Math.PI] StartAngle = CCMathHelper.ToDegrees((float)Math.Atan2(offsetY, offsetX)); // Map value [0,360] StartAngle = (StartAngle + 360) % 360; // Now we work out how far we actually have to rotate DiffAngle = DistanceAngle - StartAngle; // Map value [0,360] and take into consideration the direction of rotation - CCW or CW DiffAngle = (DiffAngle + 360 * RotationDirection) % 360; theta = CCMathHelper.ToRadians(DiffAngle); }
public void UpdateBodyTransform() { if (PhysicsBody != null) { b2Vec2 pos = PhysicsBody.Position; float x = pos.x * ptmRatio; float y = pos.y * ptmRatio; if (IgnoreAnchorPointForPosition) { x += AnchorPointInPoints.X * ptmRatio; y += AnchorPointInPoints.Y * ptmRatio; } // Make matrix float radians = PhysicsBody.Angle; if (radians != 0) { Rotation = CCMathHelper.ToDegrees(-radians); } PositionX = x; PositionY = y; } }
public virtual void UpdateVelocity(CCPoint point) { // Calculate distance and angle from the center. float dx = point.X - PositionX; float dy = point.Y - PositionY; dycache = dy; float dSq = dx * dx + dy * dy; if (dSq <= DeadRadiusSq) { Velocity = CCPoint.Zero; Degrees = 0.0f; StickPosition = Center; return; } float angle = (float)Math.Atan2(dy, dx); // in radians if (angle < 0) { angle += CCMathHelper.TwoPi; } float cosAngle; float sinAngle; if (isDPad) { float anglePerSector = 360.0f / CCMathHelper.ToRadians(NumberOfDirections); // NumberOfDirections * ((float)Math.PI / 180.0f); angle = (float)Math.Round(angle / anglePerSector) * anglePerSector; } cosAngle = CCMathHelper.Cos(angle); sinAngle = CCMathHelper.Sin(angle); // NOTE: Velocity goes from -1.0 to 1.0. if (dSq > JoystickRadiusSq || isDPad) { dx = cosAngle * joystickRadius; dy = sinAngle * joystickRadius; } Velocity = new CCPoint(dx / joystickRadius, dy / joystickRadius); Degrees = CCMathHelper.ToDegrees(angle); // Update the thumb's position var newLoc = new CCPoint(dx + ContentSize.Width / 2, dy + ContentSize.Height / 2); StickPosition = newLoc; }
public void HandleInput(CCPoint touchPoint) { desiredLocation = touchPoint; float differenceY = touchPoint.Y - this.PositionY; float differenceX = touchPoint.X - this.PositionX; float angleInDegrees = -1 * CCMathHelper.ToDegrees( (float)System.Math.Atan2(differenceY, differenceX)); var rotateAction = new CCRotateTo(0.3f, angleInDegrees); this.AddAction(rotateAction); var moveAction = new CCMoveTo(1f, touchPoint); CCAction easingAction = new CCEaseSineInOut(moveAction); this.AddAction(easingAction); }
public void UpdateBodyTransform() { b2Vec2 pos = PhysBody.Position; float x = pos.x * App.PTM_RATIO; float y = pos.y * App.PTM_RATIO; if (IgnoreAnchorPointForPosition) { x += AnchorPointInPoints.X * App.PTM_RATIO; y += AnchorPointInPoints.Y * App.PTM_RATIO; } // Make matrix float radians = PhysBody.Angle; if (Math.Abs(radians) > EPSILON) { Rotation = CCMathHelper.ToDegrees(-radians); } PositionX = x; PositionY = y; }
void HandleMoveCircle(CCTouch touch) { const float timeToTake = 1.5f; // in seconds CCFiniteTimeAction coreAction = null; // By default all actions will be added directly to the // root node - it has values for Position, Scale, and Rotation. CCNode nodeToAddTo = drawNodeRoot; switch (VariableOptions [currentVariableIndex]) { case "Position": coreAction = new CCMoveTo(timeToTake, touch.Location); break; case "Scale": var distance = CCPoint.Distance(touch.Location, drawNodeRoot.Position); var desiredScale = distance / DefaultCircleRadius; coreAction = new CCScaleTo(timeToTake, desiredScale); break; case "Rotation": float differenceY = touch.Location.Y - drawNodeRoot.PositionY; float differenceX = touch.Location.X - drawNodeRoot.PositionX; float angleInDegrees = -1 * CCMathHelper.ToDegrees( (float)Math.Atan2(differenceY, differenceX)); coreAction = new CCRotateTo(timeToTake, angleInDegrees); break; case "LineWidth": coreAction = new LineWidthAction(timeToTake, touch.Location.X / 40f); // The LineWidthAction is a special action designed to work only on // LineNode instances, so we have to set the nodeToAddTo to the lineNode: nodeToAddTo = lineNode; break; } CCAction easing = null; switch (EasingOptions [currentEasingIndex]) { case "CCEaseBack": if (currentInOutIndex == 0) { easing = new CCEaseBackOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseBackIn(coreAction); } else { easing = new CCEaseBackInOut(coreAction); } break; case "CCEaseBounce": if (currentInOutIndex == 0) { easing = new CCEaseBounceOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseBounceIn(coreAction); } else { easing = new CCEaseBounceInOut(coreAction); } break; case "CCEaseElastic": if (currentInOutIndex == 0) { easing = new CCEaseElasticOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseElasticIn(coreAction); } else { easing = new CCEaseElasticInOut(coreAction); } break; case "CCEaseExponential": if (currentInOutIndex == 0) { easing = new CCEaseExponentialOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseExponentialIn(coreAction); } else { easing = new CCEaseExponentialInOut(coreAction); } break; case "CCEaseSine": if (currentInOutIndex == 0) { easing = new CCEaseSineOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseSineIn(coreAction); } else { easing = new CCEaseSineInOut(coreAction); } break; } nodeToAddTo.AddAction(easing ?? coreAction); }
public void setRotationFromVector() { _targetRotation = CCMathHelper.ToDegrees((float)Math.Atan2(-_vector.Y, _vector.X)); //this->setTargetRotation(CC_RADIANS_TO_DEGREES( atan2(-_vector.y, _vector.x) ) ); }
private void HandleMoveCircle(CCTouch touch) { const float timeToTake = 1.5f; // in seconds CCFiniteTimeAction coreAction = null; CCNode nodeToAddTo = drawNodeRoot; switch (VariableOptions [currentVariableIndex]) { case "Position": coreAction = new CCMoveTo(timeToTake, touch.Location); break; case "Scale": var distance = CCPoint.Distance(touch.Location, drawNodeRoot.Position); var desiredScale = distance / DefaultCircleRadius; coreAction = new CCScaleTo(timeToTake, desiredScale); break; case "Rotation": float differenceY = touch.Location.Y - drawNodeRoot.PositionY; float differenceX = touch.Location.X - drawNodeRoot.PositionX; float angleInDegrees = -1 * CCMathHelper.ToDegrees( (float)System.Math.Atan2(differenceY, differenceX)); coreAction = new CCRotateTo(timeToTake, angleInDegrees); break; case "LineWidth": coreAction = new LineWidthAction(timeToTake, touch.Location.X / 40.0f); nodeToAddTo = lineNode; break; } CCAction easing = null; switch (EasingOptions [currentEasingIndex]) { case "<None>": // no easing, do nothing, it will be handled below break; case "CCEaseBack": if (currentInOutIndex == 0) { easing = new CCEaseBackOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseBackIn(coreAction); } else { easing = new CCEaseBackInOut(coreAction); } break; case "CCEaseBounce": if (currentInOutIndex == 0) { easing = new CCEaseBounceOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseBounceIn(coreAction); } else { easing = new CCEaseBounceInOut(coreAction); } break; case "CCEaseElastic": if (currentInOutIndex == 0) { easing = new CCEaseElasticOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseElasticIn(coreAction); } else { easing = new CCEaseElasticInOut(coreAction); } break; case "CCEaseExponential": if (currentInOutIndex == 0) { easing = new CCEaseExponentialOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseExponentialIn(coreAction); } else { easing = new CCEaseExponentialInOut(coreAction); } break; case "CCEaseSine": if (currentInOutIndex == 0) { easing = new CCEaseSineOut(coreAction); } else if (currentInOutIndex == 1) { easing = new CCEaseSineIn(coreAction); } else { easing = new CCEaseSineInOut(coreAction); } break; } if (easing != null) { nodeToAddTo.AddAction(easing); } else { nodeToAddTo.AddAction(coreAction); } }