Skip to content

Commit

Permalink
Add a background for the screens
Browse files Browse the repository at this point in the history
  • Loading branch information
Pixaurora committed Sep 23, 2024
1 parent 30d0205 commit 8b2dacd
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public abstract class ScreenTemplate implements Screen {
private boolean initializedWidgets = false;

private Optional<PointManager> defaultAligner = Optional.empty();
private Optional<Size> window = Optional.empty();

private final List<WidgetContainer> widgets = new ArrayList<>();

Expand All @@ -29,16 +28,17 @@ public final void draw(GuiDisplay gui, Point mousePos) {
PointManager aligner = widget.customizedAligner().orElse(defaultAligner);

GuiDisplay alignedGui = new AlignedGuiDisplay(gui, aligner);
mousePos = this.alignmentMethod().inverseAlign(mousePos, this.window.get());
Point alignedMousePos = aligner.inverseAlign(mousePos);

widget.get().draw(alignedGui, mousePos);
widget.get().draw(alignedGui, alignedMousePos);
}
}

@Override
public final void init(Size window) {
if (!this.initializedWidgets) {
this.initializedWidgets = true;
this.addBackground();
this.firstInit();
}

Expand All @@ -47,19 +47,22 @@ public final void init(Size window) {

@Override
public final void handleClick(Point mousePos, MouseButton button) {
mousePos = this.alignmentMethod().inverseAlign(mousePos, this.window.get());
PointManager defaultAligner = this.defaultAligner.get();

for (WidgetContainer widget : this.widgets) {
if (widget.get().isWithinBounds(mousePos)) {
widget.get().onClick(mousePos, button);
PointManager aligner = widget.customizedAligner().orElse(defaultAligner);

Point alignedMousePos = aligner.inverseAlign(mousePos);

if (widget.get().isWithinBounds(alignedMousePos)) {
widget.get().onClick(alignedMousePos, button);
return;
}
}
}

private void updateWindow(Size window) {
this.defaultAligner = Optional.of(new PointManager(this.alignmentMethod(), window));
this.window = Optional.of(window);

for (WidgetContainer widget : this.widgets) {
widget.onWindowUpdate(window);
Expand All @@ -73,6 +76,9 @@ protected final <W extends Widget> W addWidget(W widget) {

protected abstract AlignmentStrategy alignmentMethod();

protected void addBackground() {
}

protected abstract void firstInit();

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,8 @@ public PointManager(AlignmentStrategy alignment, Size window) {
public Point align(Point pos) {
return this.cache.computeIfAbsent(pos, point -> strategy.align(pos, window));
}

public Point inverseAlign(Point pos) {
return this.strategy.inverseAlign(pos, window);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package net.pixaurora.kitten_cube.impl.ui.widget;

import java.util.ArrayList;
import java.util.List;
import java.util.Optional;

import net.pixaurora.kitten_cube.impl.math.Point;
import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.controls.MouseButton;
import net.pixaurora.kitten_cube.impl.ui.display.GuiDisplay;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.screen.align.AlignmentStrategy;
import net.pixaurora.kitten_cube.impl.ui.texture.Texture;

public class TiledBackground implements Widget {
private final Texture texture;
private List<Point> posToDrawAt;

public TiledBackground(Texture texture) {
this.texture = texture;
}

@Override
public void draw(GuiDisplay gui, Point mousePos) {
for (Point pos : posToDrawAt) {
gui.draw(this.texture, pos);
}
}

@Override
public void onWindowUpdate(Size window) {
Size texture = this.texture.size();

Size tileCounts = Size.of((int) Math.ceil((float) window.width() / texture.width()),
(int) Math.ceil((float) window.height() / texture.height()));

this.posToDrawAt = new ArrayList<>();
for (int tileY = 0; tileY <= tileCounts.height(); tileY++) {
for (int tileX = 0; tileX <= tileCounts.width(); tileX++) {
this.posToDrawAt.add(Point.of(tileX * texture.width(), tileY * texture.height()));
}
}
}

@Override
public Optional<AlignmentStrategy> alignmentMethod() {
return Optional.of(Alignment.TOP_LEFT);
}

@Override
public void onClick(Point mousePos, MouseButton button) {
}

@Override
public boolean isWithinBounds(Point mousePos) {
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import net.pixaurora.kitten_cube.impl.math.Point;
import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.text.Component;
import net.pixaurora.kitten_cube.impl.ui.screen.ReturnToPreviousScreen;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.screen.align.AlignmentStrategy;
Expand All @@ -15,7 +14,7 @@
import net.pixaurora.kitten_heart.impl.scrobble.LastFMScrobbler;
import net.pixaurora.kitten_heart.impl.ui.screen.scrobbler.ScrobblerSetupScreen;

public class KitTunesHomeScreen extends ReturnToPreviousScreen {
public class KitTunesHomeScreen extends KitTunesScreenTemplate {
public static final GuiTexture SPLASH = GuiTexture.of(KitTunes.resource("textures/gui/sprites/logo/main.png"),
Size.of(272, 64));

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package net.pixaurora.kitten_heart.impl.ui.screen;

import net.pixaurora.kitten_cube.impl.math.Size;
import net.pixaurora.kitten_cube.impl.ui.screen.ReturnToPreviousScreen;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;
import net.pixaurora.kitten_cube.impl.ui.texture.Texture;
import net.pixaurora.kitten_cube.impl.ui.widget.TiledBackground;
import net.pixaurora.kitten_heart.impl.KitTunes;

public abstract class KitTunesScreenTemplate extends ReturnToPreviousScreen {
public static final Texture backgroundTile = Texture
.of(KitTunes.resource("textures/gui/sprites/background/tile.png"), Size.of(16, 16));

public KitTunesScreenTemplate(Screen previous) {
super(previous);
}

@Override
protected void addBackground() {
this.addWidget(new TiledBackground(backgroundTile));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import net.pixaurora.kitten_cube.impl.math.Point;
import net.pixaurora.kitten_cube.impl.text.Color;
import net.pixaurora.kitten_cube.impl.text.Component;
import net.pixaurora.kitten_cube.impl.ui.screen.ReturnToPreviousScreen;
import net.pixaurora.kitten_cube.impl.ui.screen.Screen;
import net.pixaurora.kitten_cube.impl.ui.screen.align.Alignment;
import net.pixaurora.kitten_cube.impl.ui.screen.align.AlignmentStrategy;
Expand All @@ -22,8 +21,9 @@
import net.pixaurora.kitten_heart.impl.scrobble.Scrobbler;
import net.pixaurora.kitten_heart.impl.scrobble.ScrobblerSetup;
import net.pixaurora.kitten_heart.impl.scrobble.ScrobblerType;
import net.pixaurora.kitten_heart.impl.ui.screen.KitTunesScreenTemplate;

public class ScrobblerSetupScreen<T extends Scrobbler> extends ReturnToPreviousScreen {
public class ScrobblerSetupScreen<T extends Scrobbler> extends KitTunesScreenTemplate {
private static final Component TITLE = Component.translatable("kit_tunes.scrobbler_setup.title");

private static final Component SETUP_IN_BROWSER = Component
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 8b2dacd

Please sign in to comment.