diff --git a/.gitignore b/.gitignore index 8691940dccf92c816ed42e02e9b125fe5f85d729..16d5e4419f88abcd7c4165573f361b67a67a94c7 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,8 @@ output.json #NDK obj/ -.externalNativeBuild \ No newline at end of file +<<<<<<< HEAD +.externalNativeBuild +======= +.externalNativeBuild +>>>>>>> Joystick diff --git a/app/src/main/java/com/example/a8_bitinvader/GameView.java b/app/src/main/java/com/example/a8_bitinvader/GameView.java index 7e225cd05e9ff0b652c798964104bc408b4b45ba..b5bafb42f16ff22c081c91e99ecc7d9a24282ba6 100644 --- a/app/src/main/java/com/example/a8_bitinvader/GameView.java +++ b/app/src/main/java/com/example/a8_bitinvader/GameView.java @@ -1,6 +1,7 @@ package com.example.a8_bitinvader; import android.content.Context; +import android.view.MotionEvent; import android.view.SurfaceView; import android.graphics.Canvas; import android.graphics.Paint; // necessary when drawing Bitmaps with Canvas objects @@ -14,6 +15,10 @@ public class GameView extends SurfaceView implements Runnable{ private Background background1, background2; private Paint paint; + Joystick joystick = new Joystick(450,1300,100,40); + //undecided location + + public GameView(Context context, int screenWidth, int screenHeight) { super(context); @@ -67,6 +72,8 @@ public class GameView extends SurfaceView implements Runnable{ if(background2.yPos > screenHeight) { background2.yPos = -screenHeight; } + + joystick.update(joystick); } /* @@ -77,8 +84,12 @@ public class GameView extends SurfaceView implements Runnable{ Canvas canvas = getHolder().lockCanvas(); canvas.drawBitmap(background1.background, background1.xPos, background1.yPos, paint); canvas.drawBitmap(background2.background, background2.xPos, background2.yPos, paint); +<<<<<<< HEAD Player p1 = new Player(getResources()); canvas.drawBitmap(p1.playerImg, p1.xPos, p1.yPos, paint); +======= + joystick.draw(canvas); +>>>>>>> Joystick getHolder().unlockCanvasAndPost(canvas); } } @@ -109,4 +120,28 @@ public class GameView extends SurfaceView implements Runnable{ } } + + @Override + public boolean onTouchEvent(MotionEvent event) { + switch(event.getAction()) { + case MotionEvent.ACTION_DOWN: + if(joystick.isPressed((double)event.getX(), (double)event.getY())){ + joystick.setIsPressed(true); + } + return true; + case MotionEvent.ACTION_MOVE: + if(joystick.getIsPressed()) { + joystick.setActuator((double)event.getX(), (double)event.getY()); + } + return true; + case MotionEvent.ACTION_UP: + joystick.setIsPressed(false); + joystick.resetActuator(); + return true; + } + + return super.onTouchEvent(event); + + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/a8_bitinvader/Joystick.java b/app/src/main/java/com/example/a8_bitinvader/Joystick.java new file mode 100644 index 0000000000000000000000000000000000000000..732132f52b38c76a0fc9ca7e39d28d19ce9d548f --- /dev/null +++ b/app/src/main/java/com/example/a8_bitinvader/Joystick.java @@ -0,0 +1,114 @@ +package com.example.a8_bitinvader; + +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; + +public class Joystick { + private static final double MAX_SPEED = 3; //change ltr + private int outerCircleCenterX; + private int outerCircleCenterY; + private int innerCircleCenterX; + private int innerCircleCenterY; + private int outerCircleRadii; + private int innerCircleRadii; + private Paint innerCirclePaint; + private Paint outerCirclePaint; + + private double joystickCenterToTouchDistance; + private boolean isPressed; + private double actuatorX; + private double actuatorY; + + private double XVelocity; + private double YVelocity; + + public Joystick(int CenterPositionX, int CenterPositionY, int outerCircleRad, int innerCircleRad){ + outerCircleCenterX = CenterPositionX; + outerCircleCenterY = CenterPositionY; + innerCircleCenterX = CenterPositionX; + innerCircleCenterY = CenterPositionY; + outerCircleRadii = outerCircleRad; + innerCircleRadii = innerCircleRad; + + outerCirclePaint= new Paint(); + outerCirclePaint.setColor(Color.YELLOW); + outerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); + + innerCirclePaint= new Paint(); + innerCirclePaint.setColor(Color.WHITE); + innerCirclePaint.setStyle(Paint.Style.FILL_AND_STROKE); + } + + public void draw(Canvas canvas) { + //outer + canvas.drawCircle( + outerCircleCenterX, + outerCircleCenterY, + outerCircleRadii, + outerCirclePaint + ); + //inner + canvas.drawCircle( + innerCircleCenterX, + innerCircleCenterY, + innerCircleRadii, + innerCirclePaint + ); + } + + public void update(Joystick joystick) { + XVelocity = joystick.getActuatorX() * MAX_SPEED; + YVelocity = joystick.getActuatorY() * MAX_SPEED; + updateInnerCirclePosition(); + } + + public void updateInnerCirclePosition() { + innerCircleCenterX = (int) (outerCircleCenterX + actuatorX * outerCircleRadii); + innerCircleCenterY = (int) (outerCircleCenterY + actuatorY * outerCircleRadii); + } + + public boolean isPressed(double TouchPosx,double TouchPosy) { + joystickCenterToTouchDistance = Math.sqrt(Math.pow(outerCircleCenterX-TouchPosx,2) + + Math.pow(outerCircleCenterY-TouchPosy,2) + ); + return joystickCenterToTouchDistance < outerCircleRadii; + } + + public void setIsPressed(boolean isPressed) { + this.isPressed = isPressed; + } + + public boolean getIsPressed() { + return isPressed; + } + + public void setActuator(double TouchPosx,double TouchPosy) { + double deltaX = TouchPosx - outerCircleCenterX; + double deltaY = TouchPosy - outerCircleCenterY; + double deltaDistance = Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY,2)); + + if(deltaDistance < outerCircleRadii) { + actuatorX = deltaX/outerCircleRadii; + actuatorY = deltaY/outerCircleRadii; + }else { + actuatorX = deltaX/deltaDistance; + actuatorY = deltaY/deltaDistance; + } + + } + + public void resetActuator() { + actuatorX = 0.0; + actuatorY = 0.0; + } + + public double getActuatorX() { + return actuatorX; + } + + public double getActuatorY() { + return actuatorY; + } + +}