diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java index 472ba5b..eb384f2 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -3,9 +3,12 @@ package com.iutlaval.myapplication.Game; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.view.MotionEvent; import com.iutlaval.myapplication.Game.Cards.Card; 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.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.DrawableCard; @@ -16,6 +19,7 @@ public class GameLogicThread extends Thread{ private Context cont; private Renderer renderer; private boolean ready; + private TouchHandler touch; public GameLogicThread(Context cont, Renderer renderer) { @@ -23,6 +27,7 @@ public class GameLogicThread extends Thread{ this.cont = cont; this.renderer = renderer; renderer.setEngine(this); + touch = new TouchHandler(renderer); } private float i=0; @@ -89,5 +94,12 @@ public class GameLogicThread extends Thread{ return ready; } - //placeOnBoard() + + /** + * relais l'evenement directement au touch Handler + * @param event + */ + public void onTouchEvent(MotionEvent event) { + if(isReady())touch.onTouchEvent(event); + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java new file mode 100644 index 0000000..026d0dd --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/TouchHandler.java @@ -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); + } + } + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/GameActivity.java b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java index 08bc50a..ba04523 100644 --- a/app/src/main/java/com/iutlaval/myapplication/GameActivity.java +++ b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java @@ -7,6 +7,7 @@ import android.content.pm.ActivityInfo; import android.graphics.Point; import android.os.Bundle; import android.view.Display; +import android.view.MotionEvent; import com.iutlaval.myapplication.Game.GameLogicThread; import com.iutlaval.myapplication.Video.FpsTime; @@ -14,6 +15,8 @@ import com.iutlaval.myapplication.Video.Renderer; public class GameActivity extends Activity { + private static GameLogicThread gameEngine; + public static int screenWidth=0; public static int screenHeight=0; public static boolean bilinearFiltering = true; @@ -22,6 +25,7 @@ public class GameActivity extends Activity { return false;//TODO implement it } + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -48,10 +52,24 @@ public class GameActivity extends Activity { screenHeight = size.y; } - GameLogicThread gameEngine = new GameLogicThread(this,renderer); + gameEngine = new GameLogicThread(this,renderer); gameEngine.start(); 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); + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java index 8008abf..13a1c78 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCard.java @@ -218,4 +218,12 @@ public class DrawableCard extends Drawable{ setCoordinates(getX(), getY()); updateHpAndAtk(card.getAttack(),card.getHealth()); } + + public static int getCardWith() { + return CARD_WITH; + } + + public static int getCardHeight() { + return CARD_HEIGHT; + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java index e7f8cc1..9da0520 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java @@ -12,6 +12,7 @@ import androidx.annotation.NonNull; import com.iutlaval.myapplication.Game.GameLogicThread; import com.iutlaval.myapplication.Video.Drawables.Drawable; +import com.iutlaval.myapplication.Video.Drawables.DrawableCard; import java.util.ArrayList; import java.util.List; @@ -207,4 +208,28 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { public void setEngine(GameLogicThread 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; + } }