You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

84 lines
1.8 KiB

package controller;
import playground.*;
import gameobjects.*;
import java.util.*;
import java.awt.event.*;
import java.io.File;
/**
* An EgoController which cannot move through obstacle objects (is collission aware). Only respects
* GameObjects that have the String 'obstacle' in their name.
*
*/
public class CollisionAwareEgoController extends EgoController {
double savex, savey, savevx, savevy;
double lastSpaceAt = -1;
private File shot = null;
/**
*
* @param egoRad radius of ego object to be used.
*/
public CollisionAwareEgoController(double egoRad) {
super(egoRad);
}
/**
*
* @param egoRad radius of ego object to be used.
* @param soundOnShot WAV file to be played on shot
*/
public CollisionAwareEgoController(double egoRad, File soundOnShot) {
super(egoRad);
this.shot = soundOnShot;
}
public void saveDynamicState() {
this.savex = this.getX();
this.savey = this.getY();
this.savevx = this.getVX();
this.savevy = this.getVY();
}
public void restoreDynamicState() {
this.setX(savex);
this.setY(savey);
this.setVX(savevx);
this.setVY(savevy);
}
public boolean stopObject() {
boolean s = super.stopObject();
Playground pg = this.getPlayground();
LinkedList<GameObject> obstacles = pg.collectObjects("obstacle", false);
this.saveDynamicState();
this.applySpeedVector();
for (GameObject ob : obstacles) {
if (ob.collisionDetection(this.gameObject)) {
this.restoreDynamicState();
return true;
}
}
this.restoreDynamicState();
return s;
}
public void onSpace(KeyEvent e, GameObject ego) {
double cgt = ego.getGameTime();
if ((cgt - this.lastSpaceAt) > 0.1) {
super.onSpace(e, ego);
Music.music(this.shot);
}
}
}