mirror of
https://github.com/michaelrausch/Party-Parrots-At-Sea.git
synced 2026-05-09 14:28:43 +00:00
Added sounds to coin pick up
Refactored check for token collision to move into the generic check for collision method Created a YachtEventType enum to differentiate between collision and pickup on client side. Client now plays a sound when they pick up a token #story[1250]
This commit is contained in:
@@ -24,6 +24,7 @@ import seng302.gameServer.messages.MarkType;
|
|||||||
import seng302.gameServer.messages.Message;
|
import seng302.gameServer.messages.Message;
|
||||||
import seng302.gameServer.messages.RoundingBoatStatus;
|
import seng302.gameServer.messages.RoundingBoatStatus;
|
||||||
import seng302.gameServer.messages.YachtEventCodeMessage;
|
import seng302.gameServer.messages.YachtEventCodeMessage;
|
||||||
|
import seng302.gameServer.messages.YachtEventType;
|
||||||
import seng302.model.GeoPoint;
|
import seng302.model.GeoPoint;
|
||||||
import seng302.model.Limit;
|
import seng302.model.Limit;
|
||||||
import seng302.model.Player;
|
import seng302.model.Player;
|
||||||
@@ -49,7 +50,7 @@ public class GameState implements Runnable {
|
|||||||
void notify(Message message);
|
void notify(Message message);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Logger logger = LoggerFactory.getLogger(GameState.class);
|
private static Logger logger = LoggerFactory.getLogger(GameState.class);
|
||||||
|
|
||||||
|
|
||||||
static final int WARNING_TIME = 10 * -1000;
|
static final int WARNING_TIME = 10 * -1000;
|
||||||
@@ -300,7 +301,13 @@ public class GameState implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called periodically in this GameState thread to update the GameState values
|
* Called periodically in this GameState thread to update the GameState values.
|
||||||
|
* -Updates yachts velocity
|
||||||
|
* -Updates locations
|
||||||
|
* -Checks for collisions
|
||||||
|
* -Checks for progression
|
||||||
|
*
|
||||||
|
* -Also checks things like the end of the race and race start time etc
|
||||||
*/
|
*/
|
||||||
public void update() {
|
public void update() {
|
||||||
Boolean raceFinished = true;
|
Boolean raceFinished = true;
|
||||||
@@ -317,7 +324,6 @@ public class GameState implements Runnable {
|
|||||||
yacht.updateLocation(timeInterval);
|
yacht.updateLocation(timeInterval);
|
||||||
if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
|
if (yacht.getBoatStatus() != BoatStatus.FINISHED) {
|
||||||
checkCollision(yacht);
|
checkCollision(yacht);
|
||||||
checkTokenPickUp(yacht);
|
|
||||||
checkForLegProgression(yacht);
|
checkForLegProgression(yacht);
|
||||||
raceFinished = false;
|
raceFinished = false;
|
||||||
}
|
}
|
||||||
@@ -361,25 +367,34 @@ public class GameState implements Runnable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks all tokensInPlay to see if a yacht has picked one up
|
* Checks all tokensInPlay to see if a yacht has picked one up
|
||||||
*
|
* @return Token which was collided with
|
||||||
* @param serverYacht The yacht to check for
|
* @param serverYacht The yacht to check for collision with a token
|
||||||
*/
|
*/
|
||||||
private void checkTokenPickUp(ServerYacht serverYacht) {
|
private static Token checkTokenPickUp(ServerYacht serverYacht) {
|
||||||
for (Token token : tokensInPlay) {
|
for (Token token : tokensInPlay) {
|
||||||
Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
|
Double distance = GeoUtility.getDistance(token, serverYacht.getLocation());
|
||||||
if (distance < YACHT_COLLISION_DISTANCE) {
|
if (distance < YACHT_COLLISION_DISTANCE) {
|
||||||
tokensInPlay.remove(token);
|
return token;
|
||||||
serverYacht.powerUp(token.getTokenType());
|
|
||||||
logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + token
|
|
||||||
.getTokenType());
|
|
||||||
notifyMessageListeners(MessageFactory.getRaceXML());
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks for collision with other in game objects for the given serverYacht. To be called each
|
||||||
|
* update. If there is a collision, Notifies the server to send the appropriate messages out.
|
||||||
|
* Checks for these items in turn:
|
||||||
|
* - Other yachts
|
||||||
|
* - Marks
|
||||||
|
* - Boundary
|
||||||
|
* - Tokens
|
||||||
|
*
|
||||||
|
* @param serverYacht The server yacht to check collisions with
|
||||||
|
*/
|
||||||
public static void checkCollision(ServerYacht serverYacht) {
|
public static void checkCollision(ServerYacht serverYacht) {
|
||||||
|
//Yacht Collision
|
||||||
ServerYacht collidedYacht = checkYachtCollision(serverYacht);
|
ServerYacht collidedYacht = checkYachtCollision(serverYacht);
|
||||||
if (collidedYacht != null) {
|
if (collidedYacht != null) {
|
||||||
GeoPoint originalLocation = serverYacht.getLocation();
|
GeoPoint originalLocation = serverYacht.getLocation();
|
||||||
@@ -396,36 +411,51 @@ public class GameState implements Runnable {
|
|||||||
collidedYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
collidedYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
||||||
);
|
);
|
||||||
notifyMessageListeners(
|
notifyMessageListeners(
|
||||||
new YachtEventCodeMessage(serverYacht.getSourceId())
|
new YachtEventCodeMessage(serverYacht.getSourceId(), YachtEventType.COLLISION)
|
||||||
);
|
);
|
||||||
} else {
|
|
||||||
Mark collidedMark = checkMarkCollision(serverYacht);
|
|
||||||
if (collidedMark != null) {
|
|
||||||
serverYacht.setLocation(
|
|
||||||
calculateBounceBack(serverYacht, collidedMark, BOUNCE_DISTANCE_MARK)
|
|
||||||
);
|
|
||||||
serverYacht.setCurrentVelocity(
|
|
||||||
serverYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
|
||||||
);
|
|
||||||
notifyMessageListeners(
|
|
||||||
new YachtEventCodeMessage(serverYacht.getSourceId())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
if (checkBoundaryCollision(serverYacht)) {
|
|
||||||
serverYacht.setLocation(
|
|
||||||
calculateBounceBack(serverYacht, serverYacht.getLocation(),
|
|
||||||
BOUNCE_DISTANCE_YACHT)
|
|
||||||
);
|
|
||||||
serverYacht.setCurrentVelocity(
|
|
||||||
serverYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
|
||||||
);
|
|
||||||
notifyMessageListeners(
|
|
||||||
new YachtEventCodeMessage(serverYacht.getSourceId())
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Mark Collision
|
||||||
|
Mark collidedMark = checkMarkCollision(serverYacht);
|
||||||
|
if (collidedMark != null) {
|
||||||
|
serverYacht.setLocation(
|
||||||
|
calculateBounceBack(serverYacht, collidedMark, BOUNCE_DISTANCE_MARK)
|
||||||
|
);
|
||||||
|
serverYacht.setCurrentVelocity(
|
||||||
|
serverYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
||||||
|
);
|
||||||
|
notifyMessageListeners(
|
||||||
|
new YachtEventCodeMessage(serverYacht.getSourceId(), YachtEventType.COLLISION)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Boundary Collision
|
||||||
|
if (checkBoundaryCollision(serverYacht)) {
|
||||||
|
serverYacht.setLocation(
|
||||||
|
calculateBounceBack(serverYacht, serverYacht.getLocation(),
|
||||||
|
BOUNCE_DISTANCE_YACHT)
|
||||||
|
);
|
||||||
|
serverYacht.setCurrentVelocity(
|
||||||
|
serverYacht.getCurrentVelocity() * COLLISION_VELOCITY_PENALTY
|
||||||
|
);
|
||||||
|
notifyMessageListeners(
|
||||||
|
new YachtEventCodeMessage(serverYacht.getSourceId(), YachtEventType.COLLISION)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//Token Collision
|
||||||
|
Token collidedToken = checkTokenPickUp(serverYacht);
|
||||||
|
if (collidedToken != null) {
|
||||||
|
tokensInPlay.remove(collidedToken);
|
||||||
|
serverYacht.powerUp(collidedToken.getTokenType());
|
||||||
|
logger.debug("Yacht: " + serverYacht.getShortName() + " got powerup " + collidedToken
|
||||||
|
.getTokenType());
|
||||||
|
notifyMessageListeners(MessageFactory.getRaceXML());
|
||||||
|
notifyMessageListeners(
|
||||||
|
new YachtEventCodeMessage(serverYacht.getSourceId(), YachtEventType.TOKEN));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,13 +18,13 @@ public class YachtEventCodeMessage extends Message {
|
|||||||
private int eventId;
|
private int eventId;
|
||||||
|
|
||||||
|
|
||||||
public YachtEventCodeMessage(Integer subjectId) {
|
public YachtEventCodeMessage(Integer subjectId, YachtEventType yachtEventType) {
|
||||||
timeStamp = System.currentTimeMillis() / 1000L;
|
timeStamp = System.currentTimeMillis() / 1000L;
|
||||||
ack = 0;
|
ack = 0;
|
||||||
raceId = 1;
|
raceId = 1;
|
||||||
destSourceId = subjectId; // collision boat source id
|
destSourceId = subjectId; // collision boat source id
|
||||||
incidentId = 0;
|
incidentId = 0;
|
||||||
eventId = 33;
|
eventId = yachtEventType.getCode();
|
||||||
|
|
||||||
setHeader(new Header(MESSAGE_TYPE, 0x01, (short) getSize()));
|
setHeader(new Header(MESSAGE_TYPE, 0x01, (short) getSize()));
|
||||||
allocateBuffer();
|
allocateBuffer();
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package seng302.gameServer.messages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by wmu16 on 11/09/17.
|
||||||
|
*/
|
||||||
|
public enum YachtEventType {
|
||||||
|
COLLISION(33),
|
||||||
|
TOKEN(34);
|
||||||
|
|
||||||
|
private int code;
|
||||||
|
|
||||||
|
YachtEventType(int code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -151,6 +151,16 @@ public class Sounds {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void playTokenPickupSound() {
|
||||||
|
if (!soundEffectsMuted) {
|
||||||
|
Media pickupSound = new Media(
|
||||||
|
Sounds.class.getClassLoader().getResource("sounds/Coin-pick-up-sound-effect.mp3")
|
||||||
|
.toString());
|
||||||
|
soundPlayer = new MediaPlayer(pickupSound);
|
||||||
|
soundPlayer.play();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void playHoverSound() {
|
public static void playHoverSound() {
|
||||||
if (!soundEffectsMuted) {
|
if (!soundEffectsMuted) {
|
||||||
Media hoverSound = new Media(Sounds.class.getClassLoader().getResource("sounds/sound-over.wav").toString());
|
Media hoverSound = new Media(Sounds.class.getClassLoader().getResource("sounds/sound-over.wav").toString());
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import seng302.gameServer.GameState;
|
|||||||
import seng302.gameServer.MainServerThread;
|
import seng302.gameServer.MainServerThread;
|
||||||
import seng302.gameServer.messages.BoatAction;
|
import seng302.gameServer.messages.BoatAction;
|
||||||
import seng302.gameServer.messages.BoatStatus;
|
import seng302.gameServer.messages.BoatStatus;
|
||||||
|
import seng302.gameServer.messages.YachtEventType;
|
||||||
import seng302.model.ClientYacht;
|
import seng302.model.ClientYacht;
|
||||||
import seng302.model.RaceState;
|
import seng302.model.RaceState;
|
||||||
import seng302.model.stream.packets.StreamPacket;
|
import seng302.model.stream.packets.StreamPacket;
|
||||||
@@ -296,7 +297,12 @@ public class GameClient {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case YACHT_EVENT_CODE:
|
case YACHT_EVENT_CODE:
|
||||||
showCollisionAlert(StreamParser.extractYachtEventCode(packet));
|
YachtEventData yachtEventData = StreamParser.extractYachtEventCode(packet);
|
||||||
|
if (yachtEventData.getEventId() == YachtEventType.COLLISION.getCode()) {
|
||||||
|
showCollisionAlert(StreamParser.extractYachtEventCode(packet));
|
||||||
|
} else if (yachtEventData.getEventId() == YachtEventType.TOKEN.getCode()) {
|
||||||
|
showPickUp();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case CHATTER_TEXT:
|
case CHATTER_TEXT:
|
||||||
@@ -446,15 +452,16 @@ public class GameClient {
|
|||||||
* Tells race view to show a collision animation.
|
* Tells race view to show a collision animation.
|
||||||
*/
|
*/
|
||||||
private void showCollisionAlert(YachtEventData yachtEventData) {
|
private void showCollisionAlert(YachtEventData yachtEventData) {
|
||||||
// 33 is the agreed code to show collision
|
Sounds.playCrashSound();
|
||||||
if (yachtEventData.getEventId() == 33) {
|
raceState.storeCollision(
|
||||||
Sounds.playCrashSound();
|
allBoatsMap.get(
|
||||||
raceState.storeCollision(
|
yachtEventData.getSubjectId().intValue()
|
||||||
allBoatsMap.get(
|
)
|
||||||
yachtEventData.getSubjectId().intValue()
|
);
|
||||||
)
|
}
|
||||||
);
|
|
||||||
}
|
private void showPickUp() {
|
||||||
|
Sounds.playTokenPickupSound();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void formatAndSendChatMessage(String rawChat) {
|
private void formatAndSendChatMessage(String rawChat) {
|
||||||
|
|||||||
Reference in New Issue
Block a user