src/controller.js
import Drone from './drone';
import { deprecate } from 'core-decorators';
import { CanvasOverlayer} from './layers/canvasOverlay';
const interval = 25;
export default class controllers {
/**
* GameController bind with a drone instance..
* After start this controller, use WSAD to move drone.
*/
static gameControl(drone) {
if ((drone instanceof Drone) !== true ) {
console.error("gameControl must bind with a drone instance.");
return;
}
// bind key event with drone..
drone.u=drone.r=drone.d=drone.l=0;onkeydown=(e)=>t(e,1);onkeyup=(e)=>t(e);
let t=(e,v,l,i)=>{
for(i in l={u:[38,90,87],r:[39,68],d:[40,83],l:[37,65,81]})
if(l[i].includes(e.keyCode))
drone[i]=v
}
setInterval(()=>{
if (drone.u) drone.accelerate();
if (drone.d) drone.brake();
if (drone.r) drone.turnRight();
if (drone.l) drone.turnLeft();
}, interval);
console.log("gameControl register success.");
}
/**
* pickupObj control, need to bind with canvasOverlay, to fetch the objs drawn
* each moveEnd, rebuild the pixList depend on objs in viewport!
* pixList's index is vital for pickUp performance.
*/
static pickupControl(canvasOverlay) {
if (canvasOverlay instanceof CanvasOverlayer) {
// establish pixList storing objs' location. canvasOverlay.source.lon, lat
let pix = canvasOverlay.lnglat2pix(canvasOverlay.source[0].lon,
canvasOverlay.source[1].lat);
}
}
/**
* Calculate bullets location based on drones.
*/
static bulletCalculator(drones) {
if (Array.isArray(drones)) {
for(let i = 0;i < drones.length; i ++) {
let curDrone = drone[i];
let curBullets = curDrone.bullets;
// Calculate bullets coords
if (curDrone.firing && curBullets) {
} else {
}
}
}
}
/**
* Add AI robots shooting at player..
* @input num: number. how many robots to create.
*/
static addRobots(num) {
let robot = new Drone({});
return robot;
}
/**
* Dashboard bind with a drone instance and div element...
* After start this controller, use WSAD to move drone.
*/
// @deprecate
static dashBoard(drone, ele) {
if ((drone instanceof Drone) !== true ) {
console.error("dashBoard must bind with a drone instance.");
return;
}
try {
setInterval( function(){
ele.innerHTML = drone.name + "<br> coords: " +
drone.lon.toFixed(1) + ", " +
drone.lat.toFixed(1) + "<br>" +
'speed: ' + drone.speed + "<br>" +
'direction: ' + (drone.direction%(360)).toFixed(1)
}, 200);
} catch(e) {
console.error(e);
}
console.log("dashBoard register success.");
}
/** create refreshable features list. */
static featureList(containerId) {
if (containerId == undefined || typeof containerId !== "string") {
console.warn("invalid containerId..");
return null;
}
// var miniRefresh = new MiniRefresh({
// container: '#' + containerId,
// down: {
// callback: function() {
// // 下拉事件
// console.log("list dragged ..");
// }
// },
// up: {
// callback: function() {
// // 上拉事件
// }
// }
// });
// return miniRefresh;
}
}