/// <summary> /// Draws the shapes onto the canvas, which is displayed afterwards /// </summary> protected override void OnDraw(Canvas canvas) { // Draw shapes m_ShapeRadiusLeft.Draw(canvas); m_ShapeRadiusRight.Draw(canvas); m_ShapeStickLeft.Draw(canvas); m_ShapeStickRight.Draw(canvas); // Set paint for data text Paint paint = new Paint(); paint.SetARGB(255, 0, 0, 0); paint.TextSize = 20; paint.TextAlign = Paint.Align.Center; paint.StrokeWidth = 5; // Draw data text for left joystick canvas.DrawText("DATA LEFT JOYSTICK", m_LeftJS.CENTER_X, m_LeftJS.CENTER_Y - SCREEN_HEIGHT / 2 - 30, paint); canvas.DrawText("Throttle " + m_LeftJS.GetThrottleValue(), m_LeftJS.CENTER_X, m_LeftJS.CENTER_Y - SCREEN_HEIGHT / 2, paint); canvas.DrawText("Rotation " + m_LeftJS.GetRotationValue(), m_LeftJS.CENTER_X, m_LeftJS.CENTER_Y - SCREEN_HEIGHT / 2 + 30, paint); canvas.DrawText("Angle is " + m_LeftJS.GetAngle() + " °", m_LeftJS.CENTER_X, m_LeftJS.CENTER_Y - SCREEN_HEIGHT / 2 + 60, paint); canvas.DrawText("Direction is " + m_LeftJS.GetDirection(), m_LeftJS.CENTER_X, m_LeftJS.CENTER_Y - SCREEN_HEIGHT / 2 + 90, paint); // Draw data text for right joystick canvas.DrawText("DATA RIGHT JOYSTICK", m_RightJS.CENTER_X, m_RightJS.CENTER_Y - SCREEN_HEIGHT / 2 - 30, paint); canvas.DrawText("Power is " + m_RightJS.GetPower() + " %", m_RightJS.CENTER_X, m_RightJS.CENTER_Y - SCREEN_HEIGHT / 2, paint); canvas.DrawText("Abs is " + m_RightJS.GetAbs(), m_RightJS.CENTER_X, m_RightJS.CENTER_Y - SCREEN_HEIGHT / 2 + 30, paint); canvas.DrawText("Angle is " + m_RightJS.GetAngle() + " °", m_RightJS.CENTER_X, m_RightJS.CENTER_Y - SCREEN_HEIGHT / 2 + 60, paint); canvas.DrawText("Direction is " + m_RightJS.GetDirection(), m_RightJS.CENTER_X, m_RightJS.CENTER_Y - SCREEN_HEIGHT / 2 + 90, paint); }
/// <summary> /// Sets new bounds for the joystick oval /// </summary> /// <param name="xPosition">X-Position of the touch</param> /// <param name="yPosition">Y-Position of the touch</param> private void UpdateOvals(float xPosition, float yPosition) { // Check if touch is in left or right of the screen if (xPosition <= SCREEN_WIDTH / 2) { // Handle touch in the left half m_LeftJS.SetPosition(xPosition, yPosition); m_LeftJS.GetPower(); // Check if touch was inside the displacement radius if ((m_LeftJS.GetAbs()) <= m_LeftJS.m_DisplacementRadius) // if((abs + m_LeftJS.m_StickRadius... { // Draw left joystick with original coordinates SetBoundsForLeftStick( (int)xPosition - (int)m_LeftJS.m_StickRadius, (int)yPosition - (int)m_LeftJS.m_StickRadius, (int)xPosition + (int)m_LeftJS.m_StickRadius, (int)yPosition + (int)m_LeftJS.m_StickRadius); } else { // Draw left joystick with maximum coordinates SetBoundsForLeftStick( (int)(m_LeftJS.m_DisplacementRadius * Math.Cos(m_LeftJS.GetAngle() * Math.PI / 180)) - (int)m_LeftJS.m_StickRadius + (int)m_LeftJS.CENTER_X, (int)(m_LeftJS.m_DisplacementRadius * Math.Sin(m_LeftJS.GetAngle() * Math.PI / 180)) - (int)m_LeftJS.m_StickRadius + (int)m_LeftJS.CENTER_Y, (int)(m_LeftJS.m_DisplacementRadius * Math.Cos(m_LeftJS.GetAngle() * Math.PI / 180)) + (int)m_LeftJS.m_StickRadius + (int)m_LeftJS.CENTER_X, (int)(m_LeftJS.m_DisplacementRadius * Math.Sin(m_LeftJS.GetAngle() * Math.PI / 180)) + (int)m_LeftJS.m_StickRadius + (int)m_LeftJS.CENTER_Y); } } else { // Handle touch in the right half m_RightJS.SetPosition(xPosition, yPosition); // Check if touch was inside the displacement radius if ((m_RightJS.GetAbs()) <= m_RightJS.m_DisplacementRadius) { // Draw right joystick with original coordinates SetBoundsForRightStick( (int)xPosition - (int)m_RightJS.m_StickRadius, (int)yPosition - (int)m_RightJS.m_StickRadius, (int)xPosition + (int)m_RightJS.m_StickRadius, (int)yPosition + (int)m_RightJS.m_StickRadius); } else { // Draw left joystick with maximum coordinates SetBoundsForRightStick( (int)(m_RightJS.m_DisplacementRadius * Math.Cos(m_RightJS.GetAngle() * Math.PI / 180)) - (int)m_RightJS.m_StickRadius + (int)m_RightJS.CENTER_X, (int)(m_RightJS.m_DisplacementRadius * Math.Sin(m_RightJS.GetAngle() * Math.PI / 180)) - (int)m_RightJS.m_StickRadius + (int)m_RightJS.CENTER_Y, (int)(m_RightJS.m_DisplacementRadius * Math.Cos(m_RightJS.GetAngle() * Math.PI / 180)) + (int)m_RightJS.m_StickRadius + (int)m_RightJS.CENTER_X, (int)(m_RightJS.m_DisplacementRadius * Math.Sin(m_RightJS.GetAngle() * Math.PI / 180)) + (int)m_RightJS.m_StickRadius + (int)m_RightJS.CENTER_Y); } } }