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
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);
|
|
}
|
|
|
|
}
|
|
}
|