From f121e55071e9736dc9aafbbfe37f919ca2d1f4d4 Mon Sep 17 00:00:00 2001 From: "mmarc471@gmail.com" Date: Tue, 8 Sep 2020 22:53:14 +0200 Subject: [PATCH] amelioration du moteur + ajout de DrawableCard pour simplifer la creation de carte + correction du support de texture + correction du support de rectangle --- app/src/main/AndroidManifest.xml | 2 +- .../DrawableNotFoundException.java | 4 - .../iutlaval/myapplication/Game/Board.java | 41 +++++++ .../myapplication/Game/Cards/Card.java | 69 +++++++++++ .../myapplication/Game/Cards/DemoCard.java | 20 ++++ .../myapplication/Game/Player/Player.java | 49 ++++++++ .../myapplication/Game/Player/PlayerBot.java | 4 + .../Game/Player/PlayerLocal.java | 4 + .../Game/Player/PlayerOnlineAdversary.java | 4 + .../iutlaval/myapplication/GameActivity.java | 109 ++++++++++++++++++ .../myapplication/InvalidDataException.java | 9 +- .../iutlaval/myapplication/MainActivity.java | 64 ---------- .../myapplication/{ => Video}/Drawable.java | 43 ++++--- .../myapplication/Video/DrawableCard.java | 42 +++++++ .../Video/DrawableNotFoundException.java | 4 + .../iutlaval/myapplication/Video/FpsTime.java | 19 +++ .../myapplication/Video/Rectangle.java | 45 ++++++++ .../myapplication/Video/RectangleCanevas.java | 23 ++++ .../{CanevasView.java => Video/Renderer.java} | 59 +++++----- app/src/main/res/drawable/cadre_carte.png | Bin 0 -> 5566 bytes app/src/main/res/drawable/guerrier_nul.png | Bin 0 -> 55802 bytes app/src/main/res/layout/activity_main.xml | 2 +- 22 files changed, 495 insertions(+), 121 deletions(-) delete mode 100644 app/src/main/java/com/iutlaval/myapplication/DrawableNotFoundException.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Board.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerBot.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerLocal.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerOnlineAdversary.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/GameActivity.java delete mode 100644 app/src/main/java/com/iutlaval/myapplication/MainActivity.java rename app/src/main/java/com/iutlaval/myapplication/{ => Video}/Drawable.java (67%) create mode 100644 app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Video/DrawableNotFoundException.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Video/FpsTime.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java create mode 100644 app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java rename app/src/main/java/com/iutlaval/myapplication/{CanevasView.java => Video/Renderer.java} (81%) create mode 100644 app/src/main/res/drawable/cadre_carte.png create mode 100644 app/src/main/res/drawable/guerrier_nul.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 37d8afb..f90daff 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/app/src/main/java/com/iutlaval/myapplication/DrawableNotFoundException.java b/app/src/main/java/com/iutlaval/myapplication/DrawableNotFoundException.java deleted file mode 100644 index b67db7e..0000000 --- a/app/src/main/java/com/iutlaval/myapplication/DrawableNotFoundException.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.iutlaval.myapplication; - -public class DrawableNotFoundException extends Exception{ -} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Board.java b/app/src/main/java/com/iutlaval/myapplication/Game/Board.java new file mode 100644 index 0000000..9ed0bd6 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Board.java @@ -0,0 +1,41 @@ +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.PlayerBot; +import com.iutlaval.myapplication.Game.Player.PlayerOnlineAdversary; +import com.iutlaval.myapplication.Game.Player.PlayerLocal; +import com.iutlaval.myapplication.GameActivity; + +import java.util.ArrayList; +import java.util.List; + +public class Board { + private static final int MAX_CARD_ON_BOARD=10; + private List AdvCardsOnBoard; + private List PlayerCardsOnBoard; + private PlayerLocal player1; + private Player player2; + + public Board() + { + AdvCardsOnBoard = new ArrayList<>(); + PlayerCardsOnBoard = new ArrayList<>(); + player1 = new PlayerLocal(); + + if(GameActivity.isMultiplayer()) + { + player2 = new PlayerOnlineAdversary(); + }else{ + player2 = new PlayerBot(); + } + + //TODO fill decks + if(GameActivity.isHosting()) + { + + }else{ + + } + } +} 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 new file mode 100644 index 0000000..3a3e25b --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/Card.java @@ -0,0 +1,69 @@ +package com.iutlaval.myapplication.Game.Cards; + +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.Board; +import com.iutlaval.myapplication.R; + +public abstract class Card { + private int health; + private int attack; + + private static Bitmap frameBitmap = null; + + public void onCardAttack(Board board){} + + public void onCardPlayed(Board board){} + + public void onCardDeath(Board board){} + + public void onTurnBegin(Board board){} + + /** + * SURTOUT NE PAS @OVERRIDE + * si vous voulez modifier le cadre changer getFrameTexture() + * @param c context + * @return bitmap + */ + public Bitmap getFrameBitmap(Context c) + { + //TODO add a frame + if(frameBitmap == null) { + frameBitmap=BitmapFactory.decodeResource(c.getResources(), R.drawable.cadre_carte); + } + + if(getFrameTexture() == R.drawable.cadre_carte) + { + return frameBitmap; + }else{ + return BitmapFactory.decodeResource(c.getResources(),getFrameTexture()); + } + + } + + public int getFrameTexture() + { + return R.drawable.cadre_carte; + } + + + public abstract int getCardPicture(); + + /** + * retourne la culeur de la carte + * la couleur s'affiche comme un filtre sur la carte + * /!\ attention a l'opacite /!\ le format n'est PAS rgba MAIS argb + * #AARRGGBB + * je recomander une opaciter en 44 et 70 + * @return + */ + public String getColor() + { + return "#00000000"; + } + //TODO +} 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 new file mode 100644 index 0000000..5ce7e93 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Cards/DemoCard.java @@ -0,0 +1,20 @@ +package com.iutlaval.myapplication.Game.Cards; + +import android.graphics.Color; + +import com.iutlaval.myapplication.R; + +public class DemoCard extends Card{ + + @Override + public int getCardPicture() { + return R.drawable.guerrier_nul; + } + + + //#AARRGGBB + @Override + public String getColor() { + return "#70FF0000"; + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java b/app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java new file mode 100644 index 0000000..c0a33cb --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Player/Player.java @@ -0,0 +1,49 @@ +package com.iutlaval.myapplication.Game.Player; + +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; + + private List deck; + private List hand; + private int hp = 100; + + + public Player(){ + deck=new ArrayList<>(); + hand=new ArrayList<>(); + } + + public void shuffle() + { + Collections.shuffle(deck); + } + + /** + * cette fonction ajoute un carte dans la main de l'utilisateur + */ + public void pickCard() + { + if(!deck.isEmpty()) { + if (hand.size() >= MAX_HAND_SIZE) { + deck.remove(0); + } else { + hand.add(deck.remove(0)); + } + }else{ + getHurt(2); + } + } + + public void getHurt(int dmg) + { + hp -= dmg; + //TODO death trigger + } +} 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 new file mode 100644 index 0000000..6023375 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerBot.java @@ -0,0 +1,4 @@ +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 new file mode 100644 index 0000000..a6a66e7 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerLocal.java @@ -0,0 +1,4 @@ +package com.iutlaval.myapplication.Game.Player; + +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/Player/PlayerOnlineAdversary.java new file mode 100644 index 0000000..12e1dba --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Game/Player/PlayerOnlineAdversary.java @@ -0,0 +1,4 @@ +package com.iutlaval.myapplication.Game.Player; + +public class PlayerOnlineAdversary extends Player{ +} diff --git a/app/src/main/java/com/iutlaval/myapplication/GameActivity.java b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java new file mode 100644 index 0000000..095f38e --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/GameActivity.java @@ -0,0 +1,109 @@ +package com.iutlaval.myapplication; + +//N'oubliez pas de déclarer le bon package dans lequel se trouve le fichier ! + +import android.app.Activity; +import android.content.pm.ActivityInfo; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.graphics.Point; +import android.graphics.Rect; +import android.os.Bundle; +import android.view.Display; + +import com.iutlaval.myapplication.Game.Cards.DemoCard; +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 GameActivity extends Activity { + + public static int screenWidth=0; + public static int screenHeight=0; + public static boolean bilinearFiltering = true; + + public static boolean isMultiplayer() { + return false;//TODO implement it + } + + public static boolean isHosting() { + return false;//TODO implement it + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); + Display display = getWindowManager().getDefaultDisplay(); + FpsTime.init(display); + + Renderer v = new Renderer(getBaseContext()); + + //return portrait mode resolution so we need to flip them + Point size = new Point(); + display.getSize(size); + if(size.y > size.x) + { + screenWidth = size.y; + screenHeight = size.x; + }else{ + screenWidth = size.x; + 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); + t.start(); + + setContentView(v); + } + + 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,"running"); + FpsTime.waitFrameTime(); + } + } + } + +} + diff --git a/app/src/main/java/com/iutlaval/myapplication/InvalidDataException.java b/app/src/main/java/com/iutlaval/myapplication/InvalidDataException.java index d0608cd..8149a47 100644 --- a/app/src/main/java/com/iutlaval/myapplication/InvalidDataException.java +++ b/app/src/main/java/com/iutlaval/myapplication/InvalidDataException.java @@ -1,16 +1,17 @@ package com.iutlaval.myapplication; -import android.graphics.Rect; + +import com.iutlaval.myapplication.Video.Rectangle; public class InvalidDataException extends Throwable { private String name; private float x; private float y; - public InvalidDataException(String name, Rect rectangle) + public InvalidDataException(String name, Rectangle rectangle) { - x = rectangle.width(); - y = rectangle.height(); + x = rectangle.getWidth(); + y = rectangle.getHeight(); this.name=name; } public InvalidDataException(String name,float x,float y) diff --git a/app/src/main/java/com/iutlaval/myapplication/MainActivity.java b/app/src/main/java/com/iutlaval/myapplication/MainActivity.java deleted file mode 100644 index bd49f8b..0000000 --- a/app/src/main/java/com/iutlaval/myapplication/MainActivity.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.iutlaval.myapplication; - -//N'oubliez pas de déclarer le bon package dans lequel se trouve le fichier ! - -import android.app.Activity; -import android.content.pm.ActivityInfo; -import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.Point; -import android.graphics.Rect; -import android.os.Bundle; -import android.view.Display; -import android.view.SurfaceHolder; -import android.view.SurfaceView; -import android.view.View; -import android.view.Window; -import android.widget.TextView; - -public class MainActivity extends Activity { - - public static int screenWidth=0; - public static int screenHeight=0; - public static boolean bilinearFiltering = true; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); - Display display = getWindowManager().getDefaultDisplay(); - - - CanevasView v = new CanevasView(getBaseContext()); - - //return portrait mode resolution so we need to flip them - Point size = new Point(); - display.getSize(size); - if(size.y > size.x) - { - screenWidth = size.y; - screenHeight = size.x; - }else{ - screenWidth = size.x; - screenHeight = size.y; - } - - - Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.debug_card); - - try { - v.addToDraw(new Drawable(new Rect(0,0,screenWidth,screenHeight),"background",Color.BLUE)); - v.addToDraw(new Drawable(bm,0.0F,00.0F,"Card1",50F,50F)); - } catch (InvalidDataException e) { - //cette erreur est lance si un carre est invalid - System.err.println(e.getDetail()); - e.printStackTrace(); - } - - setContentView(v); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/iutlaval/myapplication/Drawable.java b/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java similarity index 67% rename from app/src/main/java/com/iutlaval/myapplication/Drawable.java rename to app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java index dc735d2..9a9d631 100644 --- a/app/src/main/java/com/iutlaval/myapplication/Drawable.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Drawable.java @@ -1,12 +1,14 @@ -package com.iutlaval.myapplication; +package com.iutlaval.myapplication.Video; import android.graphics.Bitmap; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Rect; +import android.util.Log; -import java.util.Objects; +import androidx.annotation.NonNull; + +import com.iutlaval.myapplication.GameActivity; +import com.iutlaval.myapplication.InvalidDataException; public class Drawable { @@ -20,7 +22,7 @@ public class Drawable { * @param y coordoné y comrpis entre 0 et 100 * @param name nom du drawable agit comme un identifiant mais doit être unique */ - private Drawable(float x,float y,String name) + protected Drawable(float x,float y,String name) { this.x=x; this.y=y; @@ -52,11 +54,11 @@ public class Drawable { * * TODO : echelle dynamique avec l'ecran */ - public Drawable(Bitmap bitmap,float x_pos,float y_pos,String name,float x_size,float y_size) throws InvalidDataException { + public Drawable(@NonNull Bitmap bitmap, float x_pos, float y_pos, String name, float x_size, float y_size) throws InvalidDataException { this(x_pos,y_pos,name); - float x_scaled_size = x_size*MainActivity.screenWidth/100; - float y_scaled_size = y_size*MainActivity.screenHeight/100; + float x_scaled_size = x_size* GameActivity.screenWidth/100; + float y_scaled_size = y_size* GameActivity.screenHeight/100; System.out.println(x_scaled_size + " y: " + y_scaled_size); System.out.println(y_size); @@ -66,8 +68,8 @@ public class Drawable { throw new InvalidDataException(name,x_scaled_size,y_scaled_size); } - Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, (int)x_scaled_size, (int)y_scaled_size,MainActivity.bilinearFiltering); - this.bitmap=scaledBitmap; + this.bitmap = Bitmap.createScaledBitmap(bitmap, (int)x_scaled_size, (int)y_scaled_size, GameActivity.bilinearFiltering); + Log.i("loul",""+this.bitmap.getWidth()); } /** @@ -80,13 +82,15 @@ public class Drawable { * @param color couleur du rectangle */ @Deprecated - public Drawable(Rect rectangle, String name, int color) throws InvalidDataException { - if(rectangle.height() <= 0 || rectangle.width() <=0)throw new InvalidDataException(name,rectangle); + public Drawable(Rectangle rectangle, String name, int color) throws InvalidDataException { + if(rectangle.getHeight() <= 0 || rectangle.getWidth() <=0)throw new InvalidDataException(name,rectangle); - Bitmap bitmap = Bitmap.createBitmap(rectangle.width(),rectangle.height(), Bitmap.Config.ARGB_8888); + 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 - Canvas c = new Canvas(bitmap); + RectangleCanevas c = new RectangleCanevas(bitmap); Paint p = new Paint(); p.setColor(color); @@ -96,14 +100,14 @@ public class Drawable { this.bitmap=bitmap; this.name=name; - this.x=rectangle.left; - this.y=rectangle.top; + this.x=rectangle.getPositionX(); + this.y=rectangle.getPositionY(); } public void drawOn(Canvas c, Paint p) { //drawings - c.drawBitmap(bitmap,x*MainActivity.screenWidth/100,y*MainActivity.screenHeight/100,p); + c.drawBitmap(getBitmap(),x* GameActivity.screenWidth/100,y* GameActivity.screenHeight/100,p); } public Bitmap getBitmap() { @@ -135,4 +139,9 @@ public class Drawable { this.x=x; this.y=y; } + + /** + * cette fonction est appeler quand le drawable est retirer de la liste toDraw + */ + public void onDeletion(Renderer r){} } diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java new file mode 100644 index 0000000..f019c3a --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableCard.java @@ -0,0 +1,42 @@ +package com.iutlaval.myapplication.Video; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.Rect; + +import com.iutlaval.myapplication.Game.Cards.Card; +import com.iutlaval.myapplication.InvalidDataException; + +public class DrawableCard extends Drawable{ + + private static final int CARD_WITH = 14; + private static final int CARD_HEIGHT = 32; + + private String color; + + private Drawable OpacityRectangleDrawable; + private Drawable PictureDrawable; + + 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); + + color = c.getColor();//CARD_WITH+x + Rectangle cardRect = new Rectangle(x,y,(float)(CARD_WITH+x),(float)(CARD_HEIGHT+x)); + OpacityRectangleDrawable = new Drawable(cardRect,toString()+"Opacity", Color.parseColor(c.getColor())); + + 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); + } + + @Override + public void drawOn(Canvas c, Paint p) { + //draw the frame + super.drawOn(c, p); + OpacityRectangleDrawable.drawOn(c,p); + PictureDrawable.drawOn(c,p); + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/DrawableNotFoundException.java b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableNotFoundException.java new file mode 100644 index 0000000..f5d7ddf --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/DrawableNotFoundException.java @@ -0,0 +1,4 @@ +package com.iutlaval.myapplication.Video; + +public class DrawableNotFoundException extends RuntimeException{ +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/FpsTime.java b/app/src/main/java/com/iutlaval/myapplication/Video/FpsTime.java new file mode 100644 index 0000000..ccec557 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/FpsTime.java @@ -0,0 +1,19 @@ +package com.iutlaval.myapplication.Video; + +import android.view.Display; + +public class FpsTime { + private static long frametime; + + public static void init(Display d) + { + float fps = d.getRefreshRate(); + frametime = (long)(1.0F/fps*1000); + } + + public static void waitFrameTime(){ + try { + Thread.sleep((frametime)); + } catch (InterruptedException e) {} + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java new file mode 100644 index 0000000..e4921d5 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Rectangle.java @@ -0,0 +1,45 @@ +package com.iutlaval.myapplication.Video; + +import com.iutlaval.myapplication.GameActivity; + +public class Rectangle { + + float positionX,positionY,width,height; + public Rectangle(float positionX,float positionY,float width,float height) + { + set(positionX,positionY,width,height); + } + + public void set(float positionX,float positionY,float width,float height) + { + this.positionX=positionX; + this.positionY=positionY; + this.width=width; + this.height=height; + } + + public float getPositionX() { + return positionX; + } + + public float getPositionY() { + return positionY; + } + + public float getHeight() { + return height; + } + + public float getWidth() { + return width; + } + + protected void scaleRectangleToScreen() + { + set(getPositionX()* GameActivity.screenWidth/100, + getPositionY()*GameActivity.screenHeight/100, + getWidth()*GameActivity.screenWidth/100, + getHeight()*GameActivity.screenHeight/100 + ); + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java b/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java new file mode 100644 index 0000000..81f5c04 --- /dev/null +++ b/app/src/main/java/com/iutlaval/myapplication/Video/RectangleCanevas.java @@ -0,0 +1,23 @@ +package com.iutlaval.myapplication.Video; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; + +import androidx.annotation.NonNull; + +public class RectangleCanevas extends Canvas { + public RectangleCanevas(Bitmap bitmap) + { + super(bitmap); + } + + public void drawRect(@NonNull Rectangle r, @NonNull Paint paint) { + super.drawRect(r.getPositionX(), + r.getPositionY(), + r.getPositionX()+r.getWidth(), + r.getPositionY()+r.getHeight(), + paint); + } +} diff --git a/app/src/main/java/com/iutlaval/myapplication/CanevasView.java b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java similarity index 81% rename from app/src/main/java/com/iutlaval/myapplication/CanevasView.java rename to app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java index e2f0d1d..59882b9 100644 --- a/app/src/main/java/com/iutlaval/myapplication/CanevasView.java +++ b/app/src/main/java/com/iutlaval/myapplication/Video/Renderer.java @@ -1,11 +1,10 @@ -package com.iutlaval.myapplication; +package com.iutlaval.myapplication.Video; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; -import android.graphics.Rect; import android.view.SurfaceHolder; import android.view.SurfaceView; @@ -14,7 +13,7 @@ import androidx.annotation.NonNull; import java.util.ArrayList; import java.util.List; -public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { +public class Renderer extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder holder; private Paint p; @@ -22,9 +21,8 @@ public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { private List toDraw; - private Rect fullscreen; - public CanevasView(Context context) { + public Renderer(Context context) { super(context); holder = getHolder(); holder.addCallback(this); @@ -40,7 +38,6 @@ public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { @Override public void surfaceCreated(@NonNull SurfaceHolder holder) { - fullscreen = holder.getSurfaceFrame(); drawingThread.start(); } @@ -90,11 +87,8 @@ public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { } //empecher d'aller plus vite que le taux de rafraichissement de l'ecran - //sauve de la betterie - try { - float fps = getDisplay().getRefreshRate(); - Thread.sleep((long)(1.0/fps*1000)); - } catch (InterruptedException e) {} + //sauve de la baterie + FpsTime.waitFrameTime(); } } } @@ -121,7 +115,7 @@ public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { * @param y coodonné en y (-1.0 a 1.0) * @param name nom de l'element a modifier */ - public void ChangeToDraw(float x,float y,String name) throws DrawableNotFoundException { + public void moveToDraw(float x, float y, String name) throws DrawableNotFoundException { for(Drawable d : toDraw) { if(d.getName().equals(name)) @@ -134,34 +128,39 @@ public class CanevasView extends SurfaceView implements SurfaceHolder.Callback { } /** - * remove the element from the draw list - * @param name the element name + * supprime le drawable possedant le nom indique + * @param name le nom */ public void removeToDraw(String name){ - Drawable toRemove = null; - for(Drawable d : toDraw) - { - if(d.getName().equals(name)) - { - toRemove=d; - break; - } - } - if(toRemove != null) - { - toDraw.remove(toRemove); - } + Drawable d = getDrawAble(name); + if(d != null) + toDraw.remove(d); } - /** * remove the element from the draw list * @param toRemove the element toRemove */ public void removeToDraw(Drawable toRemove){ + toRemove.onDeletion(this); toDraw.remove(toRemove); } - public Rect getFullscreen() { - return fullscreen; + + /** + * retourne le drawable possedant le nom indiqué + * @param name le nom du drawable + * @return + */ + public Drawable getDrawAble(String name){ + Drawable drawable = null; + for(Drawable d : toDraw) + { + if(d.getName().equals(name)) + { + drawable=d; + break; + } + } + return drawable; } } diff --git a/app/src/main/res/drawable/cadre_carte.png b/app/src/main/res/drawable/cadre_carte.png new file mode 100644 index 0000000000000000000000000000000000000000..58bac024316d6e8852f26b217e8e9c541ec2d206 GIT binary patch literal 5566 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 UqV(iWqyPW_07*qoM6N<$f+@LJ)&Kwi literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4fc2444..665180a 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -4,7 +4,7 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".MainActivity"> + tools:context=".GameActivity">