123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- //-----------------------------------------------------------------------------
- // 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 AmbientForceControllerToy::create( %this )
- {
- // Set the sandbox drag mode availability.
- Sandbox.allowManipulation( pan );
- Sandbox.allowManipulation( pull );
-
- // Set the manipulation mode.
- Sandbox.useManipulation( pull );
-
- // Configure settings.
- AmbientForceControllerToy.ForceAngle = 45;
- AmbientForceControllerToy.ForceMagnitude = 50;
- AmbientForceControllerToy.DebrisCount = 100;
- // Add options.
- addNumericOption("Force Angle", -359, 359, 1, "setForceAngle", AmbientForceControllerToy.ForceAngle, false, "The angle of the ambient force.");
- addNumericOption("Force Magnitude", 0, 1000, 10, "setForceMagnitude", AmbientForceControllerToy.ForceMagnitude, false, "The magnitude of the ambient force.");
- addNumericOption("Debris Count", 10, 1000, 10, "setDebrisCount", AmbientForceControllerToy.DebrisCount, true, "The amount of debris affected by the ambient force controller.");
-
- // Reset the toy.
- AmbientForceControllerToy.reset();
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::destroy( %this )
- {
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::reset( %this )
- {
- // Clear the scene.
- SandboxScene.clear();
-
- // Create background.
- %this.createBackground();
-
- // Create ambient force controller.
- %this.createAmbientForceController();
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::createBackground( %this )
- {
- // Create the sprite.
- %object = new Sprite();
-
- // Set the sprite as "static" so it is not affected by gravity.
- %object.setBodyType( static );
-
- // Always try to configure a scene-object prior to adding it to a scene for best performance.
- // Set the position.
- %object.Position = "0 0";
- // Set the size.
- %object.Size = "100 75";
-
- // Set to the furthest background layer.
- %object.SceneLayer = 31;
-
- // Set the scroller to use an animation!
- %object.Image = "ToyAssets:highlightBackground";
-
- // Set the blend color.
- %object.BlendColor = DarkGray;
-
- // Create border collisions.
- %object.createEdgeCollisionShape( -50, -37.5, -50, 37.5 );
- %object.createEdgeCollisionShape( 50, -37.5, 50, 37.5 );
- %object.createEdgeCollisionShape( -50, 37.5, 50, 37.5 );
- %object.createEdgeCollisionShape( -50, -34.5, 50, -34.5 );
-
-
- // Add the sprite to the scene.
- SandboxScene.add( %object );
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::createSprite( %this, %asset, %position, %size, %angle, %blendColor )
- {
- // Create the sprite.
- %object = new Sprite();
-
- // Set the position.
- %object.Position = %position;
- // Set the size.
- %object.Size = %size;
-
- // Set the angle.
- %object.Angle = %angle;
-
- // Set the scroller to use an animation!
- %object.Image = %asset;
-
- // Set the blend color.
- %object.BlendColor = %blendColor $= "" ? White : %blendColor;
-
- // Add the sprite to the scene.
- SandboxScene.add( %object );
-
- return %object;
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::createAmbientForceController( %this )
- {
- // Create a new controller.
- %controller = new AmbientForceController();
-
- // Set scene controller.
- AmbientForceControllerToy.SceneController = %controller;
- // Update the ambient force controller.
- %this.updateAmbientForceController();
-
- // Add the controller.
- SandboxScene.Controllers.add( %controller );
-
- // Create some sprites used by the controller.
- for( %n = 0; %n < AmbientForceControllerToy.DebrisCount; %n++ )
- {
- %sizeX = getRandom(1,4);
- %sizeY = getRandom(1,4);
- %size = %sizeX SPC %sizeY;
-
- // Create some sprites.
- %sprite = %this.createSprite( "ToyAssets:tiles", getRandom(-40,40) SPC getRandom(-20,20), %size, getRandom(0,360), White );
- %sprite.Frame = getRandom(0,15);
- %sprite.createPolygonBoxCollisionShape( %sizeX, %sizeY );
- %sprite.setAngularVelocity(getRandom(-180,180));
-
- // Add to the controller.
- %controller.add( %sprite );
- }
-
- // Create some sprites NOT used by the controller.
- for( %n = 0; %n < 10; %n++ )
- {
- %size = getRandom(3,4);
-
- // Create some sprites.
- %sprite = %this.createSprite( "ToyAssets:football", getRandom(-40,40) SPC getRandom(-20,20), %size, getRandom(0,360), White );
- %sprite.createCircleCollisionShape( %size * 0.5 );
- %sprite.setAngularVelocity(getRandom(-180,180));
- }
-
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::updateAmbientForceController( %this )
- {
- // Calculate the force.
- AmbientForceControllerToy.SceneController.Force = Vector2Direction( %this.ForceAngle, %this.ForceMagnitude );
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::setForceAngle(%this, %value)
- {
- %this.ForceAngle = %value;
-
- // Update the ambient force.
- %this.updateAmbientForceController();
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::setForceMagnitude(%this, %value)
- {
- %this.ForceMagnitude = %value;
-
- // Update the ambient force.
- %this.updateAmbientForceController();
- }
- //-----------------------------------------------------------------------------
- function AmbientForceControllerToy::setDebrisCount(%this, %value)
- {
- %this.DebrisCount = %value;
- }
|