From 47be04c4500657482bf72c743b8535790fdb4e54 Mon Sep 17 00:00:00 2001 From: marc barbier Date: Mon, 4 Jan 2021 12:14:45 +0100 Subject: [PATCH] patch text + cout mana --- .../myapplication/Game/GameLogicThread.java | 10 +- .../Video/Drawables/DrawableCard.java | 27 +++-- .../Video/Drawables/DrawableText.java | 96 +++++++++++++++--- app/src/main/res/drawable/t_cc_defaut.jpg | Bin 16258 -> 24546 bytes 4 files changed, 110 insertions(+), 23 deletions(-) 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 f9accc6..60892f0 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; import android.widget.Toast; @@ -96,8 +97,8 @@ public class GameLogicThread extends Thread{ //Rectangle pos = new Rectangle(0F,0F,100F,100F); ready=true; - final String host = "2.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io: - final int port = 13450; + final String host = "4.tcp.ngrok.io";//192.168.43.251tcp://2.tcp.ngrok.io: + final int port = 16784; try { Socket client = new Socket(host, port); @@ -183,9 +184,9 @@ public class GameLogicThread extends Thread{ break; case Command.SETMANA: - renderer.removeToDraw("mana"); + renderer.removeToDrawWithoutUpdate("mana"); mana = coms.recieveInt(); - renderer.addToDraw(new DrawableText("Mana : "+mana,90F,90F,"mana",10F,10F,100,800,200)); + renderer.addToDraw(new DrawableText("Mana : "+mana,85F,60F,"mana",100,12, Color.WHITE)); break; case Command.ENEMYTURN: @@ -263,6 +264,7 @@ public class GameLogicThread extends Thread{ //detruit la carte sur le terrain du joueur int zoneOfTheDestroyedCard = coms.recieveInt(); Card cardToDestroy = board.removeCardOnPlayerBoard(zoneOfTheDestroyedCard); + Log.e("destroying",""+cardToDestroy); renderer.removeToDraw(cardToDestroy); break; 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 4f23a11..7ced5d8 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 @@ -97,6 +97,7 @@ public class DrawableCard extends Drawable{ private Drawable cardTitle; private Drawable cardHpDrawable; private Drawable cardAtkDrawable; + private Drawable cardCostDrawable; //DEPENDANCE CIRCULAIRE NE PAS CHANGER DE GC NON Tracing //https://www.baeldung.com/java-gc-cyclic-references @@ -157,8 +158,19 @@ public class DrawableCard extends Drawable{ frameDrawable = new DrawableBitmap(c.getFrameBitmap(context),0,0,name+"frame",CARD_WITH*ratio,CARD_HEIGHT*ratio); //to string retourne le hash code de l'objet qui est donc unique ce qui fait de lui un id parfait if(c.getDescription() != null) - cardDescription = new DrawableText(c.getDescription(),0,0,toString()+"description",DESCRIPTION_WIDTH*ratio,DESCRIPTION_HEIGHT*ratio,DESCRIPTION_FONT_SIZE,DESCRIPTION_TEXT_X_RES,DESCRIPTION_TEXT_Y_RES); - cardTitle = new DrawableText(c.getName(),0,0,toString()+"name",TITLE_WIDTH*ratio,TITLE_HEIGHT*ratio,TITLE_FONT_SIZE,TEXT_TITLE_X_RES,TEXT_TITLE_Y_RES); + cardDescription = new DrawableText(c.getDescription(),0,0,toString()+"description",DESCRIPTION_WIDTH*ratio,DESCRIPTION_HEIGHT*ratio,DESCRIPTION_FONT_SIZE,DESCRIPTION_TEXT_X_RES,DESCRIPTION_TEXT_Y_RES,Color.BLACK); + + if(c.getName().length() < 16) + { + //cardTitle = new DrawableText(c.getName(),0,0,toString()+"name",TITLE_WIDTH*ratio,TITLE_HEIGHT*ratio,TITLE_FONT_SIZE,TEXT_TITLE_X_RES,TEXT_TITLE_Y_RES,Color.BLACK,16); + cardTitle = new DrawableText(c.getName(),0,0,toString()+"name",TITLE_FONT_SIZE,TITLE_WIDTH,Color.BLACK,16); + }else{ + cardTitle = new DrawableText(c.getName(),0,0,toString()+"name",TITLE_WIDTH*ratio,TITLE_HEIGHT*ratio,TITLE_FONT_SIZE*0.75F,TEXT_TITLE_X_RES,TEXT_TITLE_Y_RES,Color.BLACK,30); + //cardTitle = new DrawableText(c.getName(),0,0,toString()+"name",TITLE_FONT_SIZE,TITLE_WIDTH,Color.BLACK,40); + } + + cardCostDrawable = new DrawableText(c.getCost() + "", 0, 0, toString() + "cost", OFFBOARD_ATK_HP_WIDTH*ratio, OFFBOARD_ATK_HP_HEIGHT*ratio, HP_ATK_FONT_SIZE, TEXT_ATK_HP_X_RES, TEXT_ATK_HP_Y_RES,Color.BLACK); + Rectangle opacityRect = new Rectangle(x,y,OPACITY_RECT_WIDTH*ratio+x,OPACITY_RECT_HEIGHT*ratio+x); Bitmap pictureBitmap = BitmapFactory.decodeResource(context.getResources(),c.getCardPicture()); @@ -226,14 +238,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,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,Color.BLACK); 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,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,Color.BLACK); }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, 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,Color.BLACK); 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, 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,Color.BLACK); } setCoordinates(getX(), getY()); } @@ -282,6 +294,7 @@ public class DrawableCard extends Drawable{ if(cardDescription != null)cardDescription.drawOn(c,p); cardHpDrawable.drawOn(c,p); cardAtkDrawable.drawOn(c,p); + cardCostDrawable.drawOn(c,p); } } @@ -311,6 +324,8 @@ public class DrawableCard extends Drawable{ cardAtkDrawable.setCoordinates(x + OFFBOARD_ATK_X*ratio,y + OFFBOARD_ATK_HP_Y*ratio); cardHpDrawable.setCoordinates(x + OFFBOARD_HP_X*ratio,y +OFFBOARD_ATK_HP_Y*ratio); cardTitle.setCoordinates(x+OFFBOARD_TITLE_X*ratio,y - OFFBOARD_TITLE_Y*ratio); + cardCostDrawable.setCoordinates(x+CARD_WITH/2*ratio,y + OFFBOARD_ATK_HP_Y *ratio); + } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableText.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableText.java index 9f94c6c..af65dd2 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableText.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableText.java @@ -3,6 +3,7 @@ package com.iutlaval.myapplication.Video.Drawables; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; +import android.text.TextPaint; import android.util.Log; import com.iutlaval.myapplication.GameActivity; @@ -15,6 +16,58 @@ import java.util.List; * tout modification de ce code doit passer par marc car seul moi sait a quel point il est complex */ public class DrawableText extends Drawable{ + + + public DrawableText(String text,float x_pos,float y_pos,String name,float textSize , float x_size,int color) + { + this(text,x_pos,y_pos,name,textSize,x_size,color,20); + } + + /** + * ce constructeur permet de créer un text un une ligne avec moin d'argument + * @param text + * @param x_pos + * @param y_pos + * @param name + * @param textSize + */ + public DrawableText(String text,float x_pos,float y_pos,String name,float textSize , float x_size,int color,int nbcharPerlines) + { + super(x_pos,y_pos,name); + + + TextPaint p = new TextPaint(); + p.setAntiAlias(true); + p.setTextSize(textSize); + p.setColor(color); + + int canvas_width = (int) p.measureText(text); + int canvas_height = (int) textSize; + + + Bitmap bitmap = Bitmap.createBitmap(canvas_width, canvas_height, Bitmap.Config.ARGB_8888); + setBitmap(bitmap); + Canvas c = new Canvas(bitmap); + + //si on a une description + int index = 1; + List linesOfText = cutText(nbcharPerlines,text); + for(String line : linesOfText) + { + //y_canvasRatio/linesOfText.size() + c.drawText(line ,0,index*textSize,p); + index++; + } + + int scalled_x_size = (int) (GameActivity.screenWidth*x_size/100); + + int y_size = (int) (x_size/(canvas_width * 1.0) * 200 * linesOfText.size()); + + int scalled_y_size = GameActivity.screenHeight*y_size/100; + + setBitmap(Bitmap.createScaledBitmap(bitmap,scalled_x_size,scalled_y_size,GameActivity.bilinearFiltering)); + } + /** * ce constructeur permet de rendre du texte * @param text le texte a rendre @@ -26,12 +79,28 @@ public class DrawableText extends Drawable{ * @param y_canvasRatio taille du canevas en pixel sur le quel le texte va être dessiné /!\ doit être proportionnel a la police * @param x_canvasRatio voire y_canvasRatio */ - public DrawableText(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize , int x_canvasRatio, int y_canvasRatio) + public DrawableText(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize , int x_canvasRatio, int y_canvasRatio,int color) + { + this(text,x_pos,y_pos,name,x_size,y_size,textSize,x_canvasRatio,y_canvasRatio,color,20); + } + + /** + * ce constructeur permet de rendre du texte + * @param text le texte a rendre + * @param x_pos position en x du texte + * @param y_pos position en y du texte + * @param name nom du Drawable + * @param x_size taille du drawable entre 0 et 100 + * @param y_size taille du drawable entre 0 et 100 + * @param y_canvasRatio taille du canevas en pixel sur le quel le texte va être dessiné /!\ doit être proportionnel a la police + * @param x_canvasRatio voire y_canvasRatio + */ + public DrawableText(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize , int x_canvasRatio, int y_canvasRatio,int color,int nbcharPerlines) { super(x_pos,y_pos,name); checkPaint(); - p.setColor(Color.BLACK); + p.setColor(color); p.setAntiAlias(true); p.setTextSize(textSize); @@ -40,16 +109,13 @@ public class DrawableText extends Drawable{ Canvas c = new Canvas(bitmap); //si on a une description - if(text != null) + int index = 1; + List linesOfText = cutText(nbcharPerlines,text); + for(String line : linesOfText) { - int index = 1; - List linesOfText = cutText(20,text); - for(String line : linesOfText) - { - //y_canvasRatio/linesOfText.size() - c.drawText(line ,0,index*textSize,p); - index++; - } + //y_canvasRatio/linesOfText.size() + c.drawText(line ,0,index*textSize,p); + index++; } @@ -65,7 +131,7 @@ public class DrawableText extends Drawable{ * @param text texte a afficher * @return liste de lignes de texte */ - private List cutText(int charPerLines,String text) + private static List cutText(int charPerLines,String text) { List output = new ArrayList<>(); @@ -81,9 +147,13 @@ public class DrawableText extends Drawable{ //fillWithSpace(nextLine,charPerLines); output.add(nextLine.toString()); nextLine.delete(0,charPerLines-1); + nextLine.append(" " + word); } }else{ - Log.e("TextRender","ERROR WORD TOO LONG :" + word); + + if(!nextLine.toString().isEmpty())output.add(nextLine.toString()); + nextLine.delete(0,charPerLines-1); + output.add(word); } } if(!nextLine.toString().equals("")) diff --git a/app/src/main/res/drawable/t_cc_defaut.jpg b/app/src/main/res/drawable/t_cc_defaut.jpg index 7465e55a922ec914392e9ee826313336224ff06c..570faa5a54e9aae2af8a0426101aee7215a5a9ef 100644 GIT binary patch literal 24546 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 NKmPCZeo^xI{{ehMu2%p6