function Ban2::Player2BananaSpawn() { $fly_speed2 = 0; $prev_UVX2 = 0; $prev_UVY2 = 0; function Ban2::onMouseDown(%this, %modifier, %worldPosition, %clicks) { %this.setTimerOn(100); } function Ban2::onMouseUp(%this) { %this.setTimerOff(); while ($firecount > 0) { if ($duration2 > 40) $duration2 = 40; //store various variables, setting speed and calculating flying direction $fly_speed2 = ($duration2 * $duration2 / 12) + 20; %fly_dir_x = Player2Image.getPositionX() - myBan2.getPositionX(); %fly_dir_y = Player2Image.getPositionY() - myBan2.getPositionY(); %fly_v_mag = mSqrt((%fly_dir_x * %fly_dir_x) + (%fly_dir_y * %fly_dir_y)); %fly_unitVX = %fly_dir_x / %fly_v_mag; %fly_unitVY = %fly_dir_y / %fly_v_mag; %this.setLinearVelocityX(%fly_unitVX * $fly_speed2); //to set the bombanana speed %this.setLinearVelocityY(%fly_unitVY * $fly_speed2); $prev_UVX2 = %fly_unitVX; $prev_UVY2 = %fly_unitVY; for(%homed = 1 ; %homed < 30 ; %homed++) //set homing every 0.333 sec { schedule( (333 * %homed) , 0 , Homing2, %this); } schedule(10000, 0, timeUp2, %this); //fuse of the bombanana $firecount -= 1; $presseddur2 = $duration2; $duration2 = 0; } } function Homing2(%this) { %fly_dir_x = Player2Image.getPositionX() - myBan2.getPositionX(); //get new vector to target %fly_dir_y = Player2Image.getPositionY() - myBan2.getPositionY(); %fly_temp_mag = mSqrt((%fly_dir_x * %fly_dir_x) + (%fly_dir_y * %fly_dir_y)); %fly_temp_unitVX = %fly_dir_x / %fly_temp_mag; %fly_temp_unitVY = %fly_dir_y / %fly_temp_mag; %fly_actual_vx = %fly_temp_unitVX + ($prev_UVX2 / 1.5); //homing is a function of new target location and previous missile vector %fly_actual_vy = %fly_temp_unitVY + ($prev_UVY2 / 1.5); %fly_v_mag = mSqrt((%fly_actual_vx * %fly_actual_vx) + (%fly_actual_vy * %fly_actual_vy)); %fly_unitVX = %fly_actual_vx / %fly_v_mag; %fly_unitVY = %fly_actual_vy / %fly_v_mag; %this.setLinearVelocityX(%fly_unitVX * $fly_speed2); //to set the bombanana speed %this.setLinearVelocityY(%fly_unitVY * $fly_speed2); } function timeUp2(%this) { myBan2.explode(); } function Ban2::OnTimer(%this) { $duration2 += 2; $firecount = 1; } function Ban2::onCollision(%srcObj, %dstObj, %srcRef, %dstRef, %time, %normal, %contactCount, %contacts) { %srcObj.explode(); } function Ban2::explode(%this) { %this.safeDelete(); %this.spawn(); } function Ban2::spawn(%this) { %tempBanana1 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana1.addToScene(scenegraph); %tempBanana1.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana1.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana1.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana1.moveTo((getWord(myBan2.getLinkPoint(1), 0)-16), (getWord(myBan2.getLinkPoint(1), 1)+15), %rnd, true, true, true, 0); //////////// %tempBanana2 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana2.addToScene(scenegraph); %tempBanana2.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana2.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana2.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana2.moveTo((getWord(myBan2.getLinkPoint(1), 0)-16), (getWord(myBan2.getLinkPoint(1), 1)-15), %rnd, true, true, true, 0); //////////// %tempBanana3 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana3.addToScene(scenegraph); %tempBanana3.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana3.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana3.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana3.moveTo((getWord(myBan2.getLinkPoint(1), 0)+16), (getWord(myBan2.getLinkPoint(1), 1)+15), %rnd, true, true, true, 0); //////////// %tempBanana4 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana4.addToScene(scenegraph); %tempBanana4.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana4.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana4.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana4.moveTo((getWord(myBan2.getLinkPoint(1), 0)+16), (getWord(myBan2.getLinkPoint(1), 1)-15), %rnd, true, true, true, 0); ////////////////// %tempBanana5 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana5.addToScene(scenegraph); %tempBanana5.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana5.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana5.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana5.moveTo((getWord(myBan2.getLinkPoint(1), 0)), (getWord(myBan2.getLinkPoint(1), 1)+20), %rnd, true, true, true, 0); ///////////////// %tempBanana6 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana6.addToScene(scenegraph); %tempBanana6.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana6.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana6.setSize(6.0015,6.0015); %explosion6 = new t2dParticleEffect() { sceneGraph = %this.scenegraph; }; %explosion6.loadEffect("~/data/particles/big_explosion.eff"); %explosion6.setEffectLifeMode("KILL", 1); %explosion6.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %explosion6.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %explosion6.playEffect(); %tempBanana6.safeDelete(); /////////////////// %tempBanana7 = new t2dAnimatedSprite() { animationName="spawnSmallAnimation"; scenegraph = %this.scenegraph; class = Ban2; layer=2; }; %tempBanana7.addToScene(scenegraph); %tempBanana7.setPositionY(getWord(myBan2.getLinkPoint(1), 1)); %tempBanana7.setPositionX(getWord(myBan2.getLinkPoint(1), 0)); %tempBanana7.setSize(6.0015,6.0015); %rnd = getRandom(15,35); %tempBanana7.moveTo((getWord(myBan2.getLinkPoint(1), 0)), (getWord(myBan2.getLinkPoint(1), 1)-20), %rnd, true, true, true, 0); } } function ban2::Player2BananaRemove(%this) { %this.safeDelete(); //do self-destruct the banana onPositionTarget(%this); //effect of self-destruct } function ban2::onPositionTarget(%this) { %explosion1 = new t2dParticleEffect() { sceneGraph = %this.scenegraph; }; %explosion1.loadEffect("~/data/particles/big_explosion.eff"); %explosion1.setEffectLifeMode("KILL", 1); %explosion1.setPosition(%this.getPosition()); %explosion1.playEffect(); %this.safeDelete(); alxPlay(BombananaExplosion); }