Rogue: Savage Rats, a retro-themed dungeon crawler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rogue-savage-rats/src/mightypork/rogue/screens/test_cat_sound/LayerFlyingCat.java

107 lines
3.0 KiB

package mightypork.rogue.screens.test_cat_sound;
import java.util.Random;
import mightypork.gamecore.control.bus.events.MouseButtonEvent;
import mightypork.gamecore.control.timing.Updateable;
import mightypork.gamecore.gui.components.painters.ImagePainter;
import mightypork.gamecore.gui.components.painters.QuadPainter;
import mightypork.gamecore.gui.components.painters.TextPainter;
import mightypork.gamecore.gui.screens.Screen;
import mightypork.gamecore.gui.screens.ScreenLayer;
import mightypork.gamecore.input.KeyStroke;
import mightypork.gamecore.input.Keys;
import mightypork.gamecore.render.fonts.FontRenderer.Align;
import mightypork.rogue.Res;
import mightypork.utils.math.Easing;
import mightypork.utils.math.color.RGB;
import mightypork.utils.math.constraints.num.Num;
import mightypork.utils.math.constraints.num.mutable.NumAnimated;
import mightypork.utils.math.constraints.rect.Rect;
import mightypork.utils.math.constraints.vect.Vect;
import mightypork.utils.math.constraints.vect.mutable.VectAnimated;
public class LayerFlyingCat extends ScreenLayer implements MouseButtonEvent.Listener, Updateable {
private final NumAnimated size = new NumAnimated(300, Easing.SINE_BOTH);
private final VectAnimated cat_position = VectAnimated.makeVar(Easing.ELASTIC_OUT);
private final Random rand = new Random();
public LayerFlyingCat(Screen screen) {
super(screen);
// timing
updated.add(size);
updated.add(cat_position);
size.setTo(root.height().perc(60));
// cat
cat_position.setTo(getDisplay().getCenter());
cat_position.setDefaultDuration(3);
ImagePainter cat = new ImagePainter(Res.getTxQuad("test.kitten"));
cat.setRect(Rect.make(size, size).centerTo(cat_position));
cat.enableCaching(false);
// frame around cat
QuadPainter cat_frame = QuadPainter.gradV(RGB.YELLOW, RGB.RED);
cat_frame.setRect(cat.grow(cat.height().mul(0.05)));
cat_frame.enableCaching(false);
// frame shadow
QuadPainter cat_shadow = new QuadPainter(RGB.dark(0.4));
cat_shadow.setRect(cat_frame.move(Vect.make(cat.height().mul(0.05))));
cat_shadow.enableCaching(false);
root.add(cat_shadow);
root.add(cat_frame);
root.add(cat);
// Meow
TextPainter tp = new TextPainter(Res.getFont("press_start"));
tp.setAlign(Align.CENTER);
tp.setColor(RGB.YELLOW);
tp.setText("Meow!");
tp.setShadow(RGB.dark(0.5), Vect.make(tp.height().div(16)));
tp.setRect(Rect.make(Num.ZERO, cat.height().half()).centerTo(mouse));
tp.enableCaching(false);
root.add(tp);
/*
* Register keys
*/
bindKeyStroke(new KeyStroke(Keys.KEY_RETURN), new Runnable() {
@Override
public void run()
{
cat_position.setTo(getDisplay().getCenter());
}
});
}
@Override
public void receive(MouseButtonEvent event)
{
if (!event.isDown()) return;
this.cat_position.setTo(event.getPos());
double newSize = root.height().perc(10 + rand.nextInt(40)).value();
size.animate(newSize, 1);
}
@Override
public int getPriority()
{
return 10;
}
}