mise a jour server + client + partiel tactile
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
package com.iutlaval.myapplication.Game;
|
||||||
|
|
||||||
|
public final class COMMAND {
|
||||||
|
public static final String YOURTURN="yourturn";
|
||||||
|
public static final String DRAW = "draw";
|
||||||
|
public static final String GET_DECK = "getDeck";
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import com.iutlaval.myapplication.GameActivity;
|
|||||||
import com.iutlaval.myapplication.R;
|
import com.iutlaval.myapplication.R;
|
||||||
import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap;
|
import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap;
|
||||||
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
||||||
|
import com.iutlaval.myapplication.Video.Drawables.DrawableSelfRemoving;
|
||||||
import com.iutlaval.myapplication.Video.Renderer;
|
import com.iutlaval.myapplication.Video.Renderer;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -32,9 +33,10 @@ public class GameLogicThread extends Thread{
|
|||||||
private Deck localPlayerDeck;
|
private Deck localPlayerDeck;
|
||||||
private Hand localPlayerHand;
|
private Hand localPlayerHand;
|
||||||
private Board board;
|
private Board board;
|
||||||
private PlayableZonesHandler playableZonesHandler;
|
|
||||||
private DrawableCard currentlySelected = null;
|
|
||||||
private static final float SELECTING_OFFSET = 20F;
|
|
||||||
|
private boolean isYourTurn;
|
||||||
|
|
||||||
public GameLogicThread(GameActivity gameActivity, Renderer renderer)
|
public GameLogicThread(GameActivity gameActivity, Renderer renderer)
|
||||||
{
|
{
|
||||||
@@ -43,26 +45,29 @@ public class GameLogicThread extends Thread{
|
|||||||
ready=false;
|
ready=false;
|
||||||
this.cont = gameActivity;
|
this.cont = gameActivity;
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
touch = new TouchHandler(renderer);
|
touch = new TouchHandler(renderer,this,gameActivity);
|
||||||
localPlayerHand = new Hand();
|
localPlayerHand = new Hand();
|
||||||
this.gameActivity=gameActivity;
|
this.gameActivity=gameActivity;
|
||||||
board=new Board();
|
board=new Board();
|
||||||
playableZonesHandler = new PlayableZonesHandler(board);
|
|
||||||
GameActivity.setGameEngine(this);
|
GameActivity.setGameEngine(this);
|
||||||
|
isYourTurn=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
//affichage de l'arriere plan
|
//loading textures
|
||||||
|
Bitmap bitmapYourTurn = BitmapFactory.decodeResource(renderer.getResources(),R.drawable.t_pb_your_turn);
|
||||||
Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background);
|
Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background);
|
||||||
|
|
||||||
|
//adding the background
|
||||||
renderer.addToDraw(new DrawableBitmap(bitmap, 0,0, "background", 100, 100 ));
|
renderer.addToDraw(new DrawableBitmap(bitmap, 0,0, "background", 100, 100 ));
|
||||||
//drawHandPreview();
|
//drawHandPreview();
|
||||||
//Rectangle pos = new Rectangle(0F,0F,100F,100F);
|
//Rectangle pos = new Rectangle(0F,0F,100F,100F);
|
||||||
|
|
||||||
//TODO : choix du deck avant de se co au serv
|
//TODO : choix du deck avant de se co au serv
|
||||||
|
|
||||||
final String host = "4.tcp.ngrok.io";//192.168.43.251
|
final String host = "4.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io:
|
||||||
final int port = 18567;
|
final int port = 17531;
|
||||||
ObjectInputStream clientIn=null;
|
ObjectInputStream clientIn=null;
|
||||||
ObjectOutputStream clientOut=null;
|
ObjectOutputStream clientOut=null;
|
||||||
try {
|
try {
|
||||||
@@ -76,6 +81,8 @@ public class GameLogicThread extends Thread{
|
|||||||
}
|
}
|
||||||
renderer.updateFrame();
|
renderer.updateFrame();
|
||||||
|
|
||||||
|
//principe de fonctionnement : on attends une comande du server et on l'execute
|
||||||
|
//si quelquechose se passe alors c'est le server qu'il l'a dit
|
||||||
ready=true;
|
ready=true;
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
@@ -83,7 +90,7 @@ public class GameLogicThread extends Thread{
|
|||||||
String serveurCmd = (String)clientIn.readObject();
|
String serveurCmd = (String)clientIn.readObject();
|
||||||
switch (serveurCmd)
|
switch (serveurCmd)
|
||||||
{
|
{
|
||||||
case "getDeck":
|
case COMMAND.GET_DECK:
|
||||||
//TODO get deck from player
|
//TODO get deck from player
|
||||||
clientOut.writeObject("deckDemo");
|
clientOut.writeObject("deckDemo");
|
||||||
//TODO assing this deck
|
//TODO assing this deck
|
||||||
@@ -93,12 +100,19 @@ public class GameLogicThread extends Thread{
|
|||||||
|
|
||||||
Log.e("recived","getdeck");
|
Log.e("recived","getdeck");
|
||||||
break;
|
break;
|
||||||
case "draw":
|
case COMMAND.DRAW:
|
||||||
int nbcard = (Integer)clientIn.readObject();
|
int nbcard = (Integer)clientIn.readObject();
|
||||||
localPlayerHand.pickCardFromDeck(localPlayerDeck,nbcard);
|
localPlayerHand.pickCardFromDeck(localPlayerDeck,nbcard);
|
||||||
Log.e("picked",nbcard+"card");
|
Log.e("picked",nbcard+"card");
|
||||||
drawHandPreview();
|
drawHandPreview();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case COMMAND.YOURTURN:
|
||||||
|
isYourTurn=true;
|
||||||
|
renderer.addToDraw(new DrawableSelfRemoving(new DrawableBitmap(bitmapYourTurn,0,0,"yourTurn",100F,50F),1));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
Log.e("UNKOWN COMMAND",serveurCmd);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("ERROR DURING COMS","SERVER DIED");
|
Log.e("ERROR DURING COMS","SERVER DIED");
|
||||||
@@ -145,61 +159,19 @@ public class GameLogicThread extends Thread{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* relais l'evenement directement au touch Handler
|
* délegue l'evenement directement au touch Handler
|
||||||
* @param event
|
* @param event
|
||||||
*/
|
*/
|
||||||
public void onTouchEvent(MotionEvent event) {
|
public void onTouchEvent(MotionEvent event) {
|
||||||
if(isReady()){
|
//if(isReady())touch.onTouchEvent(event);
|
||||||
//calcul y sur une echelle de 0 a 100
|
}
|
||||||
float scalled_Y = event.getY() / GameActivity.screenHeight * 100;
|
|
||||||
//si on clique sur une carte dans la main
|
|
||||||
if(event.getAction() == MotionEvent.ACTION_DOWN) {
|
|
||||||
float unscalled_X = event.getX() / GameActivity.screenWidth * 100;
|
|
||||||
DrawableCard smallCArd = renderer.getCardOn(unscalled_X,scalled_Y);
|
|
||||||
if(smallCArd !=null)
|
|
||||||
{
|
|
||||||
renderer.removeToDrawWithoutUpdate(smallCArd);
|
|
||||||
playableZonesHandler.displayPlayableZones(renderer);
|
|
||||||
renderer.addToDraw(smallCArd);
|
|
||||||
if(currentlySelected !=null)
|
|
||||||
{
|
|
||||||
currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
|
|
||||||
//on update pas affin d'avoir un rendu plus fluide au moment de mettre l'aure carte
|
|
||||||
renderer.removeToDrawWithoutUpdate(currentlySelected.getName()+"BIG");
|
|
||||||
}
|
|
||||||
currentlySelected = smallCArd;
|
|
||||||
DrawableCard bigCard = new DrawableCard(smallCArd,cont,2);
|
|
||||||
renderer.addToDraw(bigCard);
|
|
||||||
bigCard.setCoordinates(72F,10F);
|
|
||||||
smallCArd.setCoordinates(smallCArd.getX(),smallCArd.getY() - SELECTING_OFFSET);
|
|
||||||
|
|
||||||
}
|
|
||||||
touch.onTouchEvent(event);
|
|
||||||
}else if(event.getAction() == MotionEvent.ACTION_UP){
|
|
||||||
//currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
|
|
||||||
touch.onTouchEvent(event);
|
|
||||||
if(currentlySelected !=null)
|
|
||||||
{
|
|
||||||
//jouer une carte
|
|
||||||
int zone = playableZonesHandler.getHoveredZone(currentlySelected);
|
|
||||||
if(zone != -1)
|
|
||||||
{
|
|
||||||
currentlySelected.setOnBoard(true);
|
|
||||||
currentlySelected.setCoordinates((DrawableCard.getCardWith()+1)*zone,55F);
|
|
||||||
currentlySelected.setDraggable(false);
|
|
||||||
}else{
|
|
||||||
currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET);
|
|
||||||
}
|
|
||||||
renderer.removeToDraw(currentlySelected.getName()+"BIG");
|
|
||||||
currentlySelected=null;
|
|
||||||
}
|
|
||||||
playableZonesHandler.hidePlayableZones(renderer);
|
|
||||||
}else{
|
|
||||||
touch.onTouchEvent(event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
public boolean isYourTurn() {
|
||||||
|
return isYourTurn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Board getBoard() {
|
||||||
|
return board;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.iutlaval.myapplication.Game;
|
package com.iutlaval.myapplication.Game;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
import com.iutlaval.myapplication.GameActivity;
|
import com.iutlaval.myapplication.GameActivity;
|
||||||
@@ -12,47 +13,140 @@ public class TouchHandler {
|
|||||||
private float TouchDeltaY = 0;
|
private float TouchDeltaY = 0;
|
||||||
private float originalPositionX = 0;
|
private float originalPositionX = 0;
|
||||||
private float originalPositionY = 0;
|
private float originalPositionY = 0;
|
||||||
private DrawableCard moveEventCard = null;
|
private DrawableCard dragAndDropCard = null;
|
||||||
private Renderer renderer;
|
private DrawableCard smallCardUserForBig = null;
|
||||||
|
private static final float SELECTING_OFFSET = 20F;
|
||||||
|
private PlayableZonesHandler playableZonesHandler;
|
||||||
|
|
||||||
public TouchHandler(Renderer renderer)
|
private Renderer renderer;
|
||||||
|
private GameLogicThread gameLogic;
|
||||||
|
private Context context;
|
||||||
|
|
||||||
|
public TouchHandler(Renderer renderer, GameLogicThread gameLogic, Context context)
|
||||||
{
|
{
|
||||||
|
playableZonesHandler = new PlayableZonesHandler(gameLogic.getBoard());
|
||||||
this.renderer = renderer;
|
this.renderer = renderer;
|
||||||
|
this.gameLogic = gameLogic;
|
||||||
|
this.context=context;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void onTouchEvent(MotionEvent event){
|
public void onTouchEvent(MotionEvent event)
|
||||||
|
{
|
||||||
//on ignore le multi touch
|
//on ignore le multi touch
|
||||||
if(event.getPointerCount() <= 1)
|
if(event.getPointerCount() <= 1)
|
||||||
{
|
{
|
||||||
float unscaled_X = event.getX() / GameActivity.screenWidth * 100;
|
if(gameLogic.isYourTurn())
|
||||||
float unscaled_Y = event.getY() / GameActivity.screenHeight * 100;
|
{
|
||||||
|
//l'ordre importe on a besoin d'avoir une carte sélectionner pour la jouer
|
||||||
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
if(event.getAction() == MotionEvent.ACTION_DOWN)
|
||||||
if(unscaled_Y <= 90F)
|
|
||||||
{
|
{
|
||||||
moveEventCard = renderer.getCardOn(unscaled_X, unscaled_Y -20F);
|
//selectionne la carte
|
||||||
|
dragAndDropHandler(event);
|
||||||
|
//affiche les zones de jeu
|
||||||
|
playCard(event);
|
||||||
}else{
|
}else{
|
||||||
moveEventCard = renderer.getCardOn(unscaled_X, unscaled_Y);
|
//joue la carte si on a ACTION_UP
|
||||||
|
playCard(event);
|
||||||
|
//déplace la carte(non ACTION_UP) et la désélection (ACTION_UP)
|
||||||
|
dragAndDropHandler(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moveEventCard != null) {
|
}
|
||||||
TouchDeltaY = unscaled_Y - moveEventCard.getY();
|
//afficher grosse carte
|
||||||
TouchDeltaX = unscaled_X - moveEventCard.getX();
|
bigCardHandler(event);
|
||||||
originalPositionX = moveEventCard.getX();
|
|
||||||
originalPositionY = moveEventCard.getY();
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
}
|
||||||
TouchDeltaY = 0;
|
}
|
||||||
TouchDeltaX = 0;
|
|
||||||
//TODO detect zones
|
|
||||||
if(moveEventCard != null)renderer.moveToDraw(originalPositionX,originalPositionY,moveEventCard.getName());
|
private void dragAndDropHandler(MotionEvent event)
|
||||||
moveEventCard = null;
|
{
|
||||||
} else if (moveEventCard != null) {
|
//on calcul les coordonées en % de l'écran
|
||||||
moveEventCard.setCoordinates(unscaled_X - TouchDeltaX, unscaled_Y - TouchDeltaY);
|
float unscaled_X = event.getX() / GameActivity.screenWidth * 100;
|
||||||
renderer.updateFrame();
|
float unscaled_Y = event.getY() / GameActivity.screenHeight * 100;
|
||||||
|
|
||||||
|
//quand on appui on capture une carte et on note sa positon initial
|
||||||
|
if (event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
|
dragAndDropCard = renderer.getCardOn(unscaled_X, unscaled_Y);
|
||||||
|
|
||||||
|
if(!dragAndDropCard.isDraggable()) dragAndDropCard = null;
|
||||||
|
|
||||||
|
if (dragAndDropCard != null) {
|
||||||
|
//on calcul la position par raport au doigt de l'utilisateur
|
||||||
|
TouchDeltaY = unscaled_Y - dragAndDropCard.getY();
|
||||||
|
TouchDeltaX = unscaled_X - dragAndDropCard.getX();
|
||||||
|
originalPositionX = dragAndDropCard.getX();
|
||||||
|
originalPositionY = dragAndDropCard.getY();
|
||||||
|
}
|
||||||
|
|
||||||
|
} else if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||||
|
TouchDeltaY = 0;
|
||||||
|
TouchDeltaX = 0;
|
||||||
|
//TODO detect zones
|
||||||
|
if(dragAndDropCard != null)renderer.moveToDraw(originalPositionX,originalPositionY, dragAndDropCard.getName());
|
||||||
|
dragAndDropCard = null;
|
||||||
|
} else if (dragAndDropCard != null) {
|
||||||
|
dragAndDropCard.setCoordinates(unscaled_X - TouchDeltaX, unscaled_Y - TouchDeltaY);
|
||||||
|
renderer.updateFrame();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void bigCardHandler(MotionEvent event)
|
||||||
|
{
|
||||||
|
//calcul y,x sur une echelle de 0 a 100
|
||||||
|
float unScalled_Y = event.getY() / GameActivity.screenHeight * 100;
|
||||||
|
float unScalled_X = event.getX() / GameActivity.screenWidth * 100;
|
||||||
|
|
||||||
|
if(event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
|
//on recupére la carte a afficher en grand
|
||||||
|
DrawableCard smallCArd = renderer.getCardOn(unScalled_X,unScalled_Y);
|
||||||
|
if(smallCArd !=null)
|
||||||
|
{
|
||||||
|
if(smallCardUserForBig !=null)
|
||||||
|
{
|
||||||
|
smallCardUserForBig.setCoordinates(smallCardUserForBig.getX(), smallCardUserForBig.getY() + SELECTING_OFFSET);
|
||||||
|
//on update pas affin d'avoir un rendu plus fluide au moment de mettre l'aure carte
|
||||||
|
renderer.removeToDrawWithoutUpdate(smallCardUserForBig.getName()+"BIG");
|
||||||
|
}
|
||||||
|
smallCardUserForBig = smallCArd;
|
||||||
|
DrawableCard bigCard = new DrawableCard(smallCArd,context,2);
|
||||||
|
renderer.addToDraw(bigCard);
|
||||||
|
bigCard.setCoordinates(72F,10F);
|
||||||
|
//on ne décale pas la carte sélectionner si ce n'est pas notre tours
|
||||||
|
if(gameLogic.isYourTurn())smallCArd.setCoordinates(smallCArd.getX(),smallCArd.getY() - SELECTING_OFFSET);
|
||||||
|
//si on lache la carte
|
||||||
|
}else if(event.getAction() == MotionEvent.ACTION_UP) {
|
||||||
|
if (smallCardUserForBig != null) {
|
||||||
|
renderer.removeToDraw(smallCardUserForBig.getName() + "BIG");
|
||||||
|
smallCardUserForBig = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void playCard(MotionEvent event)
|
||||||
|
{
|
||||||
|
//l'affichage se fait par une liste fifo donc on veut que notre carte soit afficher aprés les zones
|
||||||
|
if(event.getAction() == MotionEvent.ACTION_DOWN) {
|
||||||
|
//on enleve l carte
|
||||||
|
renderer.removeToDrawWithoutUpdate(dragAndDropCard);
|
||||||
|
//on ajoute les zones
|
||||||
|
playableZonesHandler.displayPlayableZones(renderer);
|
||||||
|
// et enfin on remet la carte
|
||||||
|
renderer.addToDraw(dragAndDropCard);
|
||||||
|
|
||||||
|
}else if(event.getAction() == MotionEvent.ACTION_UP) {
|
||||||
|
int zone = playableZonesHandler.getHoveredZone(smallCardUserForBig);
|
||||||
|
if(zone != -1)
|
||||||
|
{
|
||||||
|
dragAndDropCard.setOnBoard(true);
|
||||||
|
dragAndDropCard.setCoordinates((DrawableCard.getCardWith()+1)*zone,55F);
|
||||||
|
dragAndDropCard.setDraggable(false);
|
||||||
|
}else{
|
||||||
|
dragAndDropCard.setCoordinates(dragAndDropCard.getX(),dragAndDropCard.getY() + SELECTING_OFFSET);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import android.graphics.Canvas;
|
|||||||
import android.graphics.Paint;
|
import android.graphics.Paint;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
import com.iutlaval.myapplication.GameActivity;
|
import com.iutlaval.myapplication.GameActivity;
|
||||||
|
import com.iutlaval.myapplication.exception.BadDrawableName;
|
||||||
|
|
||||||
public abstract class Drawable {
|
public abstract class Drawable {
|
||||||
|
|
||||||
@@ -23,7 +24,12 @@ public abstract class Drawable {
|
|||||||
{
|
{
|
||||||
this.x=x;
|
this.x=x;
|
||||||
this.y=y;
|
this.y=y;
|
||||||
|
if(name == null || name.equals("")) {
|
||||||
|
throw new BadDrawableName(name);
|
||||||
|
}
|
||||||
this.name=name;
|
this.name=name;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -33,4 +33,5 @@ public class DrawableBitmap extends Drawable{
|
|||||||
|
|
||||||
setBitmap(Bitmap.createScaledBitmap(bitmap, (int)x_scaled_size, (int)y_scaled_size, GameActivity.bilinearFiltering));
|
setBitmap(Bitmap.createScaledBitmap(bitmap, (int)x_scaled_size, (int)y_scaled_size, GameActivity.bilinearFiltering));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+33
@@ -0,0 +1,33 @@
|
|||||||
|
package com.iutlaval.myapplication.Video.Drawables;
|
||||||
|
|
||||||
|
import android.graphics.Canvas;
|
||||||
|
import android.graphics.Paint;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
|
import java.time.Instant;
|
||||||
|
|
||||||
|
public class DrawableSelfRemoving extends Drawable{
|
||||||
|
|
||||||
|
private Drawable drawable;
|
||||||
|
private long lifetime;
|
||||||
|
|
||||||
|
public DrawableSelfRemoving(Drawable drawable,int lifetime) {
|
||||||
|
super(drawable.getX(), drawable.getY(), drawable.getName());
|
||||||
|
this.drawable = drawable;
|
||||||
|
this.lifetime = System.currentTimeMillis()+lifetime*1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawOn(@NonNull Canvas c, @NonNull Paint p) {
|
||||||
|
if(lifetime > System.currentTimeMillis())
|
||||||
|
{
|
||||||
|
drawable.drawOn(c,p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDone()
|
||||||
|
{
|
||||||
|
return lifetime < System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import com.iutlaval.myapplication.Game.GameLogicThread;
|
|||||||
import com.iutlaval.myapplication.GameActivity;
|
import com.iutlaval.myapplication.GameActivity;
|
||||||
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;
|
||||||
|
import com.iutlaval.myapplication.Video.Drawables.DrawableSelfRemoving;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -88,13 +89,29 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback {
|
|||||||
* function ran for each frame to draw all the drawables
|
* function ran for each frame to draw all the drawables
|
||||||
* @param canvas canevas on wich to draw on
|
* @param canvas canevas on wich to draw on
|
||||||
*/
|
*/
|
||||||
|
List<Drawable> toremove = new ArrayList<>();
|
||||||
@Override
|
@Override
|
||||||
protected void onDraw(Canvas canvas) {
|
protected void onDraw(Canvas canvas) {
|
||||||
//le to Array patch les crash
|
//le to Array patch les crash
|
||||||
|
|
||||||
for(Drawable d : toDraw.toArray(new Drawable[0]))
|
for(Drawable d : toDraw.toArray(new Drawable[0]))
|
||||||
{
|
{
|
||||||
|
if(d instanceof DrawableSelfRemoving)
|
||||||
|
{
|
||||||
|
if(((DrawableSelfRemoving)d).isDone())
|
||||||
|
{
|
||||||
|
toremove.add(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
d.drawOn(canvas,p);
|
d.drawOn(canvas,p);
|
||||||
}
|
}
|
||||||
|
for(Drawable d : toremove)
|
||||||
|
{
|
||||||
|
removeToDrawWithoutUpdate(d);
|
||||||
|
}
|
||||||
|
if(toremove.size() > 0)updateFrame();
|
||||||
|
toremove.clear();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package com.iutlaval.myapplication.exception;
|
||||||
|
|
||||||
|
public class BadDrawableName extends RuntimeException{
|
||||||
|
String name;
|
||||||
|
public BadDrawableName(String name) {
|
||||||
|
this.name=name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void printStackTrace() {
|
||||||
|
super.printStackTrace();
|
||||||
|
if(name == null)
|
||||||
|
{
|
||||||
|
System.out.println("NAME CAN'T BE NULL");
|
||||||
|
}else{
|
||||||
|
System.out.println("NAME CAN'T BE EMPTY");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 105 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
+1
-1
@@ -5,7 +5,7 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath "com.android.tools.build:gradle:4.0.1"
|
classpath 'com.android.tools.build:gradle:4.1.0'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
#Sun Sep 06 08:52:12 CEST 2020
|
#Thu Oct 29 14:51:34 CET 2020
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
|
||||||
|
|||||||
Reference in New Issue
Block a user