add support of cards on board

This commit is contained in:
mmarc471@gmail.com
2020-09-09 12:19:28 +02:00
parent 64539007ff
commit 5a4beef3c4
3 changed files with 105 additions and 19 deletions
@@ -15,6 +15,7 @@ public class Drawable {
private float x,y; private float x,y;
private String name; private String name;
private Bitmap bitmap; private Bitmap bitmap;
private static Paint p;
/** /**
* cree un drawable a partir de coordonné est d'un nom * cree un drawable a partir de coordonné est d'un nom
@@ -83,25 +84,33 @@ public class Drawable {
*/ */
@Deprecated @Deprecated
public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException { 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); if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle);
rectangle.scaleRectangleToScreen(); rectangle.scaleRectangleToScreen();
Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888); Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888);
rectangle.bitmapRectangleBuilder(bitmap,color,p);
//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);
this.bitmap=bitmap; 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) public void drawOn(Canvas c, Paint p)
@@ -20,6 +20,9 @@ public class DrawableCard extends Drawable{
private Drawable OpacityRectangleDrawable; private Drawable OpacityRectangleDrawable;
private Drawable PictureDrawable; private Drawable PictureDrawable;
private Boolean onBoard;
private Drawable cardOnBardDrawable;
public DrawableCard(Card c, float x, float y, String name, Context context) throws InvalidDataException { 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); 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()); 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); 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 @Override
public void drawOn(Canvas c, Paint p) { public void drawOn(Canvas c, Paint p) {
//draw the frame //draw the frame
if(onBoard)
{
cardOnBardDrawable.drawOn(c,p);
PictureDrawable.drawOn(c,p);
}else{
super.drawOn(c, p); super.drawOn(c, p);
OpacityRectangleDrawable.drawOn(c,p); OpacityRectangleDrawable.drawOn(c,p);
PictureDrawable.drawOn(c,p); PictureDrawable.drawOn(c,p);
} }
}
@Override @Override
public void setCoordinates(float x, float y) { public void setCoordinates(float x, float y) {
if (onBoard) {
cardOnBardDrawable.setCoordinates(x,y);
PictureDrawable.setCoordinates(x +1, y +2);
}else{
super.setCoordinates(x, y); super.setCoordinates(x, y);
OpacityRectangleDrawable.setCoordinates(x,y); OpacityRectangleDrawable.setCoordinates(x, y);
PictureDrawable.setCoordinates(x+1.1F,y+2.5F); PictureDrawable.setCoordinates(x + 1.1F, y + 2.5F);
}
}
public void setOnBoard(Boolean onBoard)
{
this.onBoard = onBoard;
//force recalculate coodinates
setCoordinates(getX(), getY());
} }
} }
@@ -1,5 +1,8 @@
package com.iutlaval.myapplication.Video; package com.iutlaval.myapplication.Video;
import android.graphics.Bitmap;
import android.graphics.Paint;
import com.iutlaval.myapplication.GameActivity; import com.iutlaval.myapplication.GameActivity;
public class Rectangle { public class Rectangle {
@@ -42,4 +45,21 @@ public class Rectangle {
getHeight()*GameActivity.screenHeight/100 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);
}
} }