Commit 9450e6db authored by Jiawei  Xiang's avatar Jiawei Xiang
Browse files

added function in gameView,

added joystick clss
parent 8057c12b
Loading
Loading
Loading
Loading
+29 −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(0,0,0,0);
    //undecided location


    public GameView(Context context, int screenWidth, int screenHeight) {
        super(context);

@@ -108,4 +113,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;

    }

    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;
    }

}