From c47e61438d81cf4750c2042fab2aa88929c85996 Mon Sep 17 00:00:00 2001 From: "mmarc471@gmail.com" Date: Thu, 10 Sep 2020 14:42:39 +0200 Subject: [PATCH] preparatif moteur jeu + patch crash + patch couleur + simplification carte --- .../myapplication/Game/Cards/Card.java | 35 +++++++++ .../myapplication/Game/Cards/DemoCard.java | 18 ++++- .../myapplication/Game/GameLogicThread.java | 72 +++++++++++++++++++ .../iutlaval/myapplication/GameActivity.java | 53 ++------------ .../myapplication/Video/Drawable.java | 6 +- .../myapplication/Video/DrawableCard.java | 10 +-- .../myapplication/Video/Rectangle.java | 5 +- .../myapplication/Video/Renderer.java | 4 +- 8 files changed, 143 insertions(+), 60 deletions(-) create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java 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 b366c03..808960c 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 @@ -9,9 +9,27 @@ import android.util.Log; import com.iutlaval.myapplication.Game.Board; import com.iutlaval.myapplication.Game.Player.Player; import com.iutlaval.myapplication.R; +import com.iutlaval.myapplication.Video.DrawableCard; 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 + * @param c + */ + public Card(String UID,Context c) + { + drawableCard = new DrawableCard(this,0,0,UID,c); + } /** * *cette methode est appeler a chaque fois que la carte attaque @@ -111,5 +129,22 @@ public abstract class Card { * @return */ public abstract int getHealth(); + + /** + * NE PAS TOUCHER CETTE FONCTION SI VOUS N'ÊTES PAS SUR DE CE QUE VOUS FAITES + * cette fonction permet de redefinir le drawable de la carte + * @param drawableCard + */ + public void setDrawableCard(DrawableCard drawableCard) { + this.drawableCard = drawableCard; + } + + /** + * NE PAS OVERRIDE CETTE FONCTION + * @return + */ + public DrawableCard getDrawableCard() { + return drawableCard; + } } 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 c754069..72c5c84 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 @@ -1,11 +1,27 @@ package com.iutlaval.myapplication.Game.Cards; +import android.content.Context; import android.graphics.Color; import com.iutlaval.myapplication.R; public class DemoCard extends Card{ + public DemoCard() + { + super(); + } + + /** + * cree une carte est lui definit un drawable + * + * @param UID + * @param c + */ + public DemoCard(String UID, Context c) { + super(UID, c); + } + @Override public int getCardPicture() { return R.drawable.guerrier_nul; @@ -15,7 +31,7 @@ public class DemoCard extends Card{ //#AARRGGBB @Override public String getColor() { - return "#70000000"; + return "#00000000"; } @Override diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java new file mode 100644 index 0000000..a1a2316 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/GameLogicThread.java @@ -0,0 +1,72 @@ +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 com.iutlaval.myapplication.Game.Cards.Card; +import com.iutlaval.myapplication.Game.Cards.DemoCard; +import com.iutlaval.myapplication.InvalidDataException; +import com.iutlaval.myapplication.R; +import com.iutlaval.myapplication.Video.Drawable; +import com.iutlaval.myapplication.Video.DrawableCard; +import com.iutlaval.myapplication.Video.FpsTime; +import com.iutlaval.myapplication.Video.Rectangle; +import com.iutlaval.myapplication.Video.Renderer; + +public class GameLogicThread extends Thread{ + + Context cont; + Renderer renderer; + + public GameLogicThread(Context cont, Renderer renderer) + { + this.cont = cont; + this.renderer = renderer; + } + + @Override + public void run() { + + Bitmap bm = BitmapFactory.decodeResource(cont.getResources(), R.drawable.debug_card); + + 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); + if(!renderer.addToDraw(card2.getDrawableCard())) Log.e("F","WTF"); + Card card1 = new DemoCard("card1",cont); + if(!renderer.addToDraw(card1.getDrawableCard())) Log.e("F","WTF"); + } catch (InvalidDataException e) { + //cette erreur est lance si un carre est invalid + System.err.println(e.getDetail()); + e.printStackTrace(); + } + + + int i=0; + int increm = 1; + while(true) + { + if(i < 100) + { + i+=increm; + }else{ + increm=-increm; + i+=increm; + } + if(i==0)increm=-increm; + + //TODO get x,y coordinate form name + //r.moveToDraw(i,i,"card2"); + renderer.moveToDraw(1,1,"card3"); + renderer.moveToDraw(20,1,"card1"); + FpsTime.waitFrameTime(); + } + } + + //placeOnBoard() +} diff --git a/app/src/main/java/com/iutlaval/myapplication/GameActivity.java b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java index 5ea8e84..06a7dc4 100644 --- a/app/src/main/java/com/iutlaval/myapplication/GameActivity.java +++ b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java @@ -12,6 +12,7 @@ import android.os.Bundle; import android.view.Display; import com.iutlaval.myapplication.Game.Cards.DemoCard; +import com.iutlaval.myapplication.Game.GameLogicThread; import com.iutlaval.myapplication.Video.Drawable; import com.iutlaval.myapplication.Video.DrawableCard; import com.iutlaval.myapplication.Video.FpsTime; @@ -40,7 +41,7 @@ public class GameActivity extends Activity { Display display = getWindowManager().getDefaultDisplay(); FpsTime.init(display); - Renderer v = new Renderer(getBaseContext()); + Renderer renderer = new Renderer(getBaseContext()); //return portrait mode resolution so we need to flip them Point size = new Point(); @@ -54,56 +55,10 @@ public class GameActivity extends Activity { screenHeight = size.y; } - - Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.debug_card); - - try { - v.addToDraw(new Drawable(new Rectangle(0,0,100,100),"background",Color.BLUE)); - v.addToDraw(new Drawable(bm,0.0F,0.0F,"running",8F,16F)); - v.addToDraw(new DrawableCard(new DemoCard(),0.0F,0.0F,"card2",this)); - } catch (InvalidDataException e) { - //cette erreur est lance si un carre est invalid - System.err.println(e.getDetail()); - e.printStackTrace(); - } - - Thread t = new MainThread(v); + Thread t = new GameLogicThread(this,renderer); t.start(); - setContentView(v); - } - - //TODO a supprime quand le moteur de jeu pour être utliser a des fin de teste - private class MainThread extends Thread - { - Renderer view; - public MainThread(Renderer view) - { - super(); - this.view=view; - } - - @Override - public void run() { - int i=0; - int increm = 1; - while(true) - { - if(i < 100) - { - i+=increm; - }else{ - increm=-increm; - i+=increm; - } - if(i==0)increm=-increm; - - //TODO get x,y coordinate form name - view.moveToDraw(i,i,"card2"); - //view.moveToDraw(1,1,"card2"); - FpsTime.waitFrameTime(); - } - } + setContentView(renderer); } } 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 ac93d75..efb485c 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java @@ -2,6 +2,7 @@ package com.iutlaval.myapplication.Video; import android.graphics.Bitmap; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.Paint; import android.util.Log; @@ -85,6 +86,7 @@ public class Drawable { checkPaint(); p.setTextSize(textSize*2); + p.setColor(Color.BLACK); Canvas c = new Canvas(bitmap); @@ -118,7 +120,7 @@ public class Drawable { rectangle.scaleRectangleToScreen(); Bitmap bitmap = Bitmap.createBitmap((int)rectangle.getWidth(),(int)rectangle.getHeight(), Bitmap.Config.ARGB_8888); - rectangle.bitmapRectangleBuilder(bitmap,color,p); + rectangle.bitmapRectangleBuilder(bitmap,color); this.bitmap=bitmap; } @@ -140,7 +142,7 @@ public class Drawable { if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0 || bitmap == null)throw new InvalidDataException(name,rectangle); rectangle.scaleRectangleToScreen(); - rectangle.bitmapRectangleBuilder(bitmap,color,p); + rectangle.bitmapRectangleBuilder(bitmap,color); this.bitmap = bitmap; } 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 123431a..119a0bc 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java @@ -71,7 +71,7 @@ public class DrawableCard extends Drawable{ Paint p = new Paint(); - + //TODO optimize rectangle by making it only one time //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(); @@ -86,11 +86,13 @@ public class DrawableCard extends Drawable{ 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); + cardOnBoardFrame.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor(removeAlpha(c.getColor()))); + cardOnBoardHp.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FF00FF00")); + cardOnBoardAtk.bitmapRectangleBuilder(cardOnBoardBitmap,Color.parseColor("#FFFF0000")); cardOnBardDrawable = new Drawable(cardOnBoardBitmap,x,y,toString()+"BOARD",CARD_WITH,CARD_HEIGHT*2/3); + + c.setDrawableCard(this); } /** 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 e49ad46..fc67be0 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java @@ -6,7 +6,7 @@ import android.graphics.Paint; import com.iutlaval.myapplication.GameActivity; public class Rectangle { - + public static Paint p; float positionX,positionY,width,height; /** @@ -72,9 +72,8 @@ public class Rectangle { * 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) + public void bitmapRectangleBuilder(Bitmap bitmap, int color) { RectangleCanevas c = new RectangleCanevas(bitmap); if(p==null)p = new 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 1143af4..25bb553 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java @@ -76,7 +76,8 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { */ @Override protected void onDraw(Canvas canvas) { - for(Drawable d : toDraw) + //le to Array patch les crash + for(Drawable d : toDraw.toArray(new Drawable[0])) { d.drawOn(canvas,p); } @@ -121,6 +122,7 @@ public class Renderer extends SurfaceView implements SurfaceHolder.Callback { * @return retourne faux si l'element existe deja */ public boolean addToDraw(Drawable newElement){ + if(newElement == null)return false; for(Drawable d : toDraw) { if(d.equals(newElement))