Revisions
-
premasagar revised this gist
Sep 12, 2011 . No changes.There are no files selected for viewing
-
premasagar revised this gist
Sep 12, 2011 . 1 changed file with 17 additions and 15 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -76,7 +76,7 @@ jj.createCreature("ufo", function (creature) { function easeTowardTarget() { var creaturePos = creature.position(), targetPos = $.extend({}, target.position()), creatureSize = creature.size(), targetSize = target.size(), sqrDistance; @@ -139,41 +139,43 @@ jj.createCreature("ufo", function (creature) { case CHASE: if(easeTowardTarget()) { creaturePos = $.extend({}, creature.position()); captured[target.name()] = { func: target.position, // creature's original position method position: $.extend({}, target.position()) }; target.position = function(newPos) { return newPos ? this : captured[target.name()].func.call(this); }; $(beam).css("visibility", "visible"); creature.chat("Capturing " + target.name()); state = CAPTURE; } break; case CAPTURE: var newTargetTop = target.position().top - 3; creature.position({top: creature.position().top - 3}); captured[target.name()].func.call(target, {top: newTargetTop}); if (newTargetTop + target.size().height < 0) { creature.chat("Returning " + target.name()); state = RETURN; } break; case RETURN: var newTargetTop = target.position().top + 3; creature.position({top: creature.position().top + 3}); captured[target.name()].func.call(target, {top: newTargetTop}); if (newTargetTop >= captured[target.name()].position.top) { target.position = captured[target.name()].func; // return creature's original position method target = randomTarget(); $(beam).css("visibility", "hidden"); state = SEARCH; -
premasagar revised this gist
Sep 12, 2011 . 1 changed file with 0 additions and 2 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -185,6 +185,4 @@ jj.createCreature("ufo", function (creature) { ///// reset(); }); -
premasagar revised this gist
Sep 12, 2011 . 1 changed file with 4 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -26,7 +26,6 @@ jj.createCreature("ufo", function (creature) { left: jj.center().left - 64 }); ///// // DOM @@ -47,9 +46,7 @@ jj.createCreature("ufo", function (creature) { .attr("src", "http://jimpurbrick.com/media/ufo.png") .appendTo($(creature.el)); ///// function randomTarget() { var x = Math.random() * worldSize.width, @@ -118,10 +115,8 @@ jj.createCreature("ufo", function (creature) { return sqrDistance < (20 * 20); }; ///// // EVENT BINDINGS creature.bind("see", function(other) { if (state === SEARCH && ! captured[other.name()]) { @@ -186,6 +181,10 @@ jj.createCreature("ufo", function (creature) { break; } }); ///// reset(); jj.fps = 1; }); -
premasagar revised this gist
Sep 12, 2011 . 1 changed file with 0 additions and 3 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -101,13 +101,10 @@ jj.createCreature("ufo", function (creature) { }; // Update creature position. creature.position({ left: creaturePos.left + update.x, top: creaturePos.top + update.y }); // Increase fraction of delta used next update. positionFactor = Math.min(positionFactor + 0.005, 1.0); -
premasagar revised this gist
Sep 12, 2011 . 1 changed file with 174 additions and 141 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,50 +1,60 @@ jj.createCreature("ufo", function (creature) { "use strict"; var captured = {}, positionFactor = 0.005, $ = jj.jQuery, SEARCH = 1, CHASE = 2, CAPTURE = 3, RETURN = 4, state = SEARCH, worldSize = jj.size(), beam, target; creature .data({ sight: 200 }) .size({ width: 128, height: 250 }) .position({ top: 128, left: jj.center().left - 64 }); ///// // DOM beam = $(document.createElementNS("http://www.w3.org/2000/svg", "path")) .attr("d", "M64 50 L0 250 L128 250 Z") .attr("fill", "lime") .attr("opacity", "0.5") .css("visibility", "hidden"); $(document.createElementNS("http://www.w3.org/2000/svg", "svg")) .css("position", "absolute") .css("left", "0") .css("top", "0") .append(beam) .appendTo($(creature.el)); $(document.createElement("img")) .attr("src", "http://jimpurbrick.com/media/ufo.png") .appendTo($(creature.el)); ///// function randomTarget() { var x = Math.random() * worldSize.width, y = Math.random() * worldSize.height; return { position: function() { return { @@ -59,103 +69,126 @@ jj.createCreature('ufo', function (creature) { }; } }; }; function reset() { target = randomTarget(); captured = {}; state = SEARCH; } function easeTowardTarget() { var creaturePos = creature.position(), targetPos = target.position(), creatureSize = creature.size(), targetSize = target.size(), sqrDistance; // Aim to get middle of target in to middle of tractor beam. targetPos.left += (targetSize.width / 2) - (creatureSize.width / 2); targetPos.top -= 200; // Calculate delta between target and creature. var delta = { x: targetPos.left - creaturePos.left, y: targetPos.top - creaturePos.top }; // Calculate update for this frame. var update = { x: delta.x * positionFactor, y: delta.y * positionFactor }; // Update creature position. console.log(1, JSON.stringify(creature.position())); //debugger; creature.position({ left: creaturePos.left + update.x, top: creaturePos.top + update.y }); console.log(2, JSON.stringify(creature.position())); // Increase fraction of delta used next update. positionFactor = Math.min(positionFactor + 0.005, 1.0); // Recalculate remaining delta based on this update. delta.x -= update.x; delta.y -= update.y; // Work out if creature is "close enough" to target. sqrDistance = (delta.x * delta.x) + (delta.y * delta.y); return sqrDistance < (20 * 20); }; ///// // EVENT BINDINGS creature.bind("see", function(other) { if (state === SEARCH && ! captured[other.name()]) { state = CHASE; target = other; } }); jj.bind("midnight", reset); jj.bind("tick", function(frame) { var creaturePos; switch(state) { case SEARCH: if(easeTowardTarget()) { target = randomTarget(); } break; case CHASE: if(easeTowardTarget()) { captured[target.name()] = { func: target.position, position: target.position() }; target.position = function() { return $.extend(this.el.offset(), { zIndex: this.el.css('z-index') || 0 }); }; $(beam).css("visibility", "visible"); state = CAPTURE; } break; case CAPTURE: var newTargetTop = target.position() - 3; creature.position({top: creature.position().top - 3}); target.position({top: newTargetTop}); if (newTargetTop + target.size().height < 0) { state = RETURN; } break; case RETURN: var newTargetTop = target.position() + 3; creature.position({top: creature.position().top + 3}); target.position({top: newTargetTop}); if (newTargetTop >= captured[target.name()].position().top) { target.position = captured[target.name()].func; target = randomTarget(); $(beam).css("visibility", "hidden"); state = SEARCH; } break; } }); reset(); }); -
jimpurbrick revised this gist
Sep 11, 2011 . 1 changed file with 30 additions and 7 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -71,16 +71,39 @@ jj.createCreature('ufo', function (creature) { function easeTowardTarget() { var creaturePos = creature.position(); var targetPos = target.position(); var creatureSize = creature.size(); var targetSize = target.size(); // Aim to get middle of target in to middle of tractor beam. targetPos.left += (targetSize.width / 2) - (creatureSize.width / 2); targetPos.top -= 200; // Calculate delta between target and creature. var delta = { x: targetPos.left - creaturePos.left, y: targetPos.top - creaturePos.top }; // Calculate update for this frame. var update = { x: delta.x * positionFactor, y: delta.y * positionFactor }; // Update creature position. creature.position({left: (creaturePos.left + update.x), top: (creaturePos.top + update.y)}); // Increase fraction of delta used next update. positionFactor = Math.min(positionFactor + 0.005, 1.0); // Recalculate remaining delta based on this update. delta.x -= update.x; delta.y -= update.y; // Work out if creature is "close enough" to target. var sqrDistance = (delta.x * delta.x) + (delta.y * delta.y); return sqrDistance < (20 * 20); }; -
jimpurbrick revised this gist
Sep 9, 2011 . 1 changed file with 20 additions and 13 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -6,11 +6,11 @@ jj.createCreature('ufo', function (creature) { CHASE = 2, CAPTURE = 3, RETURN = 4, state = SEARCH, target = undefined; creature.data({ sight: 200 }); creature.size({width: 128, height: 250}); @@ -34,10 +34,9 @@ jj.createCreature('ufo', function (creature) { .appendTo($(creature.el)); creature.bind('see', function(other) { if (state === SEARCH && ! captured[other.name()]) { state = CHASE; target = other; } }); @@ -62,13 +61,18 @@ jj.createCreature('ufo', function (creature) { }; }; function reset() { target = randomTarget(); captured = {}; state = SEARCH; } reset(); function easeTowardTarget() { var left = creature.position().left; var top = creature.position().top; var delta = { x: target.position().left + (target.size().width / 2) - creature.position().left - (creature.size().width / 2), y: target.position().top - creature.position().top - 200 @@ -82,15 +86,11 @@ jj.createCreature('ufo', function (creature) { }; jj.bind('tick', function(frame) { switch(state) { case SEARCH: if(easeTowardTarget()) { target = randomTarget(); } break; case CHASE: @@ -121,11 +121,18 @@ jj.createCreature('ufo', function (creature) { target.el.css({top: '+=3px', left: '+=0px'}); if (target.position().top >= captured[target.name()].position.top) { target.position = captured[target.name()].func; target = randomTarget(); $(beam).css("visibility", "hidden"); state = SEARCH; } break; } }); jj.bind('midnight', function() { reset(); }); }); -
jimpurbrick created this gist
Sep 9, 2011 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,131 @@ jj.createCreature('ufo', function (creature) { var captured = {}, positionFactor = 0.005, $ = jj.jQuery, SEARCH = 1, CHASE = 2, CAPTURE = 3, RETURN = 4, state = SEARCH; creature.data({ sight: 200, target: undefined }); creature.size({width: 128, height: 250}); creature.position({top: 128, left: jj.center().left - 64}); var beam = $(document.createElementNS("http://www.w3.org/2000/svg", "path")) .attr("d", "M64 50 L0 250 L128 250 Z") .attr("fill", "lime") .attr("opacity", "0.5") .css("visibility", "hidden"); $(document.createElementNS("http://www.w3.org/2000/svg", "svg")) .css("position", "absolute") .css("left", "0") .css("top", "0") .append(beam) .appendTo($(creature.el)); $(document.createElement("img")) .attr("src", "http://jimpurbrick.com/media/ufo.png") .appendTo($(creature.el)); creature.bind('see', function(other) { var target = creature.data().target; if (state === SEARCH && ! captured[other.name()]) { state = CHASE; creature.data().target = other; } }); function randomTarget() { positionFactor = 0.005; var x = Math.random() * jj.size().width; var y = Math.random() * jj.size().height; return { position: function() { return { top: y, left: x }; }, size: function() { return { width: 0, height: 0 }; } }; }; creature.data().target = randomTarget(); function easeTowardTarget() { var left = creature.position().left; var top = creature.position().top; var target = creature.data().target; var delta = { x: target.position().left + (target.size().width / 2) - creature.position().left - (creature.size().width / 2), y: target.position().top - creature.position().top - 200 }; creature.position({left: left + (delta.x * positionFactor), top: top + (delta.y * positionFactor)}); positionFactor += 0.005; var sqrDistance = (delta.x * delta.x) + (delta.y * delta.y); return sqrDistance < (20 * 20); }; jj.bind('tick', function(frame) { var target = creature.data().target; var left = creature.position().left; var top = creature.position().top; switch(state) { case SEARCH: if(easeTowardTarget()) { creature.data().target = randomTarget(); } break; case CHASE: if(easeTowardTarget()) { captured[target.name()] = { func: target.position, position: target.position() }; target.position = function() { return $.extend(this.el.offset(), { zIndex: this.el.css('z-index') || 0 }); }; $(beam).css("visibility", "visible"); state = CAPTURE; } break; case CAPTURE: creature.position({top: '-=3px', left: '+=0px'}); target.el.css({top: '-=3px', left: '+=0px'}); if (target.position().top + target.size().height < 0) { state = RETURN; } break; case RETURN: creature.position({top: '+=3px', left: '+=0px'}); target.el.css({top: '+=3px', left: '+=0px'}); if (target.position().top >= captured[target.name()].position.top) { target.position = captured[target.name()].func; creature.data().target = randomTarget(); $(beam).css("visibility", "hidden"); state = SEARCH; } break; } }); });