Skip to content
Snippets Groups Projects
Commit bffc5dd9 authored by Leonard Haddad's avatar Leonard Haddad :rocket:
Browse files

Merge branch 'network' into 'master'

kestrel generation done

See merge request reswp-2020/galaxytrucker!76
parents 54a5cc4e 35ef244e
No related branches found
No related tags found
No related merge requests found
Showing
with 102 additions and 159 deletions
...@@ -10,8 +10,9 @@ import lombok.NonNull; ...@@ -10,8 +10,9 @@ import lombok.NonNull;
import java.io.*; import java.io.*;
import java.net.Socket; import java.net.Socket;
import java.util.UUID;
/** This class handles the client-side networking */ /** This class handles the client side networking */
public class Client { public class Client {
/** /**
...@@ -49,6 +50,9 @@ public class Client { ...@@ -49,6 +50,9 @@ public class Client {
@Getter @Getter
private Overworld overworld; private Overworld overworld;
/** Ship type */
private Enum<ShipType> shipType;
/** /**
* Send a request to the server * Send a request to the server
* *
......
...@@ -45,27 +45,30 @@ public class Crew implements Serializable { ...@@ -45,27 +45,30 @@ public class Crew implements Serializable {
* Das Array besteht aus * Das Array besteht aus
* [Weapon, Shield, Engine, Repair, Combat] * [Weapon, Shield, Engine, Repair, Combat]
*/ */
@NonNull
@ElementCollection @ElementCollection
private List<Integer> stats; private List<Integer> stats;
/** /**
* The room this crew member is in * The room this crew member is in
*/ */
@OneToOne @OneToOne(cascade = CascadeType.ALL)
private Room currentRoom; private Room currentRoom;
/** Tile the crew member is standing on */ /** Tile the crew member is standing on */
@OneToOne @OneToOne(cascade = CascadeType.ALL)
private Tile tile; private Tile tile;
/** /**
* The price of the different crew-members * The price of the different crew-members
*/ */
@NonNull
private int price; private int price;
/** /**
* The user who owns this crew member * The user who owns this crew member
*/ */
@NonNull
private String associatedUser; private String associatedUser;
} }
package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
import lombok.*;
import javax.persistence.Entity;
@Getter
@Setter
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@Entity
public class BlankRoom extends Room {
}
...@@ -6,7 +6,6 @@ import lombok.*; ...@@ -6,7 +6,6 @@ import lombok.*;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
......
...@@ -3,6 +3,7 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout; ...@@ -3,6 +3,7 @@ package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew; import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
import lombok.*; import lombok.*;
import javax.persistence.CascadeType;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.OneToOne; import javax.persistence.OneToOne;
...@@ -29,7 +30,7 @@ public class Tile implements Serializable { ...@@ -29,7 +30,7 @@ public class Tile implements Serializable {
private int posY; private int posY;
/** Crew member on this tile */ /** Crew member on this tile */
@OneToOne @OneToOne(cascade = CascadeType.ALL)
private Crew standingOnMe = null; private Crew standingOnMe = null;
/** If the tile is empty */ /** If the tile is empty */
......
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
@Setter
@Entity
public class Bomb extends Weapon implements Serializable {
/** Weapon name */
@NonNull
private String name;
}
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
@Setter
@Entity
public class HealBomb extends Weapon implements Serializable {
/**
* Weapon name
*/
@NonNull
private String name;
}
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
@Setter
@Entity
public class LaserBlaster extends Weapon implements Serializable {
/** Weapon name */
@NonNull
private String name;
}
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
@Setter
@Entity
public class RadiationBomb extends Weapon implements Serializable {
/** Weapon name */
@NonNull
private String name;
}
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@Getter
@Setter
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Entity
public class Radio extends Weapon implements Serializable {
/** Weapon name */
@NonNull
private String name;
}
package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
import lombok.*;
import javax.persistence.Entity;
import java.io.Serializable;
@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@Getter
@Setter
@Entity
public class Rocket extends Weapon implements Serializable {
/** Weapon name */
@NonNull
private String weaponName;
}
...@@ -11,7 +11,9 @@ import java.util.List; ...@@ -11,7 +11,9 @@ import java.util.List;
@Getter @Getter
@Setter @Setter
@Entity @Entity
public abstract class Weapon implements Serializable { @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Weapon implements Serializable {
/** /**
* ID * ID
...@@ -52,7 +54,7 @@ public abstract class Weapon implements Serializable { ...@@ -52,7 +54,7 @@ public abstract class Weapon implements Serializable {
* Weapon accuracy * Weapon accuracy
*/ */
@NonNull @NonNull
private float precision; private float accuracy;
/** /**
* probability of randomly finding this weapon * probability of randomly finding this weapon
...@@ -94,4 +96,12 @@ public abstract class Weapon implements Serializable { ...@@ -94,4 +96,12 @@ public abstract class Weapon implements Serializable {
@OneToOne @OneToOne
private System weaponSystem; private System weaponSystem;
/** Weapon name */
@NonNull
private String weaponName;
/** Weapon price */
@NonNull
private int weaponPrice;
} }
...@@ -136,7 +136,7 @@ public class ClientHandler implements Runnable { ...@@ -136,7 +136,7 @@ public class ClientHandler implements Runnable {
send.println("[NEW-GAME]"); send.println("[NEW-GAME]");
// ==================== Overworld Creation ==================== // ==================== Overworld Creation ====================
this.seed = UUID.randomUUID().hashCode(); this.seed = UUID.randomUUID().hashCode();
Overworld overworld = generateOverworld(this.seed,username); Overworld overworld = generateOverworld(this.seed, username);
user.setOverworld(overworld); user.setOverworld(overworld);
//====================== Ship Creation ================== //====================== Ship Creation ==================
ShipType shipType = (ShipType) receiveObject.readObject(); ShipType shipType = (ShipType) receiveObject.readObject();
...@@ -197,7 +197,7 @@ public class ClientHandler implements Runnable { ...@@ -197,7 +197,7 @@ public class ClientHandler implements Runnable {
*/ */
private String getPlanetName(List<String> names, List<String> usedNames, int seed) { private String getPlanetName(List<String> names, List<String> usedNames, int seed) {
Random random = new Random(seed); Random random = new Random(seed);
String newName = names.get(random.nextInt(names.size()-1)); String newName = names.get(random.nextInt(names.size() - 1));
if (usedNames.contains(newName)) { if (usedNames.contains(newName)) {
getPlanetName(names, usedNames, seed); getPlanetName(names, usedNames, seed);
} }
...@@ -210,7 +210,7 @@ public class ClientHandler implements Runnable { ...@@ -210,7 +210,7 @@ public class ClientHandler implements Runnable {
* @param seed - the world seed * @param seed - the world seed
* @return the generated overworld * @return the generated overworld
*/ */
private Overworld generateOverworld(int seed,String username) { private Overworld generateOverworld(int seed, String username) {
Random random = new Random(seed); Random random = new Random(seed);
List<PlanetEvent> planetEvents = new ArrayList<PlanetEvent>(); List<PlanetEvent> planetEvents = new ArrayList<PlanetEvent>();
planetEvents.add(PlanetEvent.SHOP); planetEvents.add(PlanetEvent.SHOP);
...@@ -220,19 +220,21 @@ public class ClientHandler implements Runnable { ...@@ -220,19 +220,21 @@ public class ClientHandler implements Runnable {
planetEvents.add(PlanetEvent.NEBULA); planetEvents.add(PlanetEvent.NEBULA);
List<Planet> planets = new ArrayList<Planet>(); List<Planet> planets = new ArrayList<Planet>();
// Create start planet // Create start planet
planets.add(new Planet(UUID.randomUUID().hashCode(),getPlanetName(planetNames,usedPlanetNames,seed), //TODO CHANGE RANDOMIZER TO HAVE EVERYTHING IN EACH MAP
0,0,PlanetEvent.VOID,new ArrayList<Ship>())); //TODO ADD TRADER WITH ITEMS TO MAP
for (int i=0;i<5;i++){ planets.add(new Planet(UUID.randomUUID().hashCode(), getPlanetName(planetNames, usedPlanetNames, seed),
for (int a = 0;a<5;a++){ 0, 0, PlanetEvent.VOID, new ArrayList<Ship>()));
String nextPlanet = getPlanetName(planetNames,usedPlanetNames,seed); for (int i = 0; i < 5; i++) {
planets.add(new Planet(UUID.randomUUID().hashCode(),nextPlanet,i,a, for (int a = 0; a < 5; a++) {
planetEvents.get(random.nextInt(planetEvents.size()-1)),new ArrayList<Ship>())); String nextPlanet = getPlanetName(planetNames, usedPlanetNames, seed);
planets.add(new Planet(UUID.randomUUID().hashCode(), nextPlanet, i, a,
planetEvents.get(random.nextInt(planetEvents.size() - 1)), new ArrayList<Ship>()));
} }
} }
// Boss planet // Boss planet
planets.add(new Planet(UUID.randomUUID().hashCode(),getPlanetName(planetNames,usedPlanetNames,seed), planets.add(new Planet(UUID.randomUUID().hashCode(), getPlanetName(planetNames, usedPlanetNames, seed),
30,30,PlanetEvent.BOSS,new ArrayList<Ship>())); 30, 30, PlanetEvent.BOSS, new ArrayList<Ship>()));
Overworld overworld = new Overworld(UUID.randomUUID().hashCode(),seed,username); Overworld overworld = new Overworld(UUID.randomUUID().hashCode(), seed, username);
overworld.setStartPlanet(planets.get(0)); overworld.setStartPlanet(planets.get(0));
overworld.setPlanetMap(planets); overworld.setPlanetMap(planets);
return overworld; return overworld;
...@@ -244,12 +246,18 @@ public class ClientHandler implements Runnable { ...@@ -244,12 +246,18 @@ public class ClientHandler implements Runnable {
* @param shipType - the ship type * @param shipType - the ship type
* @return the created ship * @return the created ship
*/ */
@SuppressWarnings("Duplicates")
private Ship generateShip(ShipType shipType, String username, Overworld overworld) { private Ship generateShip(ShipType shipType, String username, Overworld overworld) {
List<Weapon> inventory = new ArrayList<>(); List<Weapon> inventory = new ArrayList<>();
List<Room> rooms = new ArrayList<>(); List<Room> rooms = new ArrayList<>();
List<Tile> tiles = new ArrayList<>(); List<Tile> tiles = new ArrayList<>();
switch (shipType) { switch (shipType) {
// ========== KESTREL A ==========
case DEFAULT: case DEFAULT:
List<Integer> crewStats = new ArrayList<>();
for (int f = 0; f < 5; f++) {
crewStats.add(2);
}
for (int i = 0; i < 17; i++) { for (int i = 0; i < 17; i++) {
// ========== Tile generator ========== // ========== Tile generator ==========
// 2 Above each other // 2 Above each other
...@@ -279,16 +287,41 @@ public class ClientHandler implements Runnable { ...@@ -279,16 +287,41 @@ public class ClientHandler implements Runnable {
else if (i == 2) { else if (i == 2) {
Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), Room engine = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(),
new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>()); new ArrayList<Tile>(), 2, 5, 0, SystemType.ENGINE, new ArrayList<Weapon>());
//TODO add crew member
engine.setTiles(tiles); engine.setTiles(tiles);
Crew crew = new Crew(UUID.randomUUID().hashCode(), "Isac", 8, 8, crewStats, 3 * crewStats.size() * 2, username);
crew.setTile(engine.getTiles().get(0));
engine.getTiles().get(0).setStandingOnMe(crew);
crew.setCurrentRoom(engine);
List<Crew> crewInRoom = engine.getCrew();
crewInRoom.add(crew);
engine.setCrew(crewInRoom);
rooms.add(engine); rooms.add(engine);
} }
// Weapons // Weapons
else if (i == 5) { else if (i == 5) {
Room weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), System weapons = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(),
new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>()); new ArrayList<Tile>(), 3, 5, 0, SystemType.WEAPON_SYSTEM, new ArrayList<Weapon>());
//TODO add weapons and crew member
weapons.setTiles(tiles); weapons.setTiles(tiles);
// Add crew
Crew crew = new Crew(UUID.randomUUID().hashCode(), "Newton", 8, 8, crewStats, 3 * crewStats.size() * 2, username);
crew.setTile(weapons.getTiles().get(0));
crew.setCurrentRoom(weapons);
List<Crew> crewInRoom = weapons.getCrew();
crewInRoom.add(crew);
weapons.getTiles().get(0).setStandingOnMe(crew);
weapons.setCrew(crewInRoom);
// Add Weapons
Weapon laser = new Weapon(UUID.randomUUID().hashCode(), 2, 1, 1, 1, 0,
(float) 1.0, (float) 0.3, 0, (float) 0.3, 1, 1, "Laser Gun", 30);
Weapon rocket = new Weapon(UUID.randomUUID().hashCode(), 1, 2, 2, 1, 1, (float) 1.0,
(float) 0.25, 4, (float) 1.0, 2, 1, "Allahu Akbar", 30);
// TODO add weapon price list
laser.setWeaponSystem(weapons);
rocket.setWeaponSystem(weapons);
List<Weapon> shipWeapons = new ArrayList<>();
shipWeapons.add(laser);
shipWeapons.add(rocket);
weapons.setShipWeapons(shipWeapons);
rooms.add(weapons); rooms.add(weapons);
} }
// Medbay // Medbay
...@@ -316,8 +349,15 @@ public class ClientHandler implements Runnable { ...@@ -316,8 +349,15 @@ public class ClientHandler implements Runnable {
else if (i == 16) { else if (i == 16) {
Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), Room cockpit = new System(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(),
new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>()); new ArrayList<Tile>(), 1, 5, 0, SystemType.COCKPIT, new ArrayList<Weapon>());
//TODO add crew member
cockpit.setTiles(tiles); cockpit.setTiles(tiles);
// Add crew
Crew crew = new Crew(UUID.randomUUID().hashCode(), "Ahmad", 8, 8, crewStats, 3 * crewStats.size() * 2, username);
crew.setTile(cockpit.getTiles().get(0));
crew.setCurrentRoom(cockpit);
List<Crew> crewInRoom = cockpit.getCrew();
crewInRoom.add(crew);
cockpit.getTiles().get(0).setStandingOnMe(crew);
cockpit.setCrew(crewInRoom);
rooms.add(cockpit); rooms.add(cockpit);
} else { } else {
Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>()); Room room = new Room(UUID.randomUUID().hashCode(), 0, 100, i, new ArrayList<Crew>(), new ArrayList<Tile>());
...@@ -326,8 +366,13 @@ public class ClientHandler implements Runnable { ...@@ -326,8 +366,13 @@ public class ClientHandler implements Runnable {
} }
tiles.clear(); tiles.clear();
} }
return new Ship(UUID.randomUUID().hashCode(), username, shipType, 30, 60, 11, 7, 0, return new Ship(UUID.randomUUID().hashCode(), username, shipType, 30, 60, 11, 7, 8,
0, 0, 0, overworld.getStartPlanet(), 1, 100, rooms, new ArrayList<Weapon>(), false); 0, 0, 0, overworld.getStartPlanet(), 0, 100, rooms, inventory, false);
// ========== Bulwark A ==========
case TANK:
// ========== Tile Generator ==========
// ========== Room Generator ==========
default: default:
return null; return null;
} }
......
...@@ -5,7 +5,11 @@ import lombok.*; ...@@ -5,7 +5,11 @@ import lombok.*;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory; import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence; import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import java.time.LocalDateTime;
import java.time.LocalTime;
/** Creates the database and entity manager */
@Getter @Getter
@NoArgsConstructor(access = AccessLevel.PUBLIC) @NoArgsConstructor(access = AccessLevel.PUBLIC)
public class Database { public class Database {
...@@ -32,11 +36,4 @@ public class Database { ...@@ -32,11 +36,4 @@ public class Database {
public static EntityManager getEntityManager() { public static EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager(); return entityManagerFactory.createEntityManager();
} }
/**
* Backup database
*/
public void backupDatabase() {
}
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception; package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when no crew can be found */
public class CrewNotFoundException extends Exception { public class CrewNotFoundException extends Exception {
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception; package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when the crew object already exists */
public class DuplicateCrewException extends Exception { public class DuplicateCrewException extends Exception {
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception; package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when the overWorld object already exists */
public class DuplicateOverworldException extends Exception { public class DuplicateOverworldException extends Exception {
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception; package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when the planet object already exists */
public class DuplicatePlanetException extends Exception { public class DuplicatePlanetException extends Exception {
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception; package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when the request object already exists */
public class DuplicateRequestObjectException extends Exception { public class DuplicateRequestObjectException extends Exception {
} }
package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
/** Thrown when the response object already exists */
public class DuplicateResponseObjectException extends Exception {
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment