| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2013 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- function LeapToy::createBreakoutLevel( %this )
- {
- // Create background.
- %this.createBackground();
-
- // Create the ground.
- %this.createGround();
-
- // Create the breakable bricks
- %this.createBricks();
-
- %this.createPaddle();
-
- %this.createBreakOutBall();
-
- // Se the gravity.
- SandboxScene.setGravity( 0, 0);
-
- // Set the manipulation mode.
- Sandbox.useManipulation( off );
- // Swap action maps
- GestureMap.pop();
- FingerMap.pop();
- BreakoutMap.push();
-
- // Create the help text scene
- %helpText = new SimSet();
- %helpText.add(new ScriptObject() { Text = "Roll your hand back and forth to control the paddle"; });
- %helpText.add(new ScriptObject() { Text = " "; });
- %helpText.add(new ScriptObject() { Text = "When a block is hit twice, it will be destroyed"; });
- %helpText.add(new ScriptObject() { Text = " "; });
- %helpText.add(new ScriptObject() { Text = "Press H to return to the demo."; });
- %this.createHelpTextScene(%helpText);
- %helpText.delete();
- }
- //-----------------------------------------------------------------------------
- function LeapToy::createBricks( %this )
- {
- // Fetch the block count.
- %brickCount = LeapToy.BrickRows;
- %brickColumsn = LeapToy.BrickColumns;
- // Sanity!
- if ( %brickCount < 1 )
- {
- echo( "Cannot have a brick count count less than one." );
- return;
- }
- // Set the block size.
- %brickSize = LeapToy.BrickSize;
- // Calculate a block building position.
- %posx = %brickCount * %brickSize._0 * -1;
- %posy = 3 + (%brickSize._1 * 0.5) + 3;
- // Build the stack of blocks.
- for( %stack = 0; %stack < %brickCount; %stack++ )
- {
- // Calculate the stack position.
- %stackIndexCount = %brickCount;
-
- %stackX = %posX + ( %stack * %brickSize._0 );
- %stackY = %posY + ( %stack * %brickSize._1 );
- // Build the stack.
- for ( %stackIndex = 0; %stackIndex < LeapToy.BrickColumns; %stackIndex++ )
- {
- // Calculate the block position.
- %brickX = (%stackIndex*%brickSize._0)+%posx;
- %brickY = %stackY;
- %brickFrames = "0 2 4 6 8 10";
- %randomNumber = getRandom(0, 5);
- %frame = getWord(%brickFrames, %randomNumber);
-
- // Create the sprite.
- %obj = new Sprite()
- {
- class = "Brick";
- };
-
- %obj.setPosition( %brickX, %brickY );
- %obj.setSize( %brickSize );
- %obj.setBodyType("Kinematic");
- %obj.setImage( "LeapToy:objectsBricks", %frame );
- %obj.setDefaultFriction( 1.0 );
- %obj.createPolygonBoxCollisionShape( %brickSize );
- %obj.CollisionCallback = true;
-
- %takesDamage = %this.TakesDamageBehavior.createInstance();
- %takesDamage.initialize(20, 100, 10, 0, "", "LeapToy:blockFadeParticle", %frame);
-
- %obj.addBehavior(%takesDamage);
-
- %swapImage = %this.SwapImageBehavior.createInstance();
- %swapImage.initialize("LeapToy:objectsBricks", %frame+1);
- %obj.addBehavior(%swapImage);
-
- // Add to the scene.
- SandboxScene.add( %obj );
- }
- }
- }
- //-----------------------------------------------------------------------------
- function LeapToy::createPaddle(%this)
- {
- // Create the player paddle
- %obj = new Sprite();
-
- %obj.setPosition( 0, -8);
- %obj.setSize( 5, 2.5 );
- %obj.setImage( "LeapToy:playerUfo");
- %obj.setDefaultFriction( 0 );
- %obj.createPolygonBoxCollisionShape( 4.8, 2.3);
- %obj.CollisionCallback = true;
- %obj.setFixedAngle( true );
- %this.paddle = %obj;
-
- SandboxScene.add(%obj);
- }
- //-----------------------------------------------------------------------------
- function LeapToy::createBreakoutBall(%this)
- {
- // Create the ball.
- %ball = new Sprite()
- {
- class = "Ball";
- };
-
- %ball.Position = "5 5";
- %ball.Size = 2;
- %ball.Image = "LeapToy:widgetBall";
- %ball.setDefaultDensity( 1 );
- %ball.setDefaultRestitution( 1.0 );
- %ball.setDefaultFriction(0);
- %ball.createCircleCollisionShape( 0.8 );
- %ball.CollisionCallback = true;
- %ball.setLinearVelocity(-5, 20);
- %ball.setPosition(-5, -5);
-
- %dealsDamage = %this.DealsDamageBehavior.createInstance();
- %dealsDamage.initialize(10, false, "");
- %ball.addBehavior(%dealsDamage);
-
- %this.breakoutBall = %ball;
-
- // Add to the scene.
- SandboxScene.add( %ball );
- }
- //-----------------------------------------------------------------------------
- function Ball::onCollision(%this, %object, %collisionDetails)
- {
- %xVelocity = %this.getLinearVelocity()._0;
- %yVelocity = %this.getLinearVelocity()._1;
-
- %newXVelocity = mClamp(%xVelocity, (LeapToy.maxBallSpeed*-1), LeapToy.maxBallSpeed);
- %newYVelocity = mClamp(%yVelocity, (LeapToy.maxBallSpeed*-1), LeapToy.maxBallSpeed);
-
- %this.setLinearVelocity(%newXVelocity, %newYVelocity);
- }
- //-----------------------------------------------------------------------------
- function LeapToy::movePaddle(%this, %speed)
- {
- %this.paddle.setLinearVelocity(%speed, 0);
- }
|