diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Board.java b/app/src/main/java/com/iutlaval/myapplication/Game/Board.java index b5cd4bc..bdf42be 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Board.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Board.java @@ -1,8 +1,8 @@ package com.iutlaval.myapplication.Game; import com.iutlaval.myapplication.Game.Cards.Card; -import com.iutlaval.myapplication.Game.Player.Player; -import com.iutlaval.myapplication.Game.Player.PlayerLocal; +import com.iutlaval.myapplication.Game.Players.Player; +import com.iutlaval.myapplication.Game.Players.PlayerLocal; import java.util.ArrayList; import java.util.List; diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java index 21133df..bacad2c 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java @@ -5,7 +5,7 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import com.iutlaval.myapplication.Game.Board; -import com.iutlaval.myapplication.Game.Player.Player; +import com.iutlaval.myapplication.Game.Players.Player; import com.iutlaval.myapplication.R; import com.iutlaval.myapplication.Video.Drawables.DrawableCard; @@ -13,12 +13,6 @@ public abstract class Card { private static Bitmap frameBitmap = null; private DrawableCard drawableCard = null; - - - public Card() - { - - } /** * cree une carte est lui definit un drawable * @param UID @@ -62,12 +56,11 @@ public abstract class Card { */ public Bitmap getFrameBitmap(Context c) { - //TODO add a frame if(frameBitmap == null) { - frameBitmap=BitmapFactory.decodeResource(c.getResources(), R.drawable.cadre_carte); + frameBitmap=BitmapFactory.decodeResource(c.getResources(), R.drawable.t_cc_defaut); } - if(getFrameTexture() == R.drawable.cadre_carte) + if(getFrameTexture() == R.drawable.t_cc_defaut) { return frameBitmap; }else{ @@ -85,7 +78,7 @@ public abstract class Card { */ public int getFrameTexture() { - return R.drawable.cadre_carte; + return R.drawable.t_cc_defaut; } @@ -144,5 +137,12 @@ public abstract class Card { public DrawableCard getDrawableCard() { return drawableCard; } + + /** + * cette fonction retourne le nom de la carte qui sera afficher + * @return le nom + */ + public abstract String getName(); + } diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java index 72c5c84..52535a4 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java @@ -7,11 +7,6 @@ import com.iutlaval.myapplication.R; public class DemoCard extends Card{ - public DemoCard() - { - super(); - } - /** * cree une carte est lui definit un drawable * @@ -22,9 +17,10 @@ public class DemoCard extends Card{ super(UID, c); } + @Override public int getCardPicture() { - return R.drawable.guerrier_nul; + return R.drawable.t_cp_elfe_fournisseur; } @@ -48,4 +44,9 @@ public class DemoCard extends Card{ public int getHealth() { return 10; } + + @Override + public String getName() { + return "DEMO"; + } } 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 a2d1d4e..eb384f2 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -1,14 +1,17 @@ package com.iutlaval.myapplication.Game; import android.content.Context; -import android.graphics.Color; +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.InvalidDataException; +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; -import com.iutlaval.myapplication.Video.Rectangle; import com.iutlaval.myapplication.Video.Renderer; public class GameLogicThread extends Thread{ @@ -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; @@ -32,30 +37,35 @@ public class GameLogicThread extends Thread{ @Override public void run() { - try { - renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE)); - //renderer.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F)); - //renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont)); - Card card2 = new DemoCard("card3",cont); - renderer.addToDraw(card2.getDrawableCard()); - Card card1 = new DemoCard("card1",cont); - renderer.addToDraw(card1.getDrawableCard()); - } catch (InvalidDataException e) { - //cette erreur est lance si un carre est invalid - System.err.println(e.getDetail()); - e.printStackTrace(); - } + //renderer.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background", Color.BLUE)); + Bitmap bitmap= BitmapFactory.decodeResource(cont.getResources(), R.drawable.t_b_board_background); + renderer.addToDraw(new Drawable(bitmap, 0,0, "background", 100, 100 )); + //renderer.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F)); + //renderer.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",cont)); + Card card2 = new DemoCard("card3",cont); + renderer.addToDraw(card2.getDrawableCard()); + Card card1 = new DemoCard("card1",cont); + renderer.addToDraw(card1.getDrawableCard()); + ready=true; while(true) { //Do Stuff - renderer.moveToDraw(20,1,"card1"); + renderer.moveToDraw(20,20,"card1"); + renderer.moveToDraw(40,20,"card3"); break; } } + /** + * cette fonction est appeller a chaque fin de frame + * CETTE FONCTION A UN IMPACT DIRRECT SUR LES FPS ELLE SE DOIT D'être OPTIMAL + * TOUT CALCUL REDONDANT CE DOIT D'AVOIR ETE PRE FAIT + * + * TOUT APELLE DE CETTE FONCTION SE DOIT D'ÊTRE PROTEGER PAR isReady() + */ public void onFrameDoneRendering() { if(i < 100) @@ -76,9 +86,20 @@ public class GameLogicThread extends Thread{ } + /** + * retourne vrai sir le moteur est pret a avoir sont evenemnt onFrameDoneRendering d'appeler + * @return + */ public boolean isReady() { 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/Player/PlayerBot.java b/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerBot.java deleted file mode 100644 index 6023375..0000000 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerBot.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.iutlaval.myapplication.Game.Player; - -public class PlayerBot extends Player{ -} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerLocal.java b/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerLocal.java deleted file mode 100644 index a6a66e7..0000000 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerLocal.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.iutlaval.myapplication.Game.Player; - -public class PlayerLocal extends Player{ -} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java b/app/src/main/java/com/iutlaval/myapplication/Game/Players/Player.java similarity index 92% rename from app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java rename to app/src/main/java/com/iutlaval/myapplication/Game/Players/Player.java index c0a33cb..cba4e28 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Players/Player.java @@ -1,11 +1,10 @@ -package com.iutlaval.myapplication.Game.Player; +package com.iutlaval.myapplication.Game.Players; import com.iutlaval.myapplication.Game.Cards.Card; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Random; public abstract class Player { private static final int MAX_HAND_SIZE = 10; diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerBot.java b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerBot.java new file mode 100644 index 0000000..d9d3fc9 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerBot.java @@ -0,0 +1,4 @@ +package com.iutlaval.myapplication.Game.Players; + +public class PlayerBot extends Player{ +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerLocal.java b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerLocal.java new file mode 100644 index 0000000..74cafe6 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerLocal.java @@ -0,0 +1,4 @@ +package com.iutlaval.myapplication.Game.Players; + +public class PlayerLocal extends Player{ +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerOnlineAdversary.java b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerOnlineAdversary.java similarity index 52% rename from app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerOnlineAdversary.java rename to app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerOnlineAdversary.java index 12e1dba..54f8e80 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerOnlineAdversary.java +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Players/PlayerOnlineAdversary.java @@ -1,4 +1,4 @@ -package com.iutlaval.myapplication.Game.Player; +package com.iutlaval.myapplication.Game.Players; public class PlayerOnlineAdversary extends Player{ } 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/Drawable.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/Drawable.java index 79a47cd..9f06fb6 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 @@ -71,11 +71,9 @@ public class Drawable { * @param x_size taille du drawable entre 0 et 100 * @param y_size taille du drawable entre 0 et 100 */ - public Drawable(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize) + public Drawable(String text,float x_pos,float y_pos,String name, float x_size,float y_size,float textSize , int x_canvasRatio, int y_canvasRatio) { this(x_pos,y_pos,name); - int x_scaled_size = (int)x_size* GameActivity.screenWidth/100; - int y_scaled_size = (int)y_size* GameActivity.screenHeight/100; checkPaint(); p.setColor(Color.BLACK); @@ -86,29 +84,32 @@ public class Drawable { p.setTextSize(textSize); //+10 permet d'e prendre en compte les p,q,j qui dessende plus bas que les autres - bitmap = Bitmap.createBitmap(x_scaled_size, y_scaled_size+10, Bitmap.Config.ARGB_8888); + bitmap = Bitmap.createBitmap(x_canvasRatio, y_canvasRatio, Bitmap.Config.ARGB_8888); Canvas c = new Canvas(bitmap); int index = 1; for(String line : linesOfText) { - c.drawText(line ,0,index*y_scaled_size/linesOfText.size(),p); + c.drawText(line ,0,index*y_canvasRatio/linesOfText.size(),p); index++; } + int scalled_x_size = (int)(GameActivity.screenWidth*x_size/100); + int scalled_y_size = (int)(GameActivity.screenHeight*y_size/100); + + bitmap = Bitmap.createScaledBitmap(bitmap,scalled_x_size,scalled_y_size,GameActivity.bilinearFiltering); } /** * ce constructeur n'est pas rapide essayer de l'utiliser le moin possible - * TODO : optimize it and remove the deprecated flag + * TODO : optimize it * * ce constructeur dessine un rectangle avec la texture donner en argument * @param rectangle recange cooresspondant a la surface a dessiner * @param name nom du drawable agit comme un identifiant mais doit être unique * @param color couleur du rectangle */ - @Deprecated public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException { this(rectangle.getPositionX(),rectangle.getPositionY(),name); if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle); @@ -204,11 +205,6 @@ public class Drawable { p = new Paint(); } - /** - * cette fonction est appeler quand le drawable est retirer de la liste toDraw - */ - public void onDeletion(Renderer r){} - /** * coupe le texte a une certaine longeur * @param charPerLines nombre de caractére par lignes 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 8421f33..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 @@ -17,18 +17,20 @@ public class DrawableCard extends Drawable{ private static final int CARD_WITH = 14; private static final int CARD_HEIGHT = 32; - private static final float HP_ATK_FONT_SIZE_BIG_CARD =50F; - private static final float HP_ATK_FONT_SIZE_BOARD =80F; + private static final float HP_ATK_FONT_SIZE_BIG_CARD =30F; + private static final float HP_ATK_FONT_SIZE_BOARD =70F; + private static final float DESCRIPTION_FONT_SIZE =30F; + private static final float TITLE_FONT_SIZE =30F; - private String color; + private Boolean onBoard; private Drawable OpacityRectangleDrawable; private Drawable PictureDrawable; - private Boolean onBoard; - private Drawable cardOnBardDrawable; + private Drawable cardOnBoardDrawable; + private Drawable cardDescription; - + private Drawable cardTitle; private Drawable cardHpDrawable; private Drawable cardAtkDrawable; @@ -39,8 +41,10 @@ public class DrawableCard extends Drawable{ /** * ce constructeur permet de crée un drawable simplifier pour les carte qui integre : * _le supoort de la description + * _le support du titre * _le changement d'etat entre grand et terrain * _les point de vie + * _les point attaque * _l'image * _les deplacement du tout * @@ -51,6 +55,8 @@ public class DrawableCard extends Drawable{ * @param name nom du drawable * @param context le contexte est simplement l'instance de GameActivity qui est utiliser pas le moteur de jeu * @throws InvalidDataException + * toutes les coodonés sont a zero pour faciliter la maintenance car la fonction setCoordinates() est appler pour corriger toutes les coordonées + * donc les coodonées ne se trouve que dans cette fonction */ public DrawableCard(Card c, float x, float y, String name, Context context){ super(c.getFrameBitmap(context),x,y,name,CARD_WITH,CARD_HEIGHT); @@ -59,16 +65,15 @@ public class DrawableCard extends Drawable{ onBoard=true; - cardDescription = new Drawable(c.getDescription(),x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F,toString()+"description",CARD_WITH*0.8F,CARD_HEIGHT*0.35F,30F); - updateHpAndAtk(c.getAttack(),c.getHealth()); + cardDescription = new DrawableCardDescription(c.getDescription(),x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F,toString()+"description",CARD_WITH*0.9F,CARD_HEIGHT*0.35F,DESCRIPTION_FONT_SIZE); + cardTitle = new DrawableCardTitle(c.getName(),0,0,toString()+"name",CARD_WITH,CARD_HEIGHT*0.1F,TITLE_FONT_SIZE); - color = c.getColor();//CARD_WITH+x - Rectangle cardRect = new Rectangle(x,y,(float)(CARD_WITH+x),(float)(CARD_HEIGHT+x)); + Rectangle cardRect = new Rectangle(x,y,CARD_WITH+x,CARD_HEIGHT+x); Bitmap pictureBitmap = BitmapFactory.decodeResource(context.getResources(),c.getCardPicture()); try { OpacityRectangleDrawable = new Drawable(cardRect,toString()+"Opacity", Color.parseColor(c.getColor())); - PictureDrawable = new Drawable(pictureBitmap,getX()+1.1F,getY()+2.5F,toString()+"Picture",CARD_WITH-2.4F,CARD_HEIGHT/2 - 4); + PictureDrawable = new Drawable(pictureBitmap,0,0,toString()+"Picture",CARD_WITH/1.2F,CARD_HEIGHT/2.7F); } catch (InvalidDataException e) { e.printStackTrace(); Log.e("CARTE :","forme de la carte invalide !"); @@ -83,7 +88,7 @@ public class DrawableCard extends Drawable{ Rectangle cardOnBoardFrame = new Rectangle(x,y,CARD_WITH,CARD_HEIGHT/2); cardOnBoardFrame.scaleRectangleToScreen(); - int offset = CARD_HEIGHT/2 - CARD_HEIGHT/8; + float offset = CARD_HEIGHT/2.7F; Rectangle cardOnBoardAtk = new Rectangle(x,offset,CARD_WITH/2,CARD_HEIGHT/8); cardOnBoardAtk.scaleRectangleToScreen(); Rectangle cardOnBoardHp = new Rectangle(CARD_WITH/2,offset,CARD_WITH/2,CARD_HEIGHT/8); @@ -97,14 +102,20 @@ public class DrawableCard extends Drawable{ cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000")); cardOnBoardHp.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FF00FF00")); - cardOnBardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3); + cardOnBoardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3); c.setDrawableCard(this); + + updateHpAndAtk(c.getAttack(),c.getHealth()); + setCoordinates(getX(), getY()); } /** * cette fonction permet de mettre a jour le nombre de hp restant * si vous ne voulez pas changer une des donnes metter la null ce n'est pas des int mais des Integer donc c'est possible + * + * toutes les coodonés sont a zero pour faciliter la maintenance car la fonction setCoordinates() est appler pour corriger toutes les coordonées + * donc les coodonées ne se trouve que dans cette fonction * @param atk l'attaque de la carte * @param hp les point de vie de la carte */ @@ -112,15 +123,16 @@ public class DrawableCard extends Drawable{ { if(onBoard) { if (atk != null) - cardAtkDrawable = new Drawable(atk + " ", getX() + 0.6F, getY() + CARD_HEIGHT/2, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD); + cardAtkDrawable = new DrawableHpAtk(atk+"", 0, 0, toString() + "atk", CARD_WITH * 0.4F, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD); if (hp != null) - cardHpDrawable = new Drawable(hp + " ", getX() + 2.4F + CARD_WITH / 2, getY() + CARD_HEIGHT/2, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD); + cardHpDrawable = new DrawableHpAtk(hp+"", 0, 0, toString() + "hp", CARD_WITH * 0.4F, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BOARD); }else{ if (atk != null) - cardAtkDrawable = new Drawable(atk + " ", getX() + 1F, getY() +CARD_HEIGHT-6F, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BIG_CARD); + cardAtkDrawable = new DrawableHpAtk(atk + "", 0, 0, toString() + "atk", CARD_WITH / 2, CARD_HEIGHT / 4, HP_ATK_FONT_SIZE_BIG_CARD); if (hp != null) - cardHpDrawable = new Drawable(hp + " ", getX() + 2.8F + CARD_WITH / 2, getY() + CARD_HEIGHT - 6F, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 8, HP_ATK_FONT_SIZE_BIG_CARD); + cardHpDrawable = new DrawableHpAtk(hp + "", 0, 0, toString() + "hp", CARD_WITH / 2, CARD_HEIGHT / 4, HP_ATK_FONT_SIZE_BIG_CARD); } + setCoordinates(getX(), getY()); } /** @@ -138,15 +150,20 @@ public class DrawableCard extends Drawable{ return String.valueOf(colorArray); } + /** + * cette fonction permet de dessiner tout les elements de la carte + * @param c canevas sur le quel dessiner + * @param p pinceau + */ @Override public void drawOn(Canvas c, Paint p) { //draw the frame if(onBoard) { - cardOnBardDrawable.drawOn(c,p); + cardOnBoardDrawable.drawOn(c,p); PictureDrawable.drawOn(c,p); - + cardTitle.drawOn(c,p); cardHpDrawable.drawOn(c,p); cardAtkDrawable.drawOn(c,p); }else{ @@ -155,6 +172,7 @@ public class DrawableCard extends Drawable{ PictureDrawable.drawOn(c,p); //dessine le texte + cardTitle.drawOn(c,p); cardDescription.drawOn(c,p); cardHpDrawable.drawOn(c,p); cardAtkDrawable.drawOn(c,p); @@ -162,20 +180,30 @@ public class DrawableCard extends Drawable{ } + /** + * cette fonction permet de deplacer la carte et tout ces sous element + * tout les valeur on ete determiner empiriquement + * @param x postion x + * @param y postion y + */ @Override public void setCoordinates(float x, float y) { + super.setCoordinates(x, y); if (onBoard) { - cardOnBardDrawable.setCoordinates(x,y); - PictureDrawable.setCoordinates(x +1, y +2); - cardAtkDrawable.setCoordinates(x+1F,y + CARD_HEIGHT/2 ); - cardHpDrawable.setCoordinates(x+1F+CARD_WITH/2,y + CARD_HEIGHT/2 ); + cardOnBoardDrawable.setCoordinates(x,y); + PictureDrawable.setCoordinates(x + CARD_WITH/14F, y +CARD_HEIGHT/16F); + cardAtkDrawable.setCoordinates(x+CARD_WITH*0.05F,y + CARD_HEIGHT*0.48F ); + cardHpDrawable.setCoordinates(x+CARD_WITH*0.55F,y + CARD_HEIGHT*0.48F ); + cardTitle.setCoordinates(x+CARD_WITH*0.1F,y - CARD_WITH * 0.1F); }else{ - super.setCoordinates(x, y); OpacityRectangleDrawable.setCoordinates(x, y); - PictureDrawable.setCoordinates(x + 1.1F, y + 2.5F); + PictureDrawable.setCoordinates(x + CARD_WITH/12.7F, y + CARD_HEIGHT/12.0F); + + //les textes ce dessines depuis leur base et non depuis le coin haut gauche cardDescription.setCoordinates(x+CARD_WITH*0.07F,y+CARD_HEIGHT/2.2F); - cardAtkDrawable.setCoordinates(x + 1F,y+CARD_HEIGHT-6F); - cardHpDrawable.setCoordinates(x+ 3F+CARD_WITH/2,y+CARD_HEIGHT-6F); + cardAtkDrawable.setCoordinates(x + CARD_WITH*0.08F,y +CARD_HEIGHT*0.70F); + cardHpDrawable.setCoordinates(x + CARD_WITH*0.7F,y +CARD_HEIGHT*0.70F); + cardTitle.setCoordinates(x+CARD_WITH*0.1F,y - CARD_WITH * 0.055F); } } @@ -190,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/Drawables/DrawableCardDescription.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardDescription.java index 42fabcb..03f6aac 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardDescription.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardDescription.java @@ -1,50 +1,11 @@ package com.iutlaval.myapplication.Video.Drawables; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Color; - -import androidx.annotation.MainThread; - -import com.iutlaval.myapplication.GameActivity; - -import java.util.List; - public class DrawableCardDescription extends Drawable { private static int TEXT_X_RES = 281; private static int TEXT_Y_RES = 195; - private Bitmap bitmap; - public DrawableCardDescription(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) { - super(x_pos,y_pos,name); - int x_scaled_size = (int)x_size* GameActivity.screenWidth/100; - int y_scaled_size = (int)y_size* GameActivity.screenHeight/100; - - checkPaint(); - super.p.setColor(Color.BLACK); - - - - List linesOfText = cutText(20,text); - p.setTextSize(textSize); - - //+10 permet d'e prendre en compte les p,q,j qui dessende plus bas que les autres - Bitmap bitmap = Bitmap.createBitmap(TEXT_X_RES, TEXT_Y_RES, Bitmap.Config.ARGB_8888); - Canvas c = new Canvas(bitmap); - - int index = 1; - for(String line : linesOfText) - { - c.drawText(line ,0,index*y_scaled_size/linesOfText.size(),p); - index++; - } - - this.bitmap = Bitmap.createScaledBitmap(bitmap,x_scaled_size,y_scaled_size, GameActivity.bilinearFiltering); + super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES); } - @Override - public Bitmap getBitmap() { - return bitmap; - } } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardTitle.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardTitle.java new file mode 100644 index 0000000..e3869f8 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableCardTitle.java @@ -0,0 +1,10 @@ +package com.iutlaval.myapplication.Video.Drawables; + +public class DrawableCardTitle extends Drawable{ + private static int TEXT_X_RES = 281; + private static int TEXT_Y_RES = 60; + + public DrawableCardTitle(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) { + super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES); + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableHpAtk.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableHpAtk.java new file mode 100644 index 0000000..d9c7e4b --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawables/DrawableHpAtk.java @@ -0,0 +1,12 @@ +package com.iutlaval.myapplication.Video.Drawables; + + +public class DrawableHpAtk extends Drawable { + private static int TEXT_X_RES = 110; + private static int TEXT_Y_RES = 60; + + public DrawableHpAtk(String text, float x_pos, float y_pos, String name, float x_size, float y_size, float textSize) { + super(text,x_pos,y_pos,name,x_size,y_size,textSize,TEXT_X_RES,TEXT_Y_RES); + } + +} 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 f3c1a7d..f75a2ff 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java @@ -13,6 +13,11 @@ public class RectangleCanevas extends Canvas { super(bitmap); } + /** + * dessine un rectangle sur le canevas + * @param r le rectangle a dessiner + * @param paint le pinceau a utiliser + */ public void drawRect(@NonNull Rectangle r, @NonNull Paint paint) { super.drawRect(r.getPositionX(), r.getPositionY(), @@ -21,5 +26,5 @@ public class RectangleCanevas extends Canvas { paint); } - + } 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 a0ce375..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; @@ -182,7 +183,6 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { * @param toRemove the element toRemove */ public void removeToDraw(Drawable toRemove){ - toRemove.onDeletion(this); toDraw.remove(toRemove); } @@ -208,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; + } } diff --git a/app/src/main/res/drawable/batiut.jpg b/app/src/main/res/drawable/t_b_batiut.jpg similarity index 100% rename from app/src/main/res/drawable/batiut.jpg rename to app/src/main/res/drawable/t_b_batiut.jpg diff --git a/app/src/main/res/drawable/t_b_board_background.jpg b/app/src/main/res/drawable/t_b_board_background.jpg new file mode 100644 index 0000000..66f34ca Binary files /dev/null and b/app/src/main/res/drawable/t_b_board_background.jpg differ diff --git a/app/src/main/res/drawable/cadre_carte.png b/app/src/main/res/drawable/t_cc_defaut.png similarity index 100% rename from app/src/main/res/drawable/cadre_carte.png rename to app/src/main/res/drawable/t_cc_defaut.png diff --git a/app/src/main/res/drawable/compagnon des elfes.jpg b/app/src/main/res/drawable/t_cp_compagnon_des_elfes.jpg similarity index 100% rename from app/src/main/res/drawable/compagnon des elfes.jpg rename to app/src/main/res/drawable/t_cp_compagnon_des_elfes.jpg diff --git a/app/src/main/res/drawable/elfe_fournisseur.jpg b/app/src/main/res/drawable/t_cp_elfe_fournisseur.jpg similarity index 100% rename from app/src/main/res/drawable/elfe_fournisseur.jpg rename to app/src/main/res/drawable/t_cp_elfe_fournisseur.jpg diff --git a/app/src/main/res/drawable/elfe nul.png b/app/src/main/res/drawable/t_cp_elfe_nul.png similarity index 100% rename from app/src/main/res/drawable/elfe nul.png rename to app/src/main/res/drawable/t_cp_elfe_nul.png diff --git a/app/src/main/res/drawable/debug_card.png b/app/src/main/res/drawable/t_debug.png similarity index 100% rename from app/src/main/res/drawable/debug_card.png rename to app/src/main/res/drawable/t_debug.png diff --git a/app/src/main/res/layout-land/activity_main.xml b/app/src/main/res/layout-land/activity_main.xml index 5a733f1..8d11a09 100644 --- a/app/src/main/res/layout-land/activity_main.xml +++ b/app/src/main/res/layout-land/activity_main.xml @@ -17,7 +17,8 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:srcCompat="@drawable/batiut" /> + app:layout_constraintVertical_bias="0.0" + app:srcCompat="@drawable/t_b_batiut" /> + app:srcCompat="@drawable/t_b_batiut" />