Пример #1
0
public class TestView {

  @AfterClass
  public static void afterTest() {
    Ents.clear();
  }

  public static final Component<Vector> POSITION = Ents.newComponent("position", new Vector());
  public static final View SPRITE_VIEW = Ents.newView("sprite-view");
  public static final Template SPRITE =
      Ents.newTemplate("sprite", new ComponentSet(POSITION), new ControllerSet(), SPRITE_VIEW);

  @Test
  public void testDraw() {
    final AtomicInteger DRAW_COUNTER = new AtomicInteger();

    Ents.setViewDefault(
        SPRITE_VIEW,
        new RendererSingle() {
          public void begin(Entity entity, Object drawState) {
            DRAW_COUNTER.incrementAndGet();
          }
        });

    Entity e = new Entity(SPRITE);

    assertEquals(0, DRAW_COUNTER.get());

    e.draw(null);

    assertEquals(1, DRAW_COUNTER.get());
  }
}
Пример #2
0
  @Test
  public void testDraw() {
    final AtomicInteger DRAW_COUNTER = new AtomicInteger();

    Ents.setViewDefault(
        SPRITE_VIEW,
        new RendererSingle() {
          public void begin(Entity entity, Object drawState) {
            DRAW_COUNTER.incrementAndGet();
          }
        });

    Entity e = new Entity(SPRITE);

    assertEquals(0, DRAW_COUNTER.get());

    e.draw(null);

    assertEquals(1, DRAW_COUNTER.get());
  }
Пример #3
0
 @AfterClass
 public static void afterTest() {
   Ents.clear();
 }
Пример #4
0
public class TestEntity {

  public static final float EPSILON = 0.000001f;

  @AfterClass
  public static void afterTest() {
    Ents.clear();
  }

  // @formatter:off
  static DynamicValue<FloatVal> DYNAMIC_CENTER =
      new DynamicValue<FloatVal>() {
        public FloatVal get(Entity e) {
          return take(e, new FloatVal());
        }

        public void set(Entity e, FloatVal value) {
          FloatVal r = e.get(RIGHT);
          FloatVal l = e.get(LEFT);
          float halfwidth = (r.v - l.v) * 0.5f;
          r.v = value.v + halfwidth;
          l.v = value.v - halfwidth;
        }

        public FloatVal take(Entity e, FloatVal target) {
          FloatVal r = e.get(RIGHT);
          FloatVal l = e.get(LEFT);
          target.v = (l.v + r.v) * 0.5f;
          return target;
        }
      };

  static Control CONTROL_MOTION =
      new Control() {
        public void update(Entity e, Object updateState) {
          float dt = (Float) updateState;
          float dist = e.get(SPEED).v * dt;
          e.get(LEFT).v += dist;
          e.get(RIGHT).v += dist;
        }
      };

  static Control CONTROL_UPDATES =
      new Control() {
        public void update(Entity e, Object updateState) {
          e.get(UPDATE_COUNT).v++;
        }
      };

  static Renderer RENDERER_EXTENT =
      new RendererSingle() {
        public void begin(Entity e, Object drawState) {
          String graphics = drawState.toString();
          System.out.println(
              "Drawing extent at {" + e.get(LEFT) + "->" + e.get(RIGHT) + "} with " + graphics);
        }
      };

  static Renderer RENDERER_DRAWS =
      new RendererSingle() {
        public void begin(Entity e, Object drawState) {
          e.get(DRAW_COUNT).v++;
        }
      };

  static Component<FloatVal> LEFT = Ents.newComponent("left", new FloatVal());
  static Component<FloatVal> RIGHT = Ents.newComponent("right", new FloatVal());
  static Component<FloatVal> SPEED = Ents.newComponent("speed", new FloatVal());
  static Component<FloatVal> CENTER = Ents.newComponentDynamic("center", DYNAMIC_CENTER);
  static Controller MOTION = Ents.newController("motion", CONTROL_MOTION);
  static Controller NETWORKING = Ents.newController("networking");
  static View EXTENT_VIEW = Ents.newView("extent-view", RENDERER_EXTENT);
  static Template EXTENT =
      Ents.newTemplate(
          "extent", new ComponentSet(LEFT, RIGHT, CENTER), new ControllerSet(MOTION), EXTENT_VIEW);

  static Component<IntVal> DRAW_COUNT = Ents.newComponent("draw-count", new IntVal());
  static View DRAWS_VIEW = Ents.newView("draws-view", RENDERER_DRAWS);
  static Template DRAWS =
      Ents.newTemplate("draws", new ComponentSet(DRAW_COUNT), ControllerSet.NONE, DRAWS_VIEW);

  static Component<IntVal> UPDATE_COUNT = Ents.newComponent("update-count", new IntVal());
  static Controller UPDATES_CONTROL = Ents.newController("updates-control", CONTROL_UPDATES);
  static Template UPDATES =
      Ents.newTemplate(
          "updates", new ComponentSet(UPDATE_COUNT), new ControllerSet(UPDATES_CONTROL));

  // @formatter:on

  @Test
  public void testConstructor() {
    Entity e = new Entity(EXTENT);

    assertTrue(e.isVisible());
    assertTrue(e.isEnabled());
    assertFalse(e.isExpired());
    assertFalse(e.isCustom());

    assertTrue(e.has(LEFT));
    assertTrue(e.has(RIGHT));
    assertTrue(e.has(CENTER));
    assertFalse(e.has(SPEED));
    assertTrue(e.has(MOTION));
    assertTrue(e.has(EXTENT_VIEW));

    e.delete();
  }

  @Test
  public void testCustomEntity() {
    Entity e = new Entity();

    assertTrue(e.isCustom());
    assertFalse(e.has(LEFT));

    e.add(LEFT);

    assertTrue(e.has(LEFT));

    e.get(LEFT).v = 3.0f;

    assertEquals(3.0f, e.get(LEFT).v, EPSILON);

    e.delete();
  }

  @Test
  public void testCustomEntityDefined() {
    Entity e = new Entity(LEFT);

    assertTrue(e.has(LEFT));
    assertFalse(e.has(RIGHT));
    assertFalse(e.has(MOTION));

    e.delete();
  }

  @Test
  public void testToString() {
    // Non-custom
    Entity e0 = new Entity(EXTENT);
    e0.get(LEFT).v = 3.0f;
    e0.get(RIGHT).v = 5.5f;
    assertEquals("[left=3.0,right=5.5,center=4.25]", e0.toString());

    // Custom empty
    Entity e1 = new Entity();
    assertEquals("[]", e1.toString());

    // Custom non-empty
    Entity e2 = new Entity(LEFT);
    e2.get(LEFT).v = 2.0f;
    assertEquals("[left=2.0]", e2.toString());

    // Custom from template
    Entity e3 = new Entity(EXTENT);
    e3.get(LEFT).v = 3.0f;
    e3.get(RIGHT).v = 5.5f;
    e3.grab(SPEED).v = -1.0f;
    assertEquals("[left=3.0,right=5.5,center=4.25,speed=-1.0]", e3.toString());

    e0.delete();
    e1.delete();
    e2.delete();
    e3.delete();
  }

  @Test
  public void testGet() {
    Entity e = new Entity(EXTENT);

    FloatVal left = e.get(LEFT);
    FloatVal right = e.get(RIGHT);

    left.v = 3.0f;
    right.v = 5.5f;

    assertSame(left, e.get(LEFT));
    assertSame(right, e.get(RIGHT));
    assertEquals(3.0f, e.get(LEFT).v, EPSILON);
    assertEquals(5.5f, e.get(RIGHT).v, EPSILON);

    e.delete();
  }

  @Test
  public void testDynamic() {
    Entity e = new Entity(EXTENT);

    e.get(LEFT).v = 2.0f;
    e.get(RIGHT).v = 3.0f;

    FloatVal center = e.get(CENTER);

    assertEquals(2.5f, center.v, EPSILON);

    e.delete();
  }

  @Test
  public void testGetSafe() {
    Entity e = new Entity(EXTENT);

    assertFalse(e.has(SPEED));

    FloatVal speed0 = e.gets(SPEED);

    assertNull(speed0);

    FloatVal speed1 = e.gets(SPEED, new FloatVal(Float.NaN));

    assertNotNull(speed1);
    assertTrue(Float.isNaN(speed1.v));

    e.delete();
  }

  @Test
  public void testTake() {
    final FloatVal left = new FloatVal(0.0f);
    final FloatVal right = new FloatVal(0.0f);

    Entity e = new Entity(LEFT);

    e.get(LEFT).v = 2.0f;

    FloatVal leftTaken = e.takes(LEFT, left);
    assertSame(left, leftTaken);
    assertNotSame(left, e.gets(LEFT));
    assertEquals(2.0f, left.v, EPSILON);

    FloatVal rightTaken = e.takes(RIGHT, right);
    assertNull(rightTaken);
    assertNotSame(right, e.gets(RIGHT));
    assertEquals(0.0f, right.v, EPSILON);

    e.delete();
  }

  @Test
  public void testHasComponents() {
    Entity e = new Entity(EXTENT);

    assertTrue(e.has(LEFT));
    assertTrue(e.has(RIGHT));
    assertTrue(e.has(CENTER));
    assertFalse(e.has(SPEED));
    assertTrue(e.has(LEFT, RIGHT, CENTER));
    assertFalse(e.has(LEFT, RIGHT, CENTER, SPEED));

    e.delete();
  }

  @Test
  public void testHasController() {
    Entity e = new Entity(EXTENT);

    assertTrue(e.has(MOTION));
    assertFalse(e.has(NETWORKING));
    assertFalse(e.has(MOTION, NETWORKING));

    e.delete();
  }

  @Test
  public void testAdd() {
    Entity e = new Entity(new ComponentSet(LEFT), new ControllerSet(MOTION));

    assertTrue(e.has(LEFT));
    assertFalse(e.has(RIGHT));

    e.get(LEFT).v = 2.0f;

    e.add(RIGHT);
    assertTrue(e.has(RIGHT));

    e.get(RIGHT).v = 3.4f;

    assertEquals(2.0f, e.get(LEFT).v, EPSILON);
    assertEquals(3.4f, e.get(RIGHT).v, EPSILON);
    assertTrue(e.isCustom());

    e.add(LEFT);
    e.add(RIGHT);
    e.add(SPEED);

    e.get(SPEED).v = 3.0f;

    assertEquals(3.0f, e.get(SPEED).v, EPSILON);

    e.delete();
  }

  @Test
  public void testExpireAndDelete() {
    assertEquals(0, EXTENT.getInstances());

    Entity e = new Entity(EXTENT);

    assertEquals(1, EXTENT.getInstances());

    assertFalse(e.isExpired());
    assertNotNull(e.getTemplate());
    assertNotNull(e.getRenderer());

    e.expire();

    assertTrue(e.isExpired());

    assertNotNull(e.getTemplate());
    assertNotNull(e.getRenderer());

    e.delete();

    assertNull(e.getTemplate());
    assertNull(e.getRenderer());

    assertEquals(0, EXTENT.getInstances());

    e.delete();

    assertTrue(e.isExpired());
    assertNull(e.getTemplate());
    assertNull(e.getRenderer());

    assertEquals(0, EXTENT.getInstances());
  }

  @Test
  public void testVisible() {
    Entity e = new Entity(EXTENT);

    assertTrue(e.isVisible());

    e.hide();

    assertFalse(e.isVisible());

    e.show();

    assertTrue(e.isVisible());

    e.delete();
  }

  @Test
  public void testVisibleDraw() {
    Entity e = new Entity(DRAWS);

    assertEquals(0, e.get(DRAW_COUNT).v);

    e.draw(null);

    assertEquals(1, e.get(DRAW_COUNT).v);

    e.hide();
    e.draw(null);

    assertEquals(1, e.get(DRAW_COUNT).v);

    e.show();
    e.draw(null);

    assertEquals(2, e.get(DRAW_COUNT).v);

    e.delete();
  }

  @Test
  public void testSetView() {
    Entity e = new Entity(DRAWS);

    assertTrue(e.hasView());
    assertTrue(e.hasRenderer());
    assertSame(DRAWS_VIEW, e.getView());
    assertFalse(e.isCustom());

    e.setView(null);

    assertTrue(e.isCustom());
    assertFalse(e.hasView());
    assertFalse(e.hasRenderer());
    assertNull(e.getView());
    assertNull(e.getRenderer());

    e.delete();
  }

  @Test
  public void testSetRenderer() {
    Entity e = new Entity();

    assertTrue(e.isCustom());
    assertFalse(e.hasRenderer());
    assertNull(e.getRenderer());

    final AtomicBoolean flagCreated = new AtomicBoolean(false);
    final AtomicBoolean flagDestroyed = new AtomicBoolean(false);

    e.setRenderer(
        new RendererSingle() {

          public Renderer create(Entity e) {
            flagCreated.set(true);
            return this;
          }

          public void destroy(Entity e) {
            flagDestroyed.set(true);
          }

          public void begin(Entity e, Object drawState) {}
        });

    assertTrue(flagCreated.get());
    assertFalse(flagDestroyed.get());

    assertTrue(e.hasRenderer());

    e.setRenderer(null);

    assertFalse(e.hasRenderer());
    assertNull(e.getRenderer());
    assertTrue(flagDestroyed.get());

    e.delete();
  }

  @Test
  public void testEnabled() {
    Entity e = new Entity(EXTENT);

    assertTrue(e.isEnabled());

    e.disable();

    assertFalse(e.isEnabled());

    e.enable();

    assertTrue(e.isEnabled());

    e.delete();
  }

  @Test
  public void testEnabledUpdate() {
    Entity e = new Entity(UPDATES);

    assertEquals(0, e.get(UPDATE_COUNT).v);

    e.update(null);

    assertEquals(1, e.get(UPDATE_COUNT).v);

    e.disable();
    e.update(null);

    assertEquals(1, e.get(UPDATE_COUNT).v);

    e.enable();
    e.update(null);

    assertEquals(2, e.get(UPDATE_COUNT).v);

    e.delete();
  }

  @Test
  public void testControllerEnabled() {
    Entity e = new Entity(UPDATES);

    assertEquals(0, e.get(UPDATE_COUNT).v);

    assertTrue(e.isControllerEnabled(UPDATES_CONTROL));

    e.update(null);

    assertEquals(1, e.get(UPDATE_COUNT).v);

    e.disable(UPDATES_CONTROL);
    assertFalse(e.isControllerEnabled(UPDATES_CONTROL));

    e.update(null);

    assertEquals(1, e.get(UPDATE_COUNT).v);

    e.enable(UPDATES_CONTROL);
    e.update(null);

    assertTrue(e.isControllerEnabled(UPDATES_CONTROL));

    assertEquals(2, e.get(UPDATE_COUNT).v);

    e.delete();
  }

  @Test
  public void testAddController() {
    Entity e = new Entity(UPDATE_COUNT);

    assertFalse(e.has(UPDATES_CONTROL));
    assertEquals(0, e.get(UPDATE_COUNT).v);

    e.update(null);

    assertEquals(0, e.get(UPDATE_COUNT).v);

    e.add(UPDATES_CONTROL);

    assertTrue(e.has(UPDATES_CONTROL));
    assertTrue(e.isControllerEnabled(UPDATES_CONTROL));

    e.update(null);

    assertEquals(1, e.get(UPDATE_COUNT).v);

    e.delete();
  }

  @Test
  public void testCloneDeep() {
    Entity e0 = new Entity(EXTENT);
    e0.get(LEFT).v = 2.0f;
    e0.get(RIGHT).v = 3.7f;
    e0.hide();

    Entity e1 = e0.clone(true);

    assertSame(e0.getTemplate(), e1.getTemplate());
    assertNotSame(e0.get(LEFT), e1.get(LEFT));
    assertNotSame(e0.get(RIGHT), e1.get(RIGHT));
    assertFalse(e1.isVisible());

    assertEquals(2.0f, e1.get(LEFT).v, EPSILON);
    assertEquals(3.7f, e1.get(RIGHT).v, EPSILON);
    assertEquals(e0, e1);

    e1.delete();
    e0.delete();
  }

  @Test
  public void testCloneShallow() {
    Entity e0 = new Entity(EXTENT);
    e0.get(LEFT).v = 2.0f;
    e0.get(RIGHT).v = 3.7f;
    e0.hide();

    Entity e1 = e0.clone(false);

    assertSame(e0.getTemplate(), e1.getTemplate());
    assertSame(e0.get(LEFT), e1.get(LEFT));
    assertSame(e0.get(RIGHT), e1.get(RIGHT));
    assertFalse(e1.isVisible());

    assertEquals(2.0f, e1.get(LEFT).v, EPSILON);
    assertEquals(3.7f, e1.get(RIGHT).v, EPSILON);
    assertEquals(e0, e1);

    e1.delete();
    e0.delete();
  }
}