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 8948b0d..c4675ad 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -3,6 +3,7 @@ package com.iutlaval.myapplication.Game; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.Color; import android.util.Log; import android.view.MotionEvent; @@ -10,12 +11,17 @@ import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.Game.Decks.Deck; import com.iutlaval.myapplication.Game.Decks.DeckDemo; import com.iutlaval.myapplication.GameActivity; +import com.iutlaval.myapplication.InvalidDataException; import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.Video.Drawables.Drawable; import com.iutlaval.myapplication.Video.Drawables.DrawableBitmap; import com.iutlaval.myapplication.Video.Drawables.DrawableCard; +import com.iutlaval.myapplication.Video.Drawables.DrawableRectangle; +import com.iutlaval.myapplication.Video.Rectangle; import com.iutlaval.myapplication.Video.Renderer; +import java.util.List; + public class GameLogicThread extends Thread{ private Context cont; @@ -27,9 +33,11 @@ public class GameLogicThread extends Thread{ private Deck localPlayerDeck; private Hand localPlayerHand; private Board board; + private PlayableZonesHandler playableZonesHandler; public GameLogicThread(GameActivity gameActivity, Renderer renderer) { + Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight); ready=false; this.cont = gameActivity; this.renderer = renderer; @@ -40,6 +48,7 @@ public class GameLogicThread extends Thread{ localPlayerHand.fillHand(localPlayerDeck); this.gameActivity=gameActivity; board=new Board(); + playableZonesHandler = new PlayableZonesHandler(board); GameActivity.setGameEngine(this); } @@ -49,11 +58,11 @@ public class GameLogicThread extends Thread{ @Override public void run() { - Log.e("RESOLUTION:",""+GameActivity.screenWidth+"x"+GameActivity.screenHeight); //affichage de l'arriere plan Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background); renderer.addToDraw(new DrawableBitmap(bitmap, 0,0, "background", 100, 100 )); drawHandPreview(); + //Rectangle pos = new Rectangle(0F,0F,100F,100F); ready=true; while(true) @@ -72,7 +81,7 @@ public class GameLogicThread extends Thread{ for(Card c : localPlayerHand.getHand()) { renderer.addToDraw(c.getDrawableCard()); - renderer.moveToDraw(i* DrawableCard.CARD_WITH,90F,c.getDrawableCard().getName()); + renderer.moveToDraw(i* DrawableCard.getCardWith(),90F,c.getDrawableCard().getName()); i++; } @@ -119,6 +128,9 @@ public class GameLogicThread extends Thread{ 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); @@ -130,6 +142,7 @@ public class GameLogicThread extends Thread{ 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){ @@ -141,6 +154,7 @@ public class GameLogicThread extends Thread{ currentlySelected.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET); currentlySelected=null; } + playableZonesHandler.HidePlayableZones(renderer); }else{ touch.onTouchEvent(event); } @@ -148,18 +162,5 @@ public class GameLogicThread extends Thread{ } - public void displayPlayableZones() - { - Card[] cardsOnBoard = board.getPlayerCardsOnBoard(); - for(int i=0 ; i < cardsOnBoard.length ;i++) - { - if(cardsOnBoard[i] == null) - { - displayPlayableZoneOn(i); - } - } - } - private void displayPlayableZoneOn(int i) { - } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java b/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java index 58a650c..2958658 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java @@ -1,4 +1,61 @@ package com.iutlaval.myapplication.Game; +import android.graphics.Color; + +import com.iutlaval.myapplication.Game.Cards.Card; +import com.iutlaval.myapplication.InvalidDataException; +import com.iutlaval.myapplication.Video.Drawables.Drawable; +import com.iutlaval.myapplication.Video.Drawables.DrawableCard; +import com.iutlaval.myapplication.Video.Drawables.DrawableRectangle; +import com.iutlaval.myapplication.Video.Rectangle; +import com.iutlaval.myapplication.Video.Renderer; + +import java.util.ArrayList; +import java.util.List; + public class PlayableZonesHandler { + //90F au lieu de 100F car on n'a pas la pioche + private static final float CARD_SPACING = 90F / Board.MAX_CARD_ON_BOARD; + private List playableZones; + private Board board; + + public PlayableZonesHandler(Board board) + { + playableZones=new ArrayList<>(); + this.board=board; + } + + public void displayPlayableZones(Renderer renderer) + { + Card[] cardsOnBoard = board.getPlayerCardsOnBoard(); + for(int i=0 ; i < cardsOnBoard.length ;i++) + { + if(cardsOnBoard[i] == null) + { + displayPlayableZoneOn(i,renderer); + } + } + } + + private void displayPlayableZoneOn(int i,Renderer renderer) { + Rectangle pos = new Rectangle((DrawableCard.getCardWith()+1)*i,50F,DrawableCard.getCardWith(),DrawableCard.getCardHeight()); + + try { + Drawable zone = new DrawableRectangle(pos,"greySpace"+i, Color.LTGRAY); + playableZones.add(zone); + renderer.addToDrawWithoutUpdate(zone); + } catch (InvalidDataException e) { + e.printStackTrace(); + } + + } + + public void HidePlayableZones(Renderer renderer) + { + for(Drawable d : playableZones) + { + renderer.removeToDraw(d); + } + playableZones.clear(); + } } 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 ce80d88..1689a87 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 @@ -20,7 +20,7 @@ import com.iutlaval.myapplication.Video.Rectangle; public class DrawableCard extends Drawable{ private int ratio; - public static final int CARD_WITH = 14; + private static final int CARD_WITH = 14; private static final int CARD_HEIGHT = 40; private static final float HP_ATK_FONT_SIZE_OFFBOARD =60F; private static final float HP_ATK_FONT_SIZE_BOARD =70F; diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableRectangle.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableRectangle.java index e27743b..fead069 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableRectangle.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableRectangle.java @@ -1,6 +1,7 @@ package com.iutlaval.myapplication.Video.Drawables; import android.graphics.Bitmap; +import android.util.Log; import com.iutlaval.myapplication.InvalidDataException; import com.iutlaval.myapplication.Video.Rectangle; @@ -19,7 +20,9 @@ public class DrawableRectangle extends Drawable{ super(rectangle.getPositionX(),rectangle.getPositionY(),name); if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle); + Log.e("rect1",rectangle.getWidth()+""); rectangle.scaleRectangleToScreen(); + Log.e("rect2",rectangle.getWidth()+""); Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888); rectangle.bitmapRectangleBuilder(bitmap,color); 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 cc53b70..b14d294 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java @@ -64,10 +64,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { /** * cette fonction est appeler a chaque fois que l'utilisateur tourne son ecran * this function is unused since the screen is locked - * @param surfaceHolder - * @param i - * @param i1 - * @param i2 */ @Override public void surfaceChanged(@NonNull SurfaceHolder surfaceHolder, int i, int i1, int i2) { @@ -173,6 +169,16 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { * @return retourne faux si l'element existe deja */ public boolean addToDraw(Drawable newElement){ + boolean returnValue = addToDrawWithoutUpdate(newElement); + contentChanged=true; + return returnValue; + } + + /** + * permet d'ajouter un element a afficher + * @return retourne faux si l'element existe deja + */ + public boolean addToDrawWithoutUpdate(Drawable newElement){ if(newElement == null)return false; for(Drawable d : toDraw) { @@ -182,7 +188,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { } } toDraw.add(newElement); - contentChanged=true; return true; } @@ -215,6 +220,14 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { toDraw.remove(d); } + /** + * supprime le drawable possedant le nom indique mais n'upate pas le renderer + * @param drawable le drawable + */ + public void removeToDrawWithoutUpdate(Drawable drawable){ + removeToDrawWithoutUpdate(drawable.getName()); + } + /** * supprime le drawable possedant le nom indique * @param name le nom