# src/drone.js

    import Const from './const';
    import Bullet from './bullet';
    import { readonly, log } from './util';
    import { Sprite, randomName} from './sprites/sprite';

    // // Drone model script
    // const firingTime = 1200, MAXSPEED = 3.900;

    /**
     * Drone class with control method.
     */
    export default class Drone extends Sprite {
        constructor(opts) {
            super(opts);
            this.life = Const.DroneParam.LIFE;
            this.bullets = [];
            this.firing = false;
            this.bulletNum = 2;
            this.icon = Const.Images.Plane;
            this.manual = false;
        }

        /**
         * maintask start interval to update its status.
         */
        updateStatus () {
            // make sure Sprite in world..
            let alY = Math.cos(this.direction*Math.PI/180) * this.speed * 0.001,
                lat = this.lat + alY;
            if (lat > 84 || lat < -84) {
                alY = -alY;
                this.direction += 180;
                console.warn("latitude out of bbox, turn back..");
            }
            this.lon += Math.sin(this.direction*Math.PI/180) * this.speed * 0.001;
            this.lat += alY;
            // updateStatusView. toDO in maintask.js
        }

        accelerate() {
            if (this.speed < Const.DroneParam.MAXSPEED) {
                this.speed += 1;
                // this.updateStatus();
            }
        }

        fire () {

            if (this.bullets instanceof Array &&
                    this.bullets.length > 0 && !this.firing) {
                let that = this;
                setTimeout(() => {
                    that.firing = false;
                    // clearInterval(that.interval);
                }, Const.DroneParam.FIRINGTIME)
                this.firing = true;
            } else if (!this.firing) {
                for (let i = 0; i < this.bulletNum; i++) {
                    this.bullets.push(new Bullet(this));
                }
                // create Closure to handle the firing status change..
                let that = this;
                setTimeout(() => {
                    that.firing = false;
                    // clearInterval(that.interval);
                }, Const.DroneParam.FIRINGTIME)
                this.firing = true;
            } else {
                // this firing.. do nothing.
            }
        }
    }