コード例 #1
0
    void onGameStart(Nothing ignored) throws InterruptedException {
      System.out.println("Physics: on game start");
      if (world != null) world.dispose();
      world = new World(new Vector2(0, Constants.WORLD_GRAVITY), true);

      world.setContactListener(new HitTester((isOnGround) -> isPlayerOnFloor = isOnGround));

      _createPlayer();

      state = GameState.IN_GAME;
    }
コード例 #2
0
  public Play(GameStateManager gsm) {
    super(gsm);

    // Create box2d world and debugger and apply custom contact listener
    world = new World(new Vector2(0, -9.81f), true);
    cl = new MyContactListener();
    world.setContactListener(cl);
    b2dr = new Box2DDebugRenderer();

    // Creates player box2d object with foot sensor
    createPlayer();

    // Loads the tiled map
    loadTiles();

    // generates box2d platforms from the tiles in the given layer
    generatePlatforms("Collidables");

    // create coins
    createCoins();
  }
コード例 #3
0
ファイル: HW3.java プロジェクト: KnightPickles/CS328
  @Override
  public void create() {
    stop = win = false;

    debugRenderer = new Box2DDebugRenderer();
    Gdx.input.setInputProcessor(new PlayerInputProcessor(player));
    camera = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    cameraBak = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    batch = new SpriteBatch();
    atlas = new TextureAtlas("spacemangame.atlas");

    FreeTypeFontGenerator generator = new FreeTypeFontGenerator(new FileHandle("font.ttf"));
    FreeTypeFontGenerator.FreeTypeFontParameter parameter =
        new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 120;
    font = generator.generateFont(parameter); // font size 12 pixels
    generator.dispose();

    layout = new GlyphLayout();
    b2dWorld = new World(new Vector2(0, -0.8f), true);
    b2dWorld.setContactListener(new GameCollision());

    player = new Player(atlas, b2dWorld, -200, camera.viewportHeight / 2 - 30, 1, 10000);

    meter = new SimpleGameObject(atlas, "meter", -camera.viewportWidth / 2 + 45, -120);
    meter_fuel = new SimpleGameObject(atlas, "meter_fuel", -camera.viewportWidth / 2 + 52, -159);
    lives = new SimpleGameObject(atlas, "spaceman_jump1", -camera.viewportWidth / 2 + 20, 200);
    gameOver = new SimpleGameObject(atlas, "game_over", -80, -70);
    meter.sprite.scale(2);
    meter_fuel.sprite.scale(2);
    gameOver.sprite.scale(2);
    background = new Background(atlas, -120, -80);

    manager = new GameObjectManager(atlas, b2dWorld, player, camera);
    manager.loadGameFromFile("level.png");
  }
コード例 #4
0
 public void setContactListener(ContactListener listener) {
   world.setContactListener(listener);
 }
コード例 #5
0
  public void createPhysicsWorld() {

    xEngine = new ExplosionEngine();

    // create the debug renderer
    renderer = new Box2DDebugRenderer();

    // create the world
    world = new World(new Vector2(0, -3), true);

    bob.setBody(createPhysicsObject(bob.getBounds(), ModelType.PLAYER, -1).getBody());

    // Create our enemy's physical representations
    for (Map.Entry<Civilian, Integer> civilian : level.getEnemies().entrySet()) {
      civilian
          .getKey()
          .setFixture(
              createPhysicsObject(
                  civilian.getKey().getBounds(), ModelType.ENEMY, civilian.getValue()));
    }

    // Create our item's physical representations
    for (Map.Entry<Item, Integer> item : level.getItems().entrySet()) {
      item.getKey()
          .setFixture(
              createPhysicsObject(item.getKey().getBounds(), ModelType.ITEM, item.getValue()));
    }

    // Create our level out of blocks
    for (Block block : level.getBlocks()) {
      createBoxes(block.getBounds());
    }

    //	createDestruction();

    world.setContactListener(
        new ContactListener() {
          @Override
          public void beginContact(Contact contact) {

            // Get our UserData object, and check for contacts
            UserData dataA = (UserData) contact.getFixtureA().getUserData();
            UserData dataB = (UserData) contact.getFixtureA().getUserData();

            /** Used for determining if character can jump or not * */
            if (dataA.modelType == ModelType.FOOT_SENSOR) {
              if (dataA.parentId == -1) { // PlayerCharacter's foot
                bob.setNumFootContacts(1);
                bob.canJump(true);
              }
            }
            if (dataB.modelType == ModelType.FOOT_SENSOR) {
              if (dataB.parentId == -1) { // PlayerCharacter's foot
                bob.setNumFootContacts(1);
              }
            }

            if (dataA.modelType == ModelType.LEFT_SIDE_SENSOR) {
              if (dataA.parentId == -1) { // PlayerCharacter's foot
                bob.setNumLeftSideContacts(1);
                bob.canJump(true);
              }
            }
            if (dataB.modelType == ModelType.LEFT_SIDE_SENSOR) {
              if (dataB.parentId == -1) { // PlayerCharacter's foot
                bob.setNumLeftSideContacts(1);
              }
            }

            if (dataA.modelType == ModelType.RIGHT_SIDE_SENSOR) {
              if (dataA.parentId == -1) { // PlayerCharacter's foot
                bob.setNumRightSideContacts(1);
                bob.canJump(true);
              }
            }
            if (dataB.modelType == ModelType.RIGHT_SIDE_SENSOR) {
              if (dataB.parentId == -1) { // PlayerCharacter's foot
                bob.setNumRightSideContacts(1);
              }
            }

            /** Touching an item (used for picking up items) * */
            if (dataA.modelType == ModelType.PLAYER && dataB.modelType == ModelType.ITEM
                || dataB.modelType == ModelType.ITEM && dataA.modelType == ModelType.PLAYER) {

              MouseJointDef def = new MouseJointDef();
              def.bodyA = contact.getFixtureA().getBody();
              def.bodyB = contact.getFixtureB().getBody();
              dataA = (UserData) def.bodyA.getUserData();
              def.collideConnected = false;
              def.target.set(testPoint.x, testPoint.y);

              if (dataA.modelType == ModelType.PLAYER) {
                def.target.set(def.bodyA.getWorldCenter());
                def.maxForce = 1000.0f * def.bodyA.getMass();
              } else {
                def.target.set(def.bodyB.getWorldCenter());
                def.maxForce = 1000.0f * def.bodyB.getMass();
              }
              jointsToCreate.add(def);
            }
          }

          @Override
          public void endContact(Contact contact) {
            // Get our UserData object, and check for contacts
            UserData dataA = (UserData) contact.getFixtureA().getUserData();
            UserData dataB = (UserData) contact.getFixtureA().getUserData();

            /** Used for determining if character can jump or not * */
            if (dataA.modelType == ModelType.FOOT_SENSOR) {
              if (dataA.parentId == -1) { // PlayerCharacter's foot
                bob.setNumFootContacts(-1);
              }
            }
            if (dataB.modelType == ModelType.FOOT_SENSOR) {
              if (dataB.parentId == -1) { // PlayerCharacter's foot
                bob.setNumFootContacts(-1);
              }
            }
          }

          @Override
          public void preSolve(Contact contact, Manifold oldManifold) {}

          @Override
          public void postSolve(Contact contact, ContactImpulse impulse) {}
        });
  }
コード例 #6
0
  public void Create() {
    // set tilemap file name
    m_MapFileName = "map/test.tmx";

    // set up the tilemap
    m_TiledMap = new TmxMapLoader().load(m_MapFileName);
    m_TiledMapRenderer = new OrthogonalTiledMapRenderer(m_TiledMap, 1f);

    // set up the box2d physics
    m_PhysicsWorld = new com.badlogic.gdx.physics.box2d.World(new Vector2(0, 0), true);

    // attach contact listener to physics world
    m_PhysicsWorld.setContactListener(new GameContactListener(this));

    // set up box2dlights
    m_RayHandler = new RayHandler(m_PhysicsWorld);
    m_RayHandler.setAmbientLight(0.0f);

    // add tilemap collision boxes to physics world
    for (int i = 0; i < m_TiledMap.getLayers().getCount(); i++) {
      if (m_TiledMap.getLayers().get(i) instanceof TiledMapTileLayer) {
        TiledMapTileLayer layer = (TiledMapTileLayer) m_TiledMap.getLayers().get(i);
        for (int j = 0; j < layer.getWidth(); j++) {
          for (int k = 0; k < layer.getHeight(); k++) {
            Cell cell = layer.getCell(j, k);
            if (cell != null) {
              TiledMapTile tile = cell.getTile();
              if (tile != null) {
                MapProperties props = tile.getProperties();
                if (props.containsKey("blocked")) {
                  float worldX = j * 64 + 32;
                  float worldY = k * 64 + 32;
                  BodyDef bodyDef = new BodyDef();
                  bodyDef.type = BodyType.StaticBody;
                  bodyDef.position.set(new Vector2(worldX * WORLD_TO_BOX, worldY * WORLD_TO_BOX));

                  Body newBody = m_PhysicsWorld.createBody(bodyDef);

                  PolygonShape boxShape = new PolygonShape();
                  boxShape.setAsBox(32 * WORLD_TO_BOX, 32 * WORLD_TO_BOX);

                  // Create a fixture definition to apply our shape to
                  FixtureDef fixtureDef = new FixtureDef();
                  fixtureDef.shape = boxShape;

                  newBody.createFixture(fixtureDef);

                  boxShape.dispose();
                }

                if (props.containsKey("rotate")) {
                  // flip some random tiles to break pattern
                  if (k * j % 3 == 0) layer.getCell(j, k).setFlipVertically(true);
                  if (k * j % 2 == 0) layer.getCell(j, k).setFlipHorizontally(true);
                }
              }
            }
          }
        }
      }
    }

    // set up artemis entity system
    m_ArtemisWorld = new com.artemis.World();

    // add the passive systems
    m_SpineRenderSystem = new SpineRenderSystem(m_GameScreen);
    m_ArtemisWorld.setSystem(m_SpineRenderSystem, true);

    // add the systems
    m_ArtemisWorld.setSystem(new PlayerInputSystem(this));
    m_ArtemisWorld.setSystem(new CameraSystem(m_GameScreen.m_Camera));
    m_ArtemisWorld.setSystem(new PhysicsSystem());
    m_ArtemisWorld.setSystem(new LifecycleSystem(this));
    m_ArtemisWorld.setSystem(new SteeringSystem());

    // init the world
    m_ArtemisWorld.initialize();
    EntityHelper.LoadObjects(
        m_GameScreen, m_ArtemisWorld, m_TiledMap, m_PhysicsWorld, m_RayHandler);

    // add player to entity list
    m_PlayerEntity = new PlayerEntity();
    m_PlayerEntity.AddToWorld(this);
    checkpointPos = new Vector2(0, 0);
    checkpointPos.x = m_PlayerEntity.m_Entity.getComponent(PositionComponent.class).m_X;
    checkpointPos.y = m_PlayerEntity.m_Entity.getComponent(PositionComponent.class).m_Y;

    // hud items are special cases since they needs to draw on top of border
    m_VialOne = new SpineComponent("map/vial", 5, 0.75f, -25);
    m_VialTwo = new SpineComponent("map/vial", 5, 0.65f, -5);
    m_VialThree = new SpineComponent("map/vial", 5, 0.75f, -50);
    m_WatchSpine = new SpineComponent("map/watch", 4, 0.75f, 0);

    if (m_GameScreen.m_Settings.m_WatchFound) {
      ActivateWatch();
      BodyComponent bodyComponent = m_PlayerEntity.m_Entity.getComponent(BodyComponent.class);
      bodyComponent.m_Body.setTransform(621 * WORLD_TO_BOX, 5961 * WORLD_TO_BOX, 0);
    }
    if (m_GameScreen.m_Settings.m_WeaponFound) {
      ActivateSword();
      BodyComponent bodyComponent = m_PlayerEntity.m_Entity.getComponent(BodyComponent.class);
      bodyComponent.m_Body.setTransform(1965 * WORLD_TO_BOX, 4842 * WORLD_TO_BOX, 0);
    }
    if (m_GameScreen.m_Settings.m_WeaponLightFound) {
      ActivateSwordLight();
      BodyComponent bodyComponent = m_PlayerEntity.m_Entity.getComponent(BodyComponent.class);
      bodyComponent.m_Body.setTransform(6390 * WORLD_TO_BOX, 6462 * WORLD_TO_BOX, 0);
    }
  }
コード例 #7
0
  @Override
  public void create() {
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    bitmapFont = new BitmapFont(Gdx.files.internal("data/arial-15.fnt"), false);

    Gdx.input.setInputProcessor(this);

    mCamPos = new Vector3();
    mCurrentPos = new Vector3();

    camera = new OrthographicCamera(100, 100 * h / w);
    camera.position.set(50, 50, 0);
    camera.zoom = 1.8f;
    camera.update();

    textCam = new OrthographicCamera(Gdx.graphics.getWidth(), Gdx.graphics.getHeight());
    textCam.position.set(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 2, 0);
    textCam.zoom = 1;
    textCam.update();

    loader = new RubeSceneLoader();

    scene = loader.loadScene(Gdx.files.internal("data/palm.json"));

    debugRender = new Box2DDebugRenderer();

    batch = new SpriteBatch();
    polygonBatch = new PolygonSpriteBatch();

    textureMap = new HashMap<String, Texture>();
    textureRegionMap = new HashMap<Texture, TextureRegion>();

    createSpatialsFromRubeImages(scene);
    createPolySpatialsFromRubeFixtures(scene);

    mWorld = scene.getWorld();
    // configure simulation settings
    mVelocityIter = scene.velocityIterations;
    mPositionIter = scene.positionIterations;
    if (scene.stepsPerSecond != 0) {
      mSecondsPerStep = 1f / scene.stepsPerSecond;
    }
    mWorld.setContactListener(this);
    //
    // example of custom property handling
    //
    Array<Body> bodies = scene.getBodies();
    if ((bodies != null) && (bodies.size > 0)) {
      for (int i = 0; i < bodies.size; i++) {
        Body body = bodies.get(i);
        String gameInfo = (String) scene.getCustom(body, "GameInfo", null);
        if (gameInfo != null) {
          System.out.println("GameInfo custom property: " + gameInfo);
        }
      }
    }

    // Example of accessing data based on name
    System.out.println("body0 count: " + scene.getNamed(Body.class, "body0").size);
    // Note: the scene has two fixture9 names defined, but these are in turn subdivided into
    // multiple fixtures and thus appear several times...
    System.out.println("fixture9 count: " + scene.getNamed(Fixture.class, "fixture9").size);
    scene.printStats();

    //
    // validate the custom settings attached to world object..
    //
    boolean testBool = (Boolean) scene.getCustom(mWorld, "testCustomBool", false);
    int testInt = (Integer) scene.getCustom(mWorld, "testCustomInt", 0);
    float testFloat = (Float) scene.getCustom(mWorld, "testCustomFloat", 0);
    Color color = (Color) scene.getCustom(mWorld, "testCustomColor", null);
    Vector2 vec = (Vector2) scene.getCustom(mWorld, "testCustomVec2", null);
    String string = (String) scene.getCustom(mWorld, "testCustomString", null);

    if (testBool == false) {
      throw new GdxRuntimeException(
          "testCustomBool not read correctly! Expected: " + true + " Actual: " + testBool);
    }
    if (testInt != 8675309) {
      throw new GdxRuntimeException(
          "testCustomInt not read correctly! Expected: " + 8675309 + " Actual: " + testInt);
    }
    if (testFloat != 1.25f) {
      throw new GdxRuntimeException(
          "testCustomFloat not read correctly! Expected: " + 1.25f + " Actual: " + testFloat);
    }
    if (color == null) {
      throw new GdxRuntimeException("testCustomColor is reporting null!");
    }
    if ((color.r != 17f / 255)
        || (color.g != 29f / 255)
        || (color.b != 43f / 255)
        || (color.a != 61f / 255)) {
      throw new GdxRuntimeException(
          "testCustomColor not read correctly!  Expected: "
              + new Color(17f / 255, 29f / 255, 43f / 255, 61f / 255)
              + " Actual: "
              + color);
    }
    if (vec == null) {
      throw new GdxRuntimeException("testCustomVec2 is reporting null!");
    }
    if ((vec.x != 314159) || (vec.y != 21718)) {
      throw new GdxRuntimeException(
          "testCustomVec2 is not read correctly!  Expected: "
              + new Vector2(314159, 21718)
              + " Actual: "
              + vec);
    }
    if (string == null) {
      throw new GdxRuntimeException("testCustomString is reporting null!");
    }
    if (!string.equalsIgnoreCase("excelsior!")) {
      throw new GdxRuntimeException(
          "testCustomString is not read correctly!  Expected: Excelsior! Actual: " + string);
    }
    scene.clear(); // no longer need any scene references
  }
コード例 #8
0
  @Override
  public void create() {
    float w = Gdx.graphics.getWidth();
    float h = Gdx.graphics.getHeight();

    Gdx.input.setInputProcessor(this);

    mB2Controllers = new Array<B2Controller>();

    mCamPos = new Vector3();
    mCurrentPos = new Vector3();

    camera = new OrthographicCamera(100, 100 * h / w);
    camera.position.set(50, 50, 0);
    camera.zoom = 1.8f;
    camera.update();

    loader = new RubeSceneLoader();

    scene = loader.loadScene(Gdx.files.internal("data/palmcontrollers.json"));

    debugRender = new Box2DDebugRenderer();

    batch = new SpriteBatch();
    polygonBatch = new PolygonSpriteBatch();

    textureMap = new HashMap<String, Texture>();
    textureRegionMap = new HashMap<Texture, TextureRegion>();

    createSpatialsFromRubeImages(scene);
    createPolySpatialsFromRubeFixtures(scene);

    mWorld = scene.getWorld();
    // configure simulation settings
    mVelocityIter = scene.velocityIterations;
    mPositionIter = scene.positionIterations;
    if (scene.stepsPerSecond != 0) {
      mSecondsPerStep = 1f / scene.stepsPerSecond;
    }
    mWorld.setContactListener(this);

    //
    // example of custom property handling
    //
    Array<Body> bodies = scene.getBodies();
    if ((bodies != null) && (bodies.size > 0)) {
      for (int i = 0; i < bodies.size; i++) {
        Body body = bodies.get(i);
        String gameInfo = (String) scene.getCustom(body, "GameInfo", null);
        if (gameInfo != null) {
          System.out.println("GameInfo custom property: " + gameInfo);
        }
      }
    }

    // Instantiate any controllers that are in the scene
    Array<Fixture> fixtures = scene.getFixtures();
    if ((fixtures != null) && (fixtures.size > 0)) {
      for (int i = 0; i < fixtures.size; i++) {
        Fixture fixture = fixtures.get(i);
        int controllerType = (Integer) scene.getCustom(fixture, "ControllerType", 0);
        switch (controllerType) {
          case B2Controller.BUOYANCY_CONTROLLER:
            // only allow polygon buoyancy controllers for now..
            if (fixture.getShape().getType() == Shape.Type.Polygon) {
              float bodyHeight = fixture.getBody().getPosition().y;
              // B2BuoyancyController b2c = new B2BuoyancyController();

              // need to calculate the fluid surface height for the buoyancy controller
              PolygonShape shape = (PolygonShape) fixture.getShape();
              shape.getVertex(0, mTmp);
              float maxHeight =
                  mTmp.y + bodyHeight; // initialize the height, transforming to 'world'
              // coordinates

              // find the maxHeight
              for (int j = 1; j < shape.getVertexCount(); j++) {
                shape.getVertex(j, mTmp);
                maxHeight =
                    Math.max(maxHeight, mTmp.y + bodyHeight); // transform to world coordinates
              }
              B2BuoyancyController b2c =
                  new B2BuoyancyController(
                      B2BuoyancyController.DEFAULT_SURFACE_NORMAL, // assume up
                      (Vector2)
                          scene.getCustom(
                              fixture,
                              "ControllerVelocity",
                              B2BuoyancyController.DEFAULT_FLUID_VELOCITY),
                      mWorld.getGravity(),
                      maxHeight,
                      fixture.getDensity(),
                      (Float)
                          scene.getCustom(
                              fixture, "LinearDrag", B2BuoyancyController.DEFAULT_LINEAR_DRAG),
                      (Float)
                          scene.getCustom(
                              fixture, "AngularDrag", B2BuoyancyController.DEFAULT_ANGULAR_DRAG));
              fixture.setUserData(b2c); // reference back to the controller from the fixture (see
              // beginContact/endContact)
              mB2Controllers.add(b2c); // add it to the list so it can be stepped later
            }
            break;

          case B2Controller.GRAVITY_CONTROLLER:
            {
              B2GravityController b2c = new B2GravityController();
              b2c =
                  new B2GravityController(
                      (Vector2)
                          scene.getCustom(
                              fixture, "ControllerVelocity", B2GravityController.DEFAULT_GRAVITY));
              fixture.setUserData(b2c);
              mB2Controllers.add(b2c);
            }
            break;
        }
      }
    }
    scene.printStats();
    scene.clear(); // no longer need any scene references
  }
コード例 #9
0
 public void setContactListener(ContactListener listener) {
   gameWorldPhysics.setContactListener(listener);
 }
コード例 #10
0
ファイル: PhysicsWorld.java プロジェクト: Juginabi/ProjectGDX
  public PhysicsWorld(
      Vector2 gravityVector, boolean sleepingObjects, boolean enableDebugRendering) {
    world_ = new World(gravityVector, sleepingObjects);
    if (enableDebugRendering) {
      debugRenderer_ = new Box2DDebugRenderer();
      debugRenderingEnabled_ = true;
    }

    world_.setContactListener(
        new ContactListener() {
          @Override
          public void beginContact(Contact contact) {
            Fixture fixA = contact.getFixtureA();
            Fixture fixB = contact.getFixtureB();
            switch (fixA.getFilterData().categoryBits) {
              case SENSOR_NAVIGATION:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicMonster monster = (DynamicMonster) fixB.getBody().getUserData();
                  Vector2 newTarget = (Vector2) fixA.getUserData();
                  monster.setTarget(newTarget);
                }
                break;
              case SENSOR_GOAL:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicMonster monster = (DynamicMonster) fixB.getBody().getUserData();
                  monster.timeOfDeath = TimeUtils.millis();
                  monster.isAlive = false;
                }
                break;
              case ENTITY_ENEMY:
                DynamicMonster monster = (DynamicMonster) fixA.getBody().getUserData();
                if (fixB.getFilterData().categoryBits == SENSOR_NAVIGATION) {
                  Vector2 newTarget = (Vector2) fixB.getUserData();
                  monster.setTarget(newTarget);
                } else if (fixB.getFilterData().categoryBits == SENSOR_GOAL) {
                  monster.timeOfDeath = TimeUtils.millis();
                  monster.isAlive = false;
                } else if (fixB.getFilterData().categoryBits == ENTITY_DEFENDER_SPOTTING_SENSOR) {
                  DynamicDefender defender = (DynamicDefender) fixB.getBody().getUserData();
                  defender.EnemyEnteredSpotRange(fixA.getBody());
                } else if (fixB.getFilterData().categoryBits == ENTITY_DEFENDER_FIRE_SENSOR) {
                  DynamicDefender defender = (DynamicDefender) fixB.getBody().getUserData();
                  defender.EnemyEnteredFireRange(fixA.getBody());
                }
                break;
              case ENTITY_DEFENDER_SPOTTING_SENSOR:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicDefender defender = (DynamicDefender) fixA.getBody().getUserData();
                  defender.EnemyEnteredSpotRange(fixB.getBody());
                }
                break;
              case ENTITY_DEFENDER_FIRE_SENSOR:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicDefender defender = (DynamicDefender) fixA.getBody().getUserData();
                  defender.EnemyEnteredFireRange(fixB.getBody());
                }
            }
          }

          @Override
          public void endContact(Contact contact) {
            Fixture fixA = contact.getFixtureA();
            Fixture fixB = contact.getFixtureB();
            switch (fixA.getFilterData().categoryBits) {
              case SENSOR_NAVIGATION:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {}

                break;
              case SENSOR_GOAL:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {}

                break;
              case ENTITY_ENEMY:
                DynamicMonster monster = (DynamicMonster) fixA.getBody().getUserData();
                if (fixB.getFilterData().categoryBits == SENSOR_NAVIGATION) {

                } else if (fixB.getFilterData().categoryBits == SENSOR_GOAL) {

                } else if (fixB.getFilterData().categoryBits == ENTITY_DEFENDER_SPOTTING_SENSOR) {
                  DynamicDefender defender = (DynamicDefender) fixB.getBody().getUserData();
                  defender.EnemyExitedSpotRange(fixA.getBody());
                } else if (fixB.getFilterData().categoryBits == ENTITY_DEFENDER_FIRE_SENSOR) {
                  DynamicDefender defender = (DynamicDefender) fixB.getBody().getUserData();
                  defender.EnemyExitedFireRange(fixA.getBody());
                }
                break;
              case ENTITY_DEFENDER_SPOTTING_SENSOR:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicDefender defender = (DynamicDefender) fixA.getBody().getUserData();
                  defender.EnemyExitedSpotRange(fixB.getBody());
                }
              case ENTITY_DEFENDER_FIRE_SENSOR:
                if (fixB.getFilterData().categoryBits == ENTITY_ENEMY) {
                  DynamicDefender defender = (DynamicDefender) fixA.getBody().getUserData();
                  defender.EnemyExitedFireRange(fixB.getBody());
                }
                break;
            }
          }

          @Override
          public void preSolve(Contact contact, Manifold oldManifold) {}

          @Override
          public void postSolve(Contact contact, ContactImpulse impulse) {}
        });

    createCheckpointSensor(4.5f, 9.5f, new Vector2(4.5f, 1.5f));
    createCheckpointSensor(4.5f, 1.5f, new Vector2(11.5f, 1.5f));
    createCheckpointSensor(11.5f, 1.5f, new Vector2(11.5f, 9.5f));
    createFinishlineSensor(11.5f, 9.5f);
    createIllegalBuildArea();
  }
コード例 #11
0
ファイル: Box2DTest.java プロジェクト: WaDelma/libgdx
  private void createPhysicsWorld() {
    // we instantiate a new World with a proper gravity vector
    // and tell it to sleep when possible.
    world = new World(new Vector2(0, -10), true);

    float[] vertices = {
      -0.07421887f,
      -0.16276085f,
      -0.12109375f,
      -0.22786504f,
      -0.157552f,
      -0.7122401f,
      0.04296875f,
      -0.7122401f,
      0.110677004f,
      -0.6419276f,
      0.13151026f,
      -0.49869835f,
      0.08984375f,
      -0.3190109f
    };

    PolygonShape shape = new PolygonShape();
    shape.set(vertices);

    // next we create a static ground platform. This platform
    // is not moveable and will not react to any influences from
    // outside. It will however influence other bodies. First we
    // create a PolygonShape that holds the form of the platform.
    // it will be 100 meters wide and 2 meters high, centered
    // around the origin
    PolygonShape groundPoly = new PolygonShape();
    groundPoly.setAsBox(50, 1);

    // next we create the body for the ground platform. It's
    // simply a static body.
    BodyDef groundBodyDef = new BodyDef();
    groundBodyDef.type = BodyType.StaticBody;
    groundBody = world.createBody(groundBodyDef);

    // finally we add a fixture to the body using the polygon
    // defined above. Note that we have to dispose PolygonShapes
    // and CircleShapes once they are no longer used. This is the
    // only time you have to care explicitely for memomry managment.
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = groundPoly;
    fixtureDef.filter.groupIndex = 0;
    groundBody.createFixture(fixtureDef);
    groundPoly.dispose();

    // We also create a simple ChainShape we put above our
    // ground polygon for extra funkyness.
    ChainShape chainShape = new ChainShape();
    chainShape.createLoop(
        new Vector2[] {
          new Vector2(-10, 10), new Vector2(-10, 5), new Vector2(10, 5), new Vector2(10, 11),
        });
    BodyDef chainBodyDef = new BodyDef();
    chainBodyDef.type = BodyType.StaticBody;
    Body chainBody = world.createBody(chainBodyDef);
    chainBody.createFixture(chainShape, 0);
    chainShape.dispose();

    createBoxes();

    // You can savely ignore the rest of this method :)
    world.setContactListener(
        new ContactListener() {
          @Override
          public void beginContact(Contact contact) {
            // System.out.println("begin contact");
          }

          @Override
          public void endContact(Contact contact) {
            // System.out.println("end contact");
          }

          @Override
          public void preSolve(Contact contact, Manifold oldManifold) {
            // Manifold.ManifoldType type = oldManifold.getType();
            // Vector2 localPoint = oldManifold.getLocalPoint();
            // Vector2 localNormal = oldManifold.getLocalNormal();
            // int pointCount = oldManifold.getPointCount();
            // ManifoldPoint[] points = oldManifold.getPoints();
            // System.out.println("pre solve, " + type +
            // ", point: " + localPoint +
            // ", local normal: " + localNormal +
            // ", #points: " + pointCount +
            // ", [" + points[0] + ", " + points[1] + "]");
          }

          @Override
          public void postSolve(Contact contact, ContactImpulse impulse) {
            // float[] ni = impulse.getNormalImpulses();
            // float[] ti = impulse.getTangentImpulses();
            // System.out.println("post solve, normal impulses: " + ni[0] + ", " + ni[1] + ",
            // tangent impulses: " + ti[0] + ", " + ti[1]);
          }
        });
  }