mirror of
https://github.com/slint-ui/slint.git
synced 2025-08-28 14:24:12 +00:00
66 lines
1.8 KiB
Text
66 lines
1.8 KiB
Text
// Copyright © SixtyFPS GmbH <info@slint.dev>
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import { ComboBox } from "std-widgets.slint";
|
|
import { SpriteSheet } from "SpriteSheet.slint";
|
|
|
|
enum TravelDirection { left, right }
|
|
|
|
export component AppWindow inherits Window {
|
|
preferred-width: 1024px;
|
|
preferred-height: 720px;
|
|
|
|
property <TravelDirection> travel-direction: TravelDirection.right;
|
|
|
|
cb := ComboBox {
|
|
x: 10px;
|
|
y: 10px;
|
|
model: ["Boing Ball", "Static"];
|
|
current-value: "Boing Ball";
|
|
}
|
|
|
|
if cb.current-value == "Static": SpriteSheet {
|
|
source: @image-url("images/sprite.png");
|
|
frames-wide: 5;
|
|
frames-high: 5;
|
|
total-frames: 21;
|
|
playing: true;
|
|
duration: 700ms;
|
|
}
|
|
|
|
if cb.current-value == "Boing Ball": ball := SpriteSheet {
|
|
property <int> frameTick: animation-tick() / 16ms;
|
|
function updateX(){
|
|
|
|
if ball.x > root.width - ball.width {
|
|
travel-direction = TravelDirection.left;
|
|
ball.x = 0;
|
|
}
|
|
if ball.x <= 0 {
|
|
travel-direction = TravelDirection.right;
|
|
ball.x = root.width;
|
|
}
|
|
}
|
|
|
|
source: @image-url("images/sprite.png");
|
|
frames-wide: 5;
|
|
frames-high: 5;
|
|
total-frames: 21;
|
|
x: 0px;
|
|
animate x { duration: 3s; }
|
|
y: (-400px * abs(sin(360deg * animation-tick() / 3s))) + parent.height - ball.height;
|
|
|
|
changed x => { updateX() }
|
|
|
|
changed frameTick => {
|
|
if travel-direction == TravelDirection.left {
|
|
ball.frame = ball.frame + 1;
|
|
} else {
|
|
ball.frame = ball.frame - 1;
|
|
}
|
|
}
|
|
|
|
// Update X on start or the ball will be stuck at 0 as no 'changed x' happens
|
|
init => { updateX() }
|
|
}
|
|
}
|