diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java index 9a9d631..8392f31 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java @@ -15,6 +15,7 @@ public class Drawable { private float x,y; private String name; private Bitmap bitmap; + private static Paint p; /** * cree un drawable a partir de coordonné est d'un nom @@ -83,25 +84,33 @@ public class Drawable { */ @Deprecated public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException { + this(null,rectangle.getPositionX(),rectangle.getPositionY(),name); if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle); rectangle.scaleRectangleToScreen(); - Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888); - - //on crée un canevas pour interagir avec la bitmap - RectangleCanevas c = new RectangleCanevas(bitmap); - Paint p = new Paint(); - - p.setColor(color); - p.setStyle(Paint.Style.FILL_AND_STROKE); - - c.drawRect(rectangle,p); + rectangle.bitmapRectangleBuilder(bitmap,color,p); this.bitmap=bitmap; - this.name=name; - this.x=rectangle.getPositionX(); - this.y=rectangle.getPositionY(); + } + + /** + * ce constructeur n'est pas rapide essayer de l'utiliser le moin possible + * TODO : optimize it and remove the deprecated flag + *TODO update javadoc + * + * this contructor create a Drawable object from a rectangle and a color + * @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(Bitmap bitmap,Rectangle rectangle, String name, int color) throws InvalidDataException { + this(bitmap,rectangle.getPositionX(),rectangle.getPositionY(),name); + if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0 || bitmap == null)throw new InvalidDataException(name,rectangle); + + rectangle.scaleRectangleToScreen(); + rectangle.bitmapRectangleBuilder(bitmap,color,p); } public void drawOn(Canvas c, Paint p) diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java index 3142f59..9cd1dbc 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java @@ -20,6 +20,9 @@ public class DrawableCard extends Drawable{ private Drawable OpacityRectangleDrawable; private Drawable PictureDrawable; + private Boolean onBoard; + + private Drawable cardOnBardDrawable; public DrawableCard(Card c, float x, float y, String name, Context context) throws InvalidDataException { super(c.getFrameBitmap(context),x,y,name,CARD_WITH,CARD_HEIGHT); @@ -30,20 +33,74 @@ public class DrawableCard extends Drawable{ Bitmap pictureBitmap = BitmapFactory.decodeResource(context.getResources(),c.getCardPicture()); PictureDrawable = new Drawable(pictureBitmap,getX()+1.1F,getY()+2.5F,toString()+"Picture",CARD_WITH-2.4F,CARD_HEIGHT/2 - 4); + + + Paint p = new Paint(); + + + //crée les rectangle pour la carte quand elle est sur le terrain + Rectangle cardOnBoardFrame = new Rectangle(x,y,CARD_WITH,CARD_HEIGHT/2); + cardOnBoardFrame.scaleRectangleToScreen(); + + int offset = CARD_HEIGHT/2 - CARD_HEIGHT/8; + Rectangle cardOnBoardHp = new Rectangle(x,offset,CARD_WITH/2,CARD_HEIGHT/8); + cardOnBoardHp.scaleRectangleToScreen(); + Rectangle cardOnBoardAtk = new Rectangle(CARD_WITH/2,offset,CARD_WITH/2,CARD_HEIGHT/8); + cardOnBoardAtk.scaleRectangleToScreen(); + + //creation de la bitmap qui va être rendu + Bitmap cardOnBoardBitmap= Bitmap.createBitmap((int)cardOnBoardFrame.getWidth(),(int)cardOnBoardFrame.getHeight(), Bitmap.Config.ARGB_8888); + + //on dessine nos rectangle sur la bitmap + cardOnBoardFrame.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor(removeAlpha(c.getColor())),p); + cardOnBoardHp.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FF00FF00"),p); + cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000"),p); + + cardOnBardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3); + + onBoard=true; + } + + private String removeAlpha(String color) { + char[] colorArray = color.toCharArray();; + colorArray[1]='F'; + colorArray[2]='F'; + System.out.println(String.valueOf(colorArray)); + return String.valueOf(colorArray); } @Override public void drawOn(Canvas c, Paint p) { //draw the frame - super.drawOn(c, p); - OpacityRectangleDrawable.drawOn(c,p); - PictureDrawable.drawOn(c,p); + if(onBoard) + { + cardOnBardDrawable.drawOn(c,p); + PictureDrawable.drawOn(c,p); + + }else{ + super.drawOn(c, p); + OpacityRectangleDrawable.drawOn(c,p); + PictureDrawable.drawOn(c,p); + } + } @Override public void setCoordinates(float x, float y) { - super.setCoordinates(x, y); - OpacityRectangleDrawable.setCoordinates(x,y); - PictureDrawable.setCoordinates(x+1.1F,y+2.5F); + if (onBoard) { + cardOnBardDrawable.setCoordinates(x,y); + PictureDrawable.setCoordinates(x +1, y +2); + }else{ + super.setCoordinates(x, y); + OpacityRectangleDrawable.setCoordinates(x, y); + PictureDrawable.setCoordinates(x + 1.1F, y + 2.5F); + } + } + + public void setOnBoard(Boolean onBoard) + { + this.onBoard = onBoard; + //force recalculate coodinates + setCoordinates(getX(), getY()); } } 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 e4921d5..cf30d09 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java @@ -1,5 +1,8 @@ package com.iutlaval.myapplication.Video; +import android.graphics.Bitmap; +import android.graphics.Paint; + import com.iutlaval.myapplication.GameActivity; public class Rectangle { @@ -42,4 +45,21 @@ public class Rectangle { getHeight()*GameActivity.screenHeight/100 ); } + + /** + * retourne la bitmap entre mais avec un rectangle dessiner dedans + * @param bitmap la bitmap sur la quelle dessiner + * @param color la couleur du carre + * @param p le pinceau utiliser pour le canevas + */ + public void bitmapRectangleBuilder(Bitmap bitmap, int color,Paint p) + { + RectangleCanevas c = new RectangleCanevas(bitmap); + if(p==null)p = new Paint(); + + p.setColor(color); + p.setStyle(Paint.Style.FILL_AND_STROKE); + + c.drawRect(this,p); + } }