(function() { "use strict"; var FlockSystem = function() { this.initialize(); } var p = FlockSystem.prototype = new creatine.System(); p.initialize = function() { } p.process = function(boids, dog, wolfs, fdelta) { // console.log(fdelta) for (var i=0; i 0) flock.timeToForgetEnemy -= fdelta; if (flock.timeToForgetDog > 0) flock.timeToForgetDog -= fdelta; this._changeStateIfNeeded(b, flock); var nearBoids = this._getNearestNeighbors(b, boids); var rules = [ this._centering(b, nearBoids), this._avoid(b, nearBoids), this._velocity(b, nearBoids), this._runfromdog(b, dog), this._runfromwolf(b, wolfs), this._avoidSoftBlocks(b), this._runeffect(b), ] var vX = 0; var vY = 0; for (var j=0; j SHEEP_MAX_VELOCITY) { flock.velocityX = (flock.velocityX/norm) * SHEEP_MAX_VELOCITY flock.velocityY = (flock.velocityY/norm) * SHEEP_MAX_VELOCITY } } } p._changeStateIfNeeded = function(b, flock) { var tx = toCoordX(b.display.x); var ty = toCoordY(b.display.y); var goal = registry.map.getLayerByName('area_goal'); if (getTile(goal, tx, ty)) { flock.state = FLOCK_STATE_GOAL; } else if (flock.timeToForgetEnemy > 0) { if (flock.state != FLOCK_STATE_SCARE) { if (Math.random() < SHEEP_SOUND_CHANCE_ON_SCARE) { jukebox.playSheep(); } } flock.state = FLOCK_STATE_SCARE; } else if (flock.timeToForgetDog > 0) { flock.state = FLOCK_STATE_WALK; } else { flock.state = FLOCK_STATE_IDLE; } // console.log(flock.state, tx, ty, getTile(goal, tx, ty)); } p._getNearestNeighbors = function(b, boids) { var nearest = []; for (var i=0; i