141 lines
4.1 KiB
Java
141 lines
4.1 KiB
Java
package com.iutlaval.myapplication.Game;
|
|
|
|
import android.graphics.Color;
|
|
import android.util.Log;
|
|
|
|
import com.iutlaval.myapplication.Game.Cards.Card;
|
|
import com.iutlaval.myapplication.InvalidDataException;
|
|
import com.iutlaval.myapplication.Video.Drawables.Drawable;
|
|
import com.iutlaval.myapplication.Video.Drawables.DrawableCard;
|
|
import com.iutlaval.myapplication.Video.Drawables.DrawableRectangle;
|
|
import com.iutlaval.myapplication.Video.Rectangle;
|
|
import com.iutlaval.myapplication.Video.Renderer;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* gére l'affichage des rectangle gris qui indique les zones jouables
|
|
*/
|
|
public class PlayableZonesHandler {
|
|
private List<Drawable> playableZones;
|
|
private boolean isDisplayed;
|
|
private Board board;
|
|
|
|
public PlayableZonesHandler(Board board)
|
|
{
|
|
playableZones=new ArrayList<>();
|
|
this.board=board;
|
|
isDisplayed=false;
|
|
}
|
|
|
|
/**
|
|
* affiche les zones de jeu libre
|
|
* @param renderer
|
|
*/
|
|
public void displayPlayableZones(Renderer renderer)
|
|
{
|
|
//on affiche pas si elle se sont deja
|
|
if(isDisplayed)return;
|
|
isDisplayed=true;
|
|
|
|
Card[] cardsOnBoard = board.getPlayerCardsOnBoard();
|
|
for(int i=0 ; i < cardsOnBoard.length ;i++)
|
|
{
|
|
if(cardsOnBoard[i] == null)
|
|
{
|
|
displayPlayableZoneOn(i,renderer);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* affiche un rectangle gris représentant une zone jouable en la case i
|
|
* @param i car sur la quelle afficher la zone
|
|
* @param renderer
|
|
*/
|
|
private void displayPlayableZoneOn(int i,Renderer renderer) {
|
|
Rectangle pos = new Rectangle((DrawableCard.getCardWith()+1)*i,50F,DrawableCard.getCardWith(),DrawableCard.getCardHeight());
|
|
|
|
try {
|
|
Drawable zone = new DrawableRectangle(pos,"greySpace"+i, Color.LTGRAY);
|
|
playableZones.add(zone);
|
|
renderer.addToDrawWithoutUpdate(zone);
|
|
} catch (InvalidDataException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* cache les zones de jeu
|
|
* @param renderer
|
|
*/
|
|
public void hidePlayableZones(Renderer renderer)
|
|
{
|
|
if(!isDisplayed)return;
|
|
for(Drawable d : playableZones)
|
|
{
|
|
renderer.removeToDraw(d);
|
|
}
|
|
playableZones.clear();
|
|
isDisplayed=false;
|
|
}
|
|
|
|
/**
|
|
* retourne le numero de la zone survolé par le drawable si la zone est vite
|
|
* sinon retourne -1
|
|
* @param card
|
|
* @return
|
|
*/
|
|
public int getHoveredZone(Drawable card) {
|
|
for(int i=0 ; i< board.MAX_CARD_ON_BOARD;i++)
|
|
{
|
|
int cardX =(DrawableCard.getCardWith()+1)*i+1;
|
|
//es que on survole sur l'axe x
|
|
if(cardX > card.getX() && card.getY() < 75F/*90F orrigine */ && card.getY() > 50F)
|
|
{
|
|
//on a trouvé l'emplacement de la carte
|
|
//si il y a une carte a l'emplacement on retourne le numero
|
|
if(board.getPlayerCardsOnBoard()[i] == null)return i;
|
|
else break;
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
|
|
/**
|
|
* retourne le numero de la zone survolé par le drawable si la zone est vite
|
|
* sinon retourne -1
|
|
* @param card
|
|
* @return
|
|
*/
|
|
public int getEnemyHoveredZone(Drawable card) {
|
|
if(card.getX() < 10F && card.getY() < 10F)
|
|
{
|
|
//cent veut dire que l'on attaque le joueur
|
|
return 100;
|
|
}
|
|
|
|
|
|
for(int i=0 ; i< board.MAX_CARD_ON_BOARD;i++)
|
|
{
|
|
int cardX =(DrawableCard.getCardWith()+1)*i + 20 + DrawableCard.getCardWith()/2;
|
|
//es que on survole sur l'axe x
|
|
if(cardX > card.getX() && card.getY() < 50F)
|
|
{
|
|
//on a trouvé l'emplacement de la carte
|
|
//si il y a une carte a l'emplacement on retourne le numero
|
|
if(board.getAdvCardsOnBoard()[i] != null){
|
|
return i;
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return -1;
|
|
}
|
|
}
|