Search in sources :

Example 1 with Transformable

use of com.b3dgs.lionengine.game.feature.Transformable in project lionengine by b3dgs.

the class SceneRasterable method add.

private void add(SetupSurfaceRastered setup, int offsetX) {
    final SpriteAnimated surface = Drawable.loadSpriteAnimated(setup.getSurface(), 4, 4);
    final Featurable featurable = new FeaturableModel(services, setup);
    featurable.addFeature(new MirrorableModel(services, setup));
    featurable.addFeature(new AnimatableModel(services, setup, surface));
    final Transformable transformable = featurable.addFeatureAndGet(new TransformableModel(services, setup));
    final Rasterable rasterable = new RasterableModel(services, setup);
    rasterable.setOrigin(Origin.MIDDLE);
    rasterable.setFrameOffsets(1, 2);
    featurable.addFeature(rasterable);
    featurable.addFeature(new RefreshableModel(extrp -> {
        transformable.setLocationY(UtilMath.sin(count) * 240);
        surface.setLocation(camera, transformable);
        rasterable.update(extrp);
        surface.update(extrp);
    }));
    featurable.addFeature(new DisplayableModel(g -> rasterable.render(g)));
    transformable.setLocationX(120 + offsetX);
    handler.add(featurable);
}
Also used : Medias(com.b3dgs.lionengine.Medias) ComponentRefreshable(com.b3dgs.lionengine.game.feature.ComponentRefreshable) RefreshableModel(com.b3dgs.lionengine.game.feature.RefreshableModel) FeaturableModel(com.b3dgs.lionengine.game.feature.FeaturableModel) ComponentDisplayable(com.b3dgs.lionengine.game.feature.ComponentDisplayable) Drawable(com.b3dgs.lionengine.graphic.drawable.Drawable) Resolution(com.b3dgs.lionengine.Resolution) AnimatableModel(com.b3dgs.lionengine.game.feature.AnimatableModel) Services(com.b3dgs.lionengine.game.feature.Services) RasterableModel(com.b3dgs.lionengine.game.feature.rasterable.RasterableModel) SetupSurfaceRastered(com.b3dgs.lionengine.game.feature.rasterable.SetupSurfaceRastered) Handler(com.b3dgs.lionengine.game.feature.Handler) UtilMath(com.b3dgs.lionengine.UtilMath) MirrorableModel(com.b3dgs.lionengine.game.feature.MirrorableModel) Rasterable(com.b3dgs.lionengine.game.feature.rasterable.Rasterable) Graphic(com.b3dgs.lionengine.graphic.Graphic) Sequence(com.b3dgs.lionengine.graphic.engine.Sequence) DisplayableModel(com.b3dgs.lionengine.game.feature.DisplayableModel) Transformable(com.b3dgs.lionengine.game.feature.Transformable) Engine(com.b3dgs.lionengine.Engine) TransformableModel(com.b3dgs.lionengine.game.feature.TransformableModel) Context(com.b3dgs.lionengine.Context) Tick(com.b3dgs.lionengine.Tick) Origin(com.b3dgs.lionengine.Origin) Featurable(com.b3dgs.lionengine.game.feature.Featurable) Camera(com.b3dgs.lionengine.game.feature.Camera) SpriteAnimated(com.b3dgs.lionengine.graphic.drawable.SpriteAnimated) RefreshableModel(com.b3dgs.lionengine.game.feature.RefreshableModel) DisplayableModel(com.b3dgs.lionengine.game.feature.DisplayableModel) AnimatableModel(com.b3dgs.lionengine.game.feature.AnimatableModel) MirrorableModel(com.b3dgs.lionengine.game.feature.MirrorableModel) TransformableModel(com.b3dgs.lionengine.game.feature.TransformableModel) RasterableModel(com.b3dgs.lionengine.game.feature.rasterable.RasterableModel) SpriteAnimated(com.b3dgs.lionengine.graphic.drawable.SpriteAnimated) Transformable(com.b3dgs.lionengine.game.feature.Transformable) FeaturableModel(com.b3dgs.lionengine.game.feature.FeaturableModel) Rasterable(com.b3dgs.lionengine.game.feature.rasterable.Rasterable) Featurable(com.b3dgs.lionengine.game.feature.Featurable)

Example 2 with Transformable

use of com.b3dgs.lionengine.game.feature.Transformable in project lionengine by b3dgs.

the class LauncherModel method computeVector.

/**
 * Compute the force vector depending of the target.
 *
 * @param vector The initial vector used for launch.
 * @param target The target reference.
 * @return The computed force to reach target.
 */
private Force computeVector(Force vector, Localizable target) {
    final double sx = transformable.getX();
    final double sy = transformable.getY();
    double dx = target.getX();
    double dy = target.getY();
    if (extrapolate && target instanceof Transformable) {
        final Transformable targetTransformable = (Transformable) target;
        final double ray = UtilMath.getDistance(transformable.getX(), transformable.getY(), target.getX(), target.getY());
        dx += (int) ((target.getX() - targetTransformable.getOldX()) / vector.getDirectionHorizontal() * ray);
        dy += (int) ((target.getY() - targetTransformable.getOldY()) / vector.getDirectionVertical() * ray);
    }
    final double dist = Math.max(Math.abs(sx - dx), Math.abs(sy - dy));
    final double vecX = (dx - sx) / dist * vector.getDirectionHorizontal();
    final double vecY = (dy - sy) / dist * vector.getDirectionVertical();
    final Force force = new Force(vector);
    force.setDestination(vecX, vecY);
    return force;
}
Also used : Force(com.b3dgs.lionengine.game.Force) Transformable(com.b3dgs.lionengine.game.feature.Transformable)

Example 3 with Transformable

use of com.b3dgs.lionengine.game.feature.Transformable in project lionengine by b3dgs.

the class ProducerModel method startProduction.

/**
 * Start production of this element. Get its corresponding instance and add it to the handler.
 * Featurable will be removed from handler if production is cancelled.
 *
 * @param featurable The element to produce.
 */
private void startProduction(Featurable featurable) {
    final Transformable transformable = featurable.getFeature(Transformable.class);
    final Producible producible = featurable.getFeature(Producible.class);
    transformable.teleport(producible.getX(), producible.getY());
    handler.add(featurable);
    steps = current.getFeature(Producible.class).getSteps();
    progress = 0.0;
    for (int i = 0; i < listenable.size(); i++) {
        listenable.get(i).notifyStartProduction(featurable);
    }
    for (final ProducibleListener listener : featurable.getFeature(Producible.class).getListeners()) {
        listener.notifyProductionStarted(this);
    }
}
Also used : Transformable(com.b3dgs.lionengine.game.feature.Transformable)

Example 4 with Transformable

use of com.b3dgs.lionengine.game.feature.Transformable in project lionengine by b3dgs.

the class ComponentCollision method notifyHandlableRemoved.

@Override
public void notifyHandlableRemoved(Featurable featurable) {
    if (featurable.hasFeature(Collidable.class)) {
        final Transformable transformable = featurable.getFeature(Transformable.class);
        final Collidable collidable = transformable.getFeature(Collidable.class);
        removePoints(transformable, collidable);
        transformable.removeListener(this);
    }
}
Also used : Transformable(com.b3dgs.lionengine.game.feature.Transformable)

Example 5 with Transformable

use of com.b3dgs.lionengine.game.feature.Transformable in project lionengine by b3dgs.

the class RasterableModelTest method testModel.

/**
 * Test the model.
 */
@Test
void testModel() {
    services.add(new ViewerMock());
    final SetupSurfaceRastered setup = new SetupSurfaceRastered(Medias.create(OBJECT_XML));
    final Featurable featurable = new FeaturableModel(services, setup);
    final Transformable transformable = featurable.addFeatureAndGet(new TransformableModel(services, setup));
    final Animatable animatable = featurable.addFeatureAndGet(new AnimatableModel(services, setup));
    featurable.addFeature(new MirrorableModel(services, setup));
    final Rasterable rasterable = new RasterableModel(services, setup);
    rasterable.setFrameOffsets(1, 2);
    rasterable.prepare(featurable);
    rasterable.setOrigin(Origin.TOP_LEFT);
    rasterable.update(1.0);
    rasterable.setEnabled(false);
    rasterable.update(1.0);
    rasterable.render(g);
    assertTrue(rasterable.isVisible());
    rasterable.setVisibility(false);
    rasterable.update(1.0);
    rasterable.render(g);
    assertFalse(rasterable.isVisible());
    assertEquals(1, rasterable.getRasterIndex(0));
    assertEquals(RasterImage.MAX_RASTERS, rasterable.getRasterIndex(240));
    assertNotNull(rasterable.getRasterAnim(0));
    transformable.teleportY(-100);
    rasterable.update(1.0);
    assertEquals(1, rasterable.getRasterIndex(0));
    assertEquals(RasterImage.MAX_RASTERS, rasterable.getRasterIndex(240));
    assertNotNull(rasterable.getRasterAnim(0));
    animatable.play(new Animation("default", 1, 5, 1.0, false, false));
    animatable.update(1.0);
    rasterable.update(1.0);
    assertEquals(1, rasterable.getRasterAnim(0).getFrame());
    rasterable.setAnimOffset(1);
    rasterable.update(1.0);
    assertEquals(1, rasterable.getRasterAnim(0).getFrame());
}
Also used : ViewerMock(com.b3dgs.lionengine.ViewerMock) AnimatableModel(com.b3dgs.lionengine.game.feature.AnimatableModel) TransformableModel(com.b3dgs.lionengine.game.feature.TransformableModel) MirrorableModel(com.b3dgs.lionengine.game.feature.MirrorableModel) Animatable(com.b3dgs.lionengine.game.feature.Animatable) Transformable(com.b3dgs.lionengine.game.feature.Transformable) Animation(com.b3dgs.lionengine.Animation) FeaturableModel(com.b3dgs.lionengine.game.feature.FeaturableModel) Featurable(com.b3dgs.lionengine.game.feature.Featurable) Test(org.junit.jupiter.api.Test)

Aggregations

Transformable (com.b3dgs.lionengine.game.feature.Transformable)30 Test (org.junit.jupiter.api.Test)17 FeaturableModel (com.b3dgs.lionengine.game.feature.FeaturableModel)16 TransformableModel (com.b3dgs.lionengine.game.feature.TransformableModel)15 AtomicReference (java.util.concurrent.atomic.AtomicReference)9 Setup (com.b3dgs.lionengine.game.feature.Setup)8 Tile (com.b3dgs.lionengine.game.feature.tile.Tile)7 UtilSetup (com.b3dgs.lionengine.game.feature.UtilSetup)6 UtilTransformable (com.b3dgs.lionengine.game.feature.UtilTransformable)6 Featurable (com.b3dgs.lionengine.game.feature.Featurable)4 Media (com.b3dgs.lionengine.Media)3 Medias (com.b3dgs.lionengine.Medias)3 AnimatableModel (com.b3dgs.lionengine.game.feature.AnimatableModel)3 Handler (com.b3dgs.lionengine.game.feature.Handler)3 Services (com.b3dgs.lionengine.game.feature.Services)3 Animation (com.b3dgs.lionengine.Animation)2 Range (com.b3dgs.lionengine.Range)2 UtilAssert.assertEquals (com.b3dgs.lionengine.UtilAssert.assertEquals)2 UtilAssert.assertTrue (com.b3dgs.lionengine.UtilAssert.assertTrue)2 Force (com.b3dgs.lionengine.game.Force)2