package game { import Box2D.Collision.*; import Box2D.Collision.Shapes.*; import Box2D.Common.*; import Box2D.Common.Math.*; import Box2D.Dynamics.*; import Box2D.Dynamics.Contacts.*; import Box2D.Dynamics.Joints.*; import game.actors.PlayerActor; import events.GameEvent; import flash.display.DisplayObject; import flash.utils.getQualifiedClassName; public class GameContactListener extends b2ContactListener { private var lfp_game : LFPGame; public function GameContactListener( _game : LFPGame ) { lfp_game = _game; } override public function PreSolve( contact:b2Contact, oldManifold:b2Manifold):void { var fixtureA : b2Fixture = contact.GetFixtureA(); var fixtureB : b2Fixture = contact.GetFixtureB(); // // goal contact left... // if ( fixtureA == GameModel.instance.ball_fixture && fixtureB == GameModel.instance.left_goal_fixture ) { // si pasa la bola fuera del campo... if( fixtureA.GetBody().GetPosition().x * GameModel.WORLD_SCALE < 0 ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_GOAL_LEFT ) ); } contact.SetEnabled( false ); } else if ( fixtureA == GameModel.instance.left_goal_fixture && fixtureB == GameModel.instance.ball_fixture ) { // si pasa la bola fuera del campo... if( fixtureB.GetBody().GetPosition().x * GameModel.WORLD_SCALE < 0 ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_GOAL_LEFT ) ); } contact.SetEnabled( false ); } // // goal contact right... // if ( fixtureA == GameModel.instance.ball_fixture && fixtureB == GameModel.instance.right_goal_fixture ) { // si pasa la bola fuera del campo... if( fixtureA.GetBody().GetPosition().x * GameModel.WORLD_SCALE > GameModel.FIELD_WIDTH ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_GOAL_RIGHT ) ); } contact.SetEnabled( false ); } else if ( fixtureA == GameModel.instance.right_goal_fixture && fixtureB == GameModel.instance.ball_fixture ) { if( fixtureB.GetBody().GetPosition().x * GameModel.WORLD_SCALE > GameModel.FIELD_WIDTH ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_GOAL_RIGHT ) ); } contact.SetEnabled( false ); } //var position:b2Vec2 = test.m_character.GetBody().GetPosition(); //if (position.y > test.m_top) // contact.SetEnabled(false); } override public function BeginContact(contact:b2Contact):void { var fixtureA : b2Fixture = contact.GetFixtureA(); var fixtureB : b2Fixture = contact.GetFixtureB(); // // contact with ball // if( fixtureA == GameModel.instance.ball_fixture && fixtureB.GetUserData() is PlayerActor ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_BALL_CONTACT ) ); } else if( fixtureB == GameModel.instance.ball_fixture && fixtureA.GetUserData() is PlayerActor ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_BALL_CONTACT ) ); } // // contact between different players... // if( fixtureA.GetUserData() is PlayerActor && fixtureB.GetUserData() is PlayerActor ) { if( getQualifiedClassName( PlayerActor( fixtureA.GetUserData() ).graphic ) != getQualifiedClassName( PlayerActor( fixtureB.GetUserData() ).graphic ) ) { lfp_game.dispatchEvent( new GameEvent( GameEvent.ON_PLAYERS_CONTACT ) ); } } } } }