protected void update (Texture tex) { if (tex == null) { // we should never be going back to null but handle it anyway if (_ilayer != null) _ilayer.close(); _ilayer = null; return; } if (_ilayer == null) layer.add(_ilayer = new ImageLayer()); _ilayer.setTile(tex); }
protected Texture (Symbol symbol) { _layer = new ImageLayer(symbol.tile); _layer.setOrigin(symbol.origin.x(), symbol.origin.y()); _symbol = symbol; }
@Override public void apply (int index, ImageLayer layer) { Frame f = _frames[index]; layer.setTile(_tile); layer.region = f.bounds; layer.setTranslation(f.offset.x, f.offset.y); }
ImageLayer i1 = new ImageLayer(tex); i1.setOrigin(i1.width()/2, i1.height()/2); g1.addAt(i1, 50, 50); g2.addAt(new ImageLayer(tex), (100 - iwidth)/2, (100 - iheight)/2); inner.addAt(new ImageLayer(tex), (100 - iwidth)/2, (100 - iheight)/2); GroupLayer g3 = new GroupLayer(100, 100); g3.add(inner); TextureSurface si = game.createSurface(100, 50); si.begin().setFillColor(0xFF99CCFF).fillRect(0, 0, 100, 50).end().close(); ImageLayer s1 = new ImageLayer(si.texture); s1.setOrigin(s1.width()/2, s1.height()/2); g4.addAt(s1, 50, 50); g5Inner.addAt(new ImageLayer(tex).setScale(2), -iwidth, -iheight); g5Inner.addAt(new ImageLayer(tex).setScale(2), -iwidth, iheight); g5Inner.addAt(new ImageLayer(tex).setScale(2), iwidth, -iheight); g5Inner.addAt(new ImageLayer(tex).setScale(2), iwidth, iheight); GroupLayer g5 = new GroupLayer(100, 100); g5.addAt(g5Inner, -25, -25); i1.setRotation(elapsed * FloatMath.PI/2); s1.setRotation(elapsed * FloatMath.PI/2); g2.setWidth(Math.round(Math.abs(100 * FloatMath.sin(elapsed)))); inner.setOrigin(FloatMath.sin(elapsed * 2f) * 50, FloatMath.cos(elapsed * 2f) * 50);
protected void addToRow (ImageLayer layer) { game.rootLayer.add(layer.setTranslation(row.x + row.width, row.y)); row.width += layer.width() + 45; row.height = Math.max(row.height, layer.height()); if (row.width > game.graphics.viewSize.width() * .6f) newRow(); }
ImageLayer circle = new ImageLayer(canvas.toTexture()); click.events().connect(new Pointer.Listener() { @Override public void onStart (Pointer.Interaction iact) { if (_shaker != null) _shaker.complete(); protected Animation.Handle _shaker; }); layer.addAt(click, (width-click.width())/2, 275); ImageLayer[] balls = new ImageLayer[6]; for (int ii = 0; ii < balls.length; ii++) { layer.addAt(balls[ii] = new ImageLayer(balltex), 170+ii*50, 350); final ImageLayer square = new ImageLayer(sqimg.toTexture()); square.setOrigin(25, 25); layer.addAt(square, 50, 300); square.events().connect(new Pointer.Listener() { @Override public void onStart (Pointer.Interaction iact) { square.setInteractive(false);
void displayMenu() { clearTest(); rootLayer.disposeAll(); rootLayer.add(createWhiteBackground()); float gap = 20, x = gap, y = gap, maxHeight = 0; String info = "Renderer: gl (batch=" + defaultBatch + ")" + " / Screen: " + graphics.screenSize() + " / Window: " + graphics.viewSize; Texture infoTex = ui.formatText(info, false); rootLayer.addAt(new ImageLayer(infoTex), x, y); y += infoTex.displayHeight + gap; for (final Test test : tests) { if (!test.available()) continue; ImageLayer button = ui.createButton(test.name, () -> startTest(test)); if (x + button.width() > graphics.viewSize.width() - gap) { x = gap; y += maxHeight + gap; maxHeight = 0; } maxHeight = Math.max(maxHeight, button.height()); rootLayer.addAt(button, x, y); x += button.width() + gap; } }
protected Entity createBullet (float x, float y, float vx, float vy, float angle, int exps) { Entity bullet = create(true); bullet.add(type, sprite, opos, pos, vel, radius, expires); Canvas canvas = graphics().createCanvas(5, 2); canvas.setFillColor(0xFFFFFFFF).fillRect(0, 0, 5, 2); ImageLayer layer = new ImageLayer(canvas.toTexture()); layer.setOrigin(2.5f, 1); layer.setRotation(angle); int id = bullet.id; type.set(id, BULLET); sprite.set(id, layer); opos.set(id, x, y); pos.set(id, x, y); vel.set(id, vx, vy); radius.set(id, 2); expires.set(id, exps); return bullet; }
@Override public Layer render () { return new ImageLayer(source); } @Override public RFuture<Icon> state () {
@Override public boolean onVisit (String parentLayer, Instance instance, int depth) { String instanceDesc; if (instance instanceof Movie) { instanceDesc = ((Movie) instance).symbol().name(); } else if (instance instanceof Texture) { ImageLayer tLayer = ((Texture) instance).layer(); instanceDesc = "Texture (" + tLayer.width() + " x " + tLayer.height() + ")"; if (tLayer.disposed()) instanceDesc += " (DISPOSED)"; } else if (instance != null) { instanceDesc = instance.toString(); } else { instanceDesc = "(null)"; } printChild(depth, parentLayer + ": " + instanceDesc); return false; } protected void printChild (int depth, String description) {
protected Entity createAsteroid (Size sz, float x, float y, float vx, float vy) { Entity ast = create(true); ast.add(type, size, sprite, opos, pos, vel, spin, radius); float side = sz.size; int iidx = rando.getInt(8); float ah = asteroids.height(); ImageLayer layer = new ImageLayer(asteroids.region(iidx*ah, 0, ah, ah)); layer.setOrigin(ah/2, ah/2); layer.setScale(side/ah); layer.setRotation(rando.getFloat(MathUtil.TAU)); int id = ast.id; type.set(id, ASTEROID); size.set(id, sz); sprite.set(id, layer); spin.set(id, rando.getInRange(-MAXSPIN, MAXSPIN)); opos.set(id, x, y); pos.set(id, x, y); vel.set(id, vx, vy); radius.set(id, side*0.425f); return ast; }
@Override public void init() { float left = 50, x = left, y = 50; String instructions = "Click one of the buttons below to display the text entry UI:"; ImageLayer instLayer = new ImageLayer(game.ui.formatText(instructions, false)); game.rootLayer.addAt(instLayer, x, y); y += 20; ImageLayer outputLayer = new ImageLayer(game.ui.formatText(last, false)); SignalView.Listener<Object> onDialogResult = result -> { String text = result == null ? "canceled" : String.valueOf(result); if (text.length() > 0) outputLayer.setTile(game.ui.formatText(text, false)); if (result instanceof String) game.storage.setItem("last_text", (String)result); }; }); game.rootLayer.addAt(button, x, y); x += button.width() + 10; game.rootLayer.addAt(new ImageLayer(game.ui.formatText(instr2, false)), left, y); y += 20; }); game.rootLayer.addAt(button, x, y); x += button.width() + 10; }); game.rootLayer.addAt(button, x, y); x += button.width() + 10; y += 50;
private void addTestCanvas(String descrip, int width, int height, String imagePath, ImageDrawer drawer) { Canvas target = game.graphics.createCanvas(width, height); ImageLayer layer = new ImageLayer().setSize(width, height); game.assets.getImage(imagePath).state.onSuccess(image -> { drawer.draw(target, image); layer.setTile(target.toTexture()); }); addTestLayer(descrip, width, height, layer); }
/** * Creates an image layer with the supplied texture tile. */ public ImageLayer (Tile tile) { setTile(tile); }
x += preventDefault.layer.width() + 5; x += capture.layer.width() + 5; y += preventDefault.layer.height() + 5; x = 20; y += createLabel("Event Log", 0, x, y).height(); logger = new TextLogger(375, 15, logFormat); logger.layer.setTranslation(x, y); y += createLabel("Motion Log", 0, x, y).height(); motionLabel = new TextMapper(375, 6, logFormat); motionLabel.layer.setTranslation(x, y); mouse.label.events().connect(new Mouse.Listener() { ImageLayer label = mouse.label; pointer.label.events().connect(new Pointer.Listener() { ImageLayer label = pointer.label; @Override public void onStart(Pointer.Interaction iact) { touch.label.events().connect(new Touch.Listener() { ImageLayer label = touch.label; @Override public void onStart(Touch.Interaction iact) {
@Override public void init() { Image orange = game.assets.getImage("images/orange.png"); ImageLayer l1 = new ImageLayer(orange); game.rootLayer.addAt(l1.setScale(2).setRotation(FloatMath.PI/8), 50, 50); l1.events().connect(new Mover(l1).listener(game.input)); ImageLayer l2 = new ImageLayer(orange); game.rootLayer.addAt(l2.setScale(1.5f).setRotation(FloatMath.PI/4), 150, 50); l2.events().connect(new Mover(l2).listener(game.input)); Image mdb = game.assets.getRemoteImage("https://www.samskivert.com/images/headshot.jpg"); ImageLayer l3 = new ImageLayer(mdb); game.rootLayer.addAt(l3.setRotation(-FloatMath.PI/4), 50, 150); l3.events().connect(new Mover(l3).listener(game.input)); String l4url = "https://www.samskivert.com/images/2012/12/spellwood-app-icon.png"; game.net.req(l4url).execute().onSuccess(rsp -> { try { Image icon = rsp.payloadImage(new Scale(2)); ImageLayer l4 = new ImageLayer(icon); game.rootLayer.addAt(l4.setRotation(FloatMath.PI/4), 150, 150); l4.events().connect(new Mover(l4).listener(game.input)); } catch (Exception e) { game.log.warn("Failed to decode image: " + e); } }).onFailure(t -> game.log.warn("Failed to load image: " + l4url, t)); }
ImageLayer player1 = new ImageLayer(princess); player1.setOrigin(phwidth, phheight); game.rootLayer.addAt(player1, 100, 100); ImageLayer player2 = new ImageLayer(princess.createTexture(MIPMAPPED)); player2.setOrigin(phwidth, phheight); game.rootLayer.addAt(player2, 250, 100); ImageLayer slayer1 = new ImageLayer(star); slayer1.setOrigin(shwidth, shheight); game.rootLayer.addAt(slayer1, 100, 250); ImageLayer slayer2 = new ImageLayer(star.createTexture(MIPMAPPED)); slayer2.setOrigin(shwidth, shheight); game.rootLayer.addAt(slayer2, 250, 250); elapsed += clock.dt/1000f; float scale = Math.abs(FloatMath.sin(elapsed)); player1.setScale(scale); player2.setScale(scale); slayer1.setScale(scale); slayer2.setScale(scale);
@Override public void init () { Canvas bgcanvas = game.graphics.createCanvas(WIDTH + 10, HEIGHT); bgcanvas.setFillColor(0xff808080); bgcanvas.fillRect(0, 0, WIDTH + 10, HEIGHT); ImageLayer bg = new ImageLayer(bgcanvas.toTexture()); Canvas knob = game.graphics.createCanvas(WIDTH, HWIDTH); knob.setFillColor(0xffffffff).fillRect(0, 0, WIDTH, HWIDTH); knob.setStrokeColor(0xff000000).drawLine(0, HWIDTH / 2, WIDTH, HWIDTH / 2); knob.setStrokeColor(0xffff0000).strokeRect(0, 0, WIDTH - 1, HWIDTH - 1); ImageLayer il = new ImageLayer(knob.toTexture()); il.setOrigin(0, HWIDTH / 2).setDepth(1).setTranslation(0, HEIGHT / 2); GroupLayer slider = new GroupLayer(); slider.add(bg); slider.add(il); game.rootLayer.addAt(slider, 25, 25); bg.events().connect(new Mouse.Listener() { @Override public void onWheel (Mouse.WheelEvent event, Mouse.Interaction iact) { float y = il.ty() + event.velocity; y = Math.max(0, Math.min(y, HEIGHT)); il.setTranslation(0, y); } }); } }