Commit 15bc322a authored by Anish Sinha's avatar Anish Sinha
Browse files

merged Joystick into Sprites

parents ed9e6a5d 690797de
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -34,4 +34,8 @@ output.json

#NDK
obj/
<<<<<<< HEAD
.externalNativeBuild
=======
.externalNativeBuild
>>>>>>> Joystick
+35 −0
Original line number Diff line number Diff line
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
+114 −0
Original line number Diff line number Diff line
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;
    }

}