Skip to content

Commit

Permalink
Merge pull request #20 from Fueredoriku/feature/backend-gameplay
Browse files Browse the repository at this point in the history
Changes to allow for playing.
  • Loading branch information
Nikolailb committed Apr 19, 2022
2 parents 741df1f + fab9781 commit 4238329
Show file tree
Hide file tree
Showing 10 changed files with 414 additions and 111 deletions.
30 changes: 21 additions & 9 deletions server/src/main/java/please/tacticool/models/Actions/Action.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,19 @@

import please.tacticool.models.Coordinate;
import please.tacticool.models.TerrainGrid;
import please.tacticool.models.Actors.Player;

public abstract class Action {

private final Coordinate playerPosition;
private final List<Coordinate> path;
protected final Player player;
protected final List<Coordinate> path;
private List<Coordinate> affectedCoordinates;
private final int actionCost;

public Action(Coordinate playerPosition, List<Coordinate> path){
this.playerPosition = playerPosition;
public Action(Player player, List<Coordinate> path, int actionCost){
this.player = player;
this.path = path;
this.actionCost = actionCost;
}

/**
Expand All @@ -33,15 +37,23 @@ public Action(Coordinate playerPosition, List<Coordinate> path){
*/
public abstract int getPriority();

public Coordinate getPlayerPosition() {
return playerPosition;
public List<Coordinate> getAffectedCoordinates() {
return affectedCoordinates;
}

public List<Coordinate> getPath() {
return path;
public void setAffectedCoordinates(List<Coordinate> affectedCoordinates) {
this.affectedCoordinates = affectedCoordinates;
}

public abstract List<Coordinate> execute(TerrainGrid grid);
public int getActionCost() {
return actionCost;
}

public Player getPlayer() {
return player;
}

public abstract void execute(TerrainGrid grid);

//public abstract List<Coordinate> execute(Coordinate position, List<Coordinate> path, TerrainGrid grid);
}
19 changes: 10 additions & 9 deletions server/src/main/java/please/tacticool/models/Actions/Movement.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ public class Movement extends Action {
int targetRadius = 1;
int defaultCost = 1;

public Movement(Coordinate playerPosition, List<Coordinate> path) {
super(playerPosition, path);
public Movement(Player player, List<Coordinate> path) {
super(player, path, 1);
}

/**
Expand Down Expand Up @@ -45,33 +45,34 @@ public int getPriority() {
* Moves the affected Actor object
*/
private List<Coordinate> move(TerrainGrid grid) {
Player player = (Player) grid.getTile(getPlayerPosition()).getActor();

List<Coordinate> npath = new ArrayList<Coordinate>();

if (getPath().isEmpty()) {
if (path.isEmpty()) {
return npath;
}

for (Coordinate coordinate : getPath()) {
if (!grid.isEmptyTile(coordinate)) {
int distance = 1;
for (Coordinate coordinate : path) {
if (!grid.isEmptyTile(coordinate) || coordinate.distance(player.getPosition()) != distance++ || npath.size() >= player.getActionPoints()) {
break;
}
npath.add(coordinate);
}

if (!npath.isEmpty()) {
grid.moveActor(getPlayerPosition(), npath.get(npath.size() - 1));
grid.moveActor(player.getPosition(), npath.get(npath.size() - 1));
player.setPosition(npath.get(npath.size() - 1));
}

player.useActionPoints(npath.size());
return npath;
}


@Override
public List<Coordinate> execute(TerrainGrid grid) {
return move(grid);
public void execute(TerrainGrid grid) {
setAffectedCoordinates(move(grid));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@
import please.tacticool.models.Coordinate;
import please.tacticool.models.TerrainGrid;
import please.tacticool.models.Actors.Actor;
import please.tacticool.models.Actors.Player;

public class Bazooka extends Weapon{

private int range = 3;
private int radius = 3;

public Bazooka(Coordinate playerPosition, List<Coordinate> path, int damage) {
super(playerPosition, path, damage);
public Bazooka(Player player, List<Coordinate> path, int damage) {
super(player, path, damage, 3);
}

// Currently possible to shot one self.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,19 @@
import please.tacticool.models.Coordinate;
import please.tacticool.models.TerrainGrid;
import please.tacticool.models.Actors.Actor;
import please.tacticool.models.Actors.Player;

public class Rifle extends Weapon {

public Rifle(Coordinate playerPosition, List<Coordinate> path, int damage) {
super(playerPosition, path, damage);
/**
* Create a new rifle object.
* @param player the player that will use this action.
* @param path the target of the actions.
* Should be a list of length 1, can be longer but only the first element will be used.
* @param damage damage this weapon deals. //TODO This sould not be an argument, use balance sheet.
*/
public Rifle(Player player, List<Coordinate> path, int damage) {
super(player, path, damage, 2);
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
package please.tacticool.models.Actions.Weapons;

import java.util.ArrayList;
import java.util.List;

import please.tacticool.models.Coordinate;
import please.tacticool.models.TerrainGrid;
import please.tacticool.models.Actions.Action;
import please.tacticool.models.Actors.Player;

public abstract class Weapon extends Action {

Expand All @@ -15,10 +17,10 @@ public abstract class Weapon extends Action {
* capacity and load.
* @param damage : damage dealt by the weapon
*/
public Weapon(Coordinate playerPosition, List<Coordinate> path, int damage){
super(playerPosition, path);
if (getPath().size() != 1) {
throw new IllegalArgumentException("Target is not correctly defined: " + getPath());
public Weapon(Player player, List<Coordinate> path, int damage, int actionCost){
super(player, path, actionCost);
if (path.size() != 1) {
throw new IllegalArgumentException("Target is not correctly defined: " + path);
}
this.damage = damage;
}
Expand All @@ -35,7 +37,12 @@ public int getDamage(){
}

@Override
public List<Coordinate> execute(TerrainGrid grid) {
return fire(getPlayerPosition(), getPath().get(0), grid);
public void execute(TerrainGrid grid) {
if (player.getActionPoints() >= getActionCost()) {
player.useActionPoints(getActionCost());
setAffectedCoordinates(fire(player.getPosition(), path.get(0), grid));
} else {
setAffectedCoordinates(new ArrayList<Coordinate>());
}
}
}
15 changes: 15 additions & 0 deletions server/src/main/java/please/tacticool/models/Actors/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ public class Player extends Actor {
private int healthPoint;
// Unique ID of the player to whom the character belongs
private final int playerID;
private static final int maxActionPoints = 4;
private int actionPoints = maxActionPoints;

/**
* Constructs a character with a given position and life points binded to the given player's ID.
Expand All @@ -32,6 +34,19 @@ public int getPlayerID(){
return playerID;
}

public int getActionPoints() {
return actionPoints;
}

public void resetActionPoints() {
this.actionPoints = maxActionPoints;
}

public boolean useActionPoints(int amount) {
actionPoints -= amount;
return actionPoints > 0;
}

public boolean isDead() {
return this.healthPoint <= 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public Coordinate add(Coordinate that){
}

public int distance(Coordinate coordinate) {
return Math.abs((coordinate.getX() - this.getX()) + (coordinate.getY() - this.getY()));
return Math.abs(coordinate.getX() - this.getX()) + Math.abs(coordinate.getY() - this.getY());
}

public int getX(){
Expand Down

0 comments on commit 4238329

Please sign in to comment.