diff --git a/.gitignore b/.gitignore index fb91c56..6eb8223 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *.iml +build.gradle .gradle /local.properties /.idea @@ -15,3 +16,4 @@ .cxx /app/release/ /app/release/app-release.apk +gradle/wrapper/gradle-wrapper.properties 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 1561875..7e0a086 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -11,6 +11,7 @@ import com.iutlaval.myapplication.Game.Decks.Deck; import com.iutlaval.myapplication.Game.Decks.DeckDemo; import com.iutlaval.myapplication.GameActivity; 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.Renderer; @@ -137,8 +138,17 @@ public class GameLogicThread extends Thread{ 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.setCoordinates(currentlySelected.getX(),currentlySelected.getY() + SELECTING_OFFSET); currentlySelected=null; } playableZonesHandler.hidePlayableZones(renderer); 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 90ddb3b..7214860 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/PlayableZonesHandler.java @@ -1,6 +1,7 @@ package com.iutlaval.myapplication.Game; import android.graphics.Color; +import android.util.Log; import com.iutlaval.myapplication.Game.Cards.Card; import com.iutlaval.myapplication.InvalidDataException; @@ -14,8 +15,6 @@ 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; @@ -51,6 +50,7 @@ public class PlayableZonesHandler { } + public void hidePlayableZones(Renderer renderer) { for(Drawable d : playableZones) @@ -59,4 +59,26 @@ public class PlayableZonesHandler { } playableZones.clear(); } + + /** + * retourne le numero de la zone survolé par le drawable si la zone est vite + * sinon retourne -1 + * @param card + * @return + */ + public int getHoveredZone(Drawable card) { + for(int i=0 ; i< board.MAX_CARD_ON_BOARD;i++) + { + int cardX =(DrawableCard.getCardWith()+1)*i+1; + //es que on survole sur l'axe x + if(cardX > card.getX() && card.getY() < 90F && card.getY() > 50F) + { + //on a trouvé l'emplacement de la carte + if(board.getPlayerCardsOnBoard()[i] == null)return i; + else break; + } + } + + return -1; + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/Drawable.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/Drawable.java index 4927271..5d8447b 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/Drawable.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/Drawable.java @@ -1,21 +1,10 @@ package com.iutlaval.myapplication.Video.Drawables; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; -import android.util.Log; - import androidx.annotation.NonNull; - -import com.iutlaval.myapplication.ERROR_CODE; import com.iutlaval.myapplication.GameActivity; -import com.iutlaval.myapplication.InvalidDataException; -import com.iutlaval.myapplication.Video.Rectangle; - -import java.util.ArrayList; -import java.util.List; public abstract class Drawable { 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 4824ecf..f4193fd 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 @@ -22,8 +22,7 @@ public class DrawableCard extends Drawable{ //ces données ne sont pas dans les digrames car sa renderais la lecture impossible 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; + private static final float HP_ATK_FONT_SIZE =60F; private static final float DESCRIPTION_FONT_SIZE =26F; private static final float TITLE_FONT_SIZE =30F; private static int DESCRIPTION_TEXT_X_RES = 281; @@ -36,9 +35,12 @@ public class DrawableCard extends Drawable{ //des floats sont utiliser car ils prenne moin de ram que des doubles et que l'on a pas besoin de la precision supplementaire //dimentions private static final float ONBOARD_RECTANGLE_ATK_HP_WIDTH = CARD_WITH * 0.5F; - private static final float ONBOARD_RECTANGLE_ATK_HP_HEIGHT = CARD_HEIGHT * 0.2F; - private static final float ONBOARD_ATK_HP_WIDTH = 0.4F * CARD_WITH; - private static final float ONBOARD_ATK_HP_HEIGHT = 0.125F * CARD_HEIGHT; + private static final float ONBOARD_RECTANGLE_ATK_HP_HEIGHT = CARD_HEIGHT * 0.175F; + private static final float ONBOARD_FRAME_X_SIZE = CARD_WITH; + private static final float ONBOARD_FRAME_Y_SIZE = CARD_HEIGHT*0.5F; + private static final float ONBOARD_ATK_HP_WIDTH = 0.45F * CARD_WITH; + private static final float ONBOARD_ATK_HP_HEIGHT = 0.170F * CARD_HEIGHT; + private static final float OFFBOARD_ATK_HP_WIDTH = 0.25F * CARD_WITH; private static final float OFFBOARD_ATK_HP_HEIGHT = 0.08F * CARD_HEIGHT; @@ -54,16 +56,14 @@ public class DrawableCard extends Drawable{ //variables de posisions private final float ONBOARD_PICTURE_X = 0.0714F * CARD_WITH; private final float ONBOARD_PICTURE_Y = 0.0625F * CARD_HEIGHT; - private final float ONBOARD_ATK_X = 0.05F * CARD_WITH; - private final float ONBOARD_ATK_HP_Y = 0.52F * CARD_HEIGHT; - private final float ONBOARD_HP_X = 0.55F * CARD_WITH; + private final float ONBOARD_TEXT_ATK_X = 0.05F * CARD_WITH; + private final float ONBOARD_TEXT_ATK_HP_Y = 0.48F * CARD_HEIGHT; + private final float ONBOARD_TEXT_HP_X = 0.55F * CARD_WITH; private final float ONBOARD_TITLE_X = 0.1F * CARD_WITH; - private final float ONBOARD_TITLE_Y = 0.05F * CARD_HEIGHT; + private final float ONBOARD_TITLE_Y = 0.00F * CARD_HEIGHT; - private static final float ONBOARD_FRAME_X_SIZE = CARD_WITH; - private static final float ONBOARD_FRAME_Y_SIZE = CARD_HEIGHT*0.5F; - private static final float ONBOARD_RECTANGLE_ATK_HP_Y = CARD_HEIGHT * 0.385F; - private static final float ONBOARD_RECTANGLE_ATK_X = CARD_HEIGHT * 0F; + private static final float ONBOARD_RECTANGLE_ATK_HP_Y = CARD_HEIGHT*0.375F; + private static final float ONBOARD_RECTANGLE_ATK_X = CARD_WITH * 0F; private static final float ONBOARD_RECTANGLE_HP_X = CARD_WITH * 0.5F; private static final float OFFBOARD_PICTURE_X = 0.0787F * CARD_WITH; @@ -180,9 +180,9 @@ public class DrawableCard extends Drawable{ Rectangle cardOnBoardFrame = new Rectangle(x,y,ONBOARD_FRAME_X_SIZE*ratio,ONBOARD_FRAME_Y_SIZE*ratio); cardOnBoardFrame.scaleRectangleToScreen(); - Rectangle cardOnBoardAtk = new Rectangle(x + ONBOARD_RECTANGLE_ATK_X*ratio, ONBOARD_RECTANGLE_ATK_HP_Y*ratio,ONBOARD_RECTANGLE_ATK_HP_WIDTH*ratio,ONBOARD_RECTANGLE_ATK_HP_HEIGHT*ratio); + Rectangle cardOnBoardAtk = new Rectangle(x + ONBOARD_RECTANGLE_ATK_X, ONBOARD_RECTANGLE_ATK_HP_Y*ratio,ONBOARD_RECTANGLE_ATK_HP_WIDTH*ratio,ONBOARD_RECTANGLE_ATK_HP_HEIGHT*ratio); cardOnBoardAtk.scaleRectangleToScreen(); - Rectangle cardOnBoardHp = new Rectangle(x + ONBOARD_RECTANGLE_HP_X*ratio, ONBOARD_RECTANGLE_ATK_HP_Y*ratio,ONBOARD_RECTANGLE_ATK_HP_WIDTH*ratio,ONBOARD_RECTANGLE_ATK_HP_HEIGHT*ratio); + Rectangle cardOnBoardHp = new Rectangle(x + ONBOARD_RECTANGLE_HP_X, ONBOARD_RECTANGLE_ATK_HP_Y*ratio,ONBOARD_RECTANGLE_ATK_HP_WIDTH*ratio,ONBOARD_RECTANGLE_ATK_HP_HEIGHT*ratio); cardOnBoardHp.scaleRectangleToScreen(); //creation de la bitmap qui va être rendu @@ -228,14 +228,14 @@ public class DrawableCard extends Drawable{ { if(onBoard) { if (atk != null) - cardAtkDrawable = new DrawableText(atk+"", 0, 0, toString() + "atk", ONBOARD_ATK_HP_WIDTH*ratio, ONBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE_BOARD,TEXT_ATK_HP_X_RES,TEXT_ATK_HP_Y_RES); + cardAtkDrawable = new DrawableText(atk+"", 0, 0, toString() + "atk", ONBOARD_ATK_HP_WIDTH*ratio, ONBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE,TEXT_ATK_HP_X_RES,TEXT_ATK_HP_Y_RES); if (hp != null) - cardHpDrawable = new DrawableText(hp+"", 0, 0, toString() + "hp", ONBOARD_ATK_HP_WIDTH*ratio, ONBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE_BOARD,TEXT_ATK_HP_X_RES,TEXT_ATK_HP_Y_RES); + cardHpDrawable = new DrawableText(hp+"", 0, 0, toString() + "hp", ONBOARD_ATK_HP_WIDTH*ratio, ONBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE,TEXT_ATK_HP_X_RES,TEXT_ATK_HP_Y_RES); }else{ if (atk != null) - cardAtkDrawable = new DrawableText(atk + "", 0, 0, toString() + "atk", OFFBOARD_ATK_HP_WIDTH*ratio, OFFBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE_OFFBOARD, TEXT_ATK_HP_X_RES, TEXT_ATK_HP_Y_RES); + cardAtkDrawable = new DrawableText(atk + "", 0, 0, toString() + "atk", OFFBOARD_ATK_HP_WIDTH*ratio, OFFBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE, TEXT_ATK_HP_X_RES, TEXT_ATK_HP_Y_RES); if (hp != null) - cardHpDrawable = new DrawableText(hp + "", 0, 0, toString() + "hp", OFFBOARD_ATK_HP_WIDTH*ratio, OFFBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE_OFFBOARD, TEXT_ATK_HP_X_RES, TEXT_ATK_HP_Y_RES); + cardHpDrawable = new DrawableText(hp + "", 0, 0, toString() + "hp", OFFBOARD_ATK_HP_WIDTH*ratio, OFFBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE, TEXT_ATK_HP_X_RES, TEXT_ATK_HP_Y_RES); } setCoordinates(getX(), getY()); } @@ -300,8 +300,8 @@ public class DrawableCard extends Drawable{ if (onBoard) { cardOnBoardDrawable.setCoordinates(x,y); pictureDrawable.setCoordinates(x + ONBOARD_PICTURE_X*ratio, y +ONBOARD_PICTURE_Y*ratio); - cardAtkDrawable.setCoordinates(x+ONBOARD_ATK_X*ratio,y + ONBOARD_ATK_HP_Y*ratio); - cardHpDrawable.setCoordinates(x+ONBOARD_HP_X*ratio,y + ONBOARD_ATK_HP_Y*ratio); + cardAtkDrawable.setCoordinates(x+ ONBOARD_TEXT_ATK_X *ratio,y + ONBOARD_TEXT_ATK_HP_Y *ratio); + cardHpDrawable.setCoordinates(x+ ONBOARD_TEXT_HP_X *ratio,y + ONBOARD_TEXT_ATK_HP_Y *ratio); cardTitle.setCoordinates(x+ONBOARD_TITLE_X*ratio,y - ONBOARD_TITLE_Y*ratio); }else{ frameDrawable.setCoordinates(x,y); @@ -344,4 +344,8 @@ public class DrawableCard extends Drawable{ public boolean isDraggable() { return draggable; } + + public void setDraggable(Boolean draggable) { + this.draggable = draggable; + } } 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 778ed4e..9e7b94a 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 @@ -20,11 +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); + rectangle.bitmapRectangleBuilderNoCoordinates(bitmap,color); setBitmap(bitmap); } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java index c641424..a1f5516 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java @@ -2,7 +2,6 @@ package com.iutlaval.myapplication.Video; import android.graphics.Bitmap; import android.graphics.Paint; -import android.util.Log; import com.iutlaval.myapplication.GameActivity; @@ -62,7 +61,6 @@ public class Rectangle { */ public void scaleRectangleToScreen() { - Log.e("resize",""+getWidth()*GameActivity.screenWidth/100); set(getPositionX()* GameActivity.screenWidth/100, getPositionY()*GameActivity.screenHeight/100, getWidth()*GameActivity.screenWidth/100, @@ -75,17 +73,30 @@ public class Rectangle { * @param bitmap la bitmap sur la quelle dessiner * @param color la couleur du carre */ - public void bitmapRectangleBuilder(Bitmap bitmap, int color) + private void brushInit(int color) { - RectangleCanevas c = new RectangleCanevas(bitmap); - if(p==null)p = new Paint(); - + if(p==null){ + p = new Paint(); + p.setStyle(Paint.Style.FILL_AND_STROKE); + } p.setColor(color); - p.setStyle(Paint.Style.FILL_AND_STROKE); - - c.drawRect(this,p); } + + public boolean isDrawable() { return getHeight() <= 0 || getWidth() <=0;} + + public void bitmapRectangleBuilderNoCoordinates(Bitmap bitmap, int color) { + brushInit(color); + RectangleCanevas c = new RectangleCanevas(bitmap); + c.drawRect(new Rectangle(0,0,width,height),p); + } + + public void bitmapRectangleBuilder(Bitmap bitmap,int color) + { + brushInit(color); + RectangleCanevas c = new RectangleCanevas(bitmap); + c.drawRect(this,p); + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java b/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java index 29b2738..a77e6e8 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java @@ -19,10 +19,10 @@ public class RectangleCanevas extends Canvas { * @param paint le pinceau a utiliser */ public void drawRect(@NonNull Rectangle r, @NonNull Paint paint) { - super.drawRect(0, - 0F, - r.getWidth(), - r.getHeight(), + super.drawRect(r.getPositionX(), + r.getPositionY(), + r.getWidth()+r.getPositionX(), + r.getHeight()+r.getPositionY(), paint); }