support du tactile

This commit is contained in:
marc
2020-09-13 20:43:49 +02:00
parent da0a39dade
commit 78e0cad673
5 changed files with 110 additions and 2 deletions
@@ -3,9 +3,12 @@ package com.iutlaval.myapplication.Game;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.view.MotionEvent;
import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.Game.Cards.Card;
import com.iutlaval.myapplication.Game.Cards.DemoCard; import com.iutlaval.myapplication.Game.Cards.DemoCard;
import com.iutlaval.myapplication.GameActivity;
import com.iutlaval.myapplication.MainActivity;
import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.R;
import com.iutlaval.myapplication.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.Drawable;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard; import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
@@ -16,6 +19,7 @@ public class GameLogicThread extends Thread{
private Context cont; private Context cont;
private Renderer renderer; private Renderer renderer;
private boolean ready; private boolean ready;
private TouchHandler touch;
public GameLogicThread(Context cont, Renderer renderer) public GameLogicThread(Context cont, Renderer renderer)
{ {
@@ -23,6 +27,7 @@ public class GameLogicThread extends Thread{
this.cont = cont; this.cont = cont;
this.renderer = renderer; this.renderer = renderer;
renderer.setEngine(this); renderer.setEngine(this);
touch = new TouchHandler(renderer);
} }
private float i=0; private float i=0;
@@ -89,5 +94,12 @@ public class GameLogicThread extends Thread{
return ready; return ready;
} }
//placeOnBoard()
/**
* relais l'evenement directement au touch Handler
* @param event
*/
public void onTouchEvent(MotionEvent event) {
if(isReady())touch.onTouchEvent(event);
}
} }
@@ -0,0 +1,45 @@
package com.iutlaval.myapplication.Game;
import android.view.MotionEvent;
import com.iutlaval.myapplication.GameActivity;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
import com.iutlaval.myapplication.Video.Renderer;
public class TouchHandler {
//TODO mettre sa dans une classe isolé
private float deltaX = 0;
private float deltaY = 0;
private DrawableCard moveEventCard = null;
private Renderer renderer;
public TouchHandler(Renderer renderer)
{
this.renderer = renderer;
}
public void onTouchEvent(MotionEvent event){
if(event.getPointerCount() <= 1)
{
float unscalled_X = event.getX() / GameActivity.screenWidth * 100;
float unscalled_Y = event.getY() / GameActivity.screenHeight * 100;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
moveEventCard = renderer.getCardOn(unscalled_X, unscalled_Y);
if(moveEventCard != null) {
deltaY = unscalled_Y - moveEventCard.getY();
deltaX = unscalled_X - moveEventCard.getX();
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
moveEventCard = null;
deltaY = 0;
deltaX = 0;
} else if (moveEventCard != null) {
moveEventCard.setCoordinates(unscalled_X - deltaX, unscalled_Y - deltaY);
}
}
}
}
@@ -7,6 +7,7 @@ import android.content.pm.ActivityInfo;
import android.graphics.Point; import android.graphics.Point;
import android.os.Bundle; import android.os.Bundle;
import android.view.Display; import android.view.Display;
import android.view.MotionEvent;
import com.iutlaval.myapplication.Game.GameLogicThread; import com.iutlaval.myapplication.Game.GameLogicThread;
import com.iutlaval.myapplication.Video.FpsTime; import com.iutlaval.myapplication.Video.FpsTime;
@@ -14,6 +15,8 @@ import com.iutlaval.myapplication.Video.Renderer;
public class GameActivity extends Activity { public class GameActivity extends Activity {
private static GameLogicThread gameEngine;
public static int screenWidth=0; public static int screenWidth=0;
public static int screenHeight=0; public static int screenHeight=0;
public static boolean bilinearFiltering = true; public static boolean bilinearFiltering = true;
@@ -22,6 +25,7 @@ public class GameActivity extends Activity {
return false;//TODO implement it return false;//TODO implement it
} }
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -48,10 +52,24 @@ public class GameActivity extends Activity {
screenHeight = size.y; screenHeight = size.y;
} }
GameLogicThread gameEngine = new GameLogicThread(this,renderer); gameEngine = new GameLogicThread(this,renderer);
gameEngine.start(); gameEngine.start();
setContentView(renderer); setContentView(renderer);
} }
@Override
public boolean onTouchEvent(MotionEvent event) {
if(gameEngine != null)gameEngine.onTouchEvent(event);
System.out.println(event.getX());
return super.onTouchEvent(event);
}
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
System.out.println(event.getX());
return super.onGenericMotionEvent(event);
}
} }
@@ -218,4 +218,12 @@ public class DrawableCard extends Drawable{
setCoordinates(getX(), getY()); setCoordinates(getX(), getY());
updateHpAndAtk(card.getAttack(),card.getHealth()); updateHpAndAtk(card.getAttack(),card.getHealth());
} }
public static int getCardWith() {
return CARD_WITH;
}
public static int getCardHeight() {
return CARD_HEIGHT;
}
} }
@@ -12,6 +12,7 @@ import androidx.annotation.NonNull;
import com.iutlaval.myapplication.Game.GameLogicThread; import com.iutlaval.myapplication.Game.GameLogicThread;
import com.iutlaval.myapplication.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.Drawable;
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@@ -207,4 +208,28 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
public void setEngine(GameLogicThread engine) { public void setEngine(GameLogicThread engine) {
this.engine = engine; this.engine = engine;
} }
/**
* retourne une carte au coodonés donné
* @param x coordoné en x
* @param y coodoné en y
* @return
*/
public DrawableCard getCardOn(float x, float y) {
for(Drawable d : toDraw)
{
if(d instanceof DrawableCard)
{
DrawableCard card = ((DrawableCard)d);
if(x >= card.getX() && x <= card.getX()+card.getCardWith())
{
if(y >= card.getY() && y <= card.getY()+card.getCardHeight())
{
return card;
}
}
}
}
return null;
}
} }