CabinGame/Luxe/outline/app.wren

104 lines
2.3 KiB
Text

import "luxe: world" for World, Camera, Entity, Transform
import "luxe: render" for Render
import "luxe: bytes" for Floats
import "outline/Renderer" for Renderer
import "globals" for Globals
import "math/rect" for AABB
class App {
world { _world }
ui { _ui_world }
camera { _camera }
ui_camera { _ui_camera }
color { _color }
color=(v) { _color = v }
width { Render.window_w() }
height { Render.window_h() }
scale { Render.drawable_ratio() }
construct new() {
_color = [0,0,0.2,1]
//create worlds
_world = World.create("game")
_ui_world = World.create("ui")
//create cameras
_camera = Entity.create(_world, "app.camera")
Transform.create(_camera)
Camera.create(_camera)
Camera.set_default(_world, _camera)
_ui_camera = Entity.create(_ui_world, "app.ui_camera")
Transform.create(_ui_camera)
Camera.create(_ui_camera)
Camera.set_default(_ui_world, _ui_camera)
update_cam()
} //new
update_cam(){
Camera.ortho(_camera, 0, 128, 128, 0, -2000, 2000)
Camera.ortho(_ui_camera, 0, Globals["Renderer"].height, Globals["Renderer"].width, 0, -2000, 2000)
}
destroy() {
//destroy cameras
Camera.destroy(_camera)
Camera.destroy(_ui_camera)
Entity.destroy(_camera)
Entity.destroy(_ui_camera)
//destroy worlds
World.destroy(_ui_world)
World.destroy(_world)
} //destroy
tick(delta) {
//update worlds
World.tick_systems(_world, delta)
World.tick_systems(_ui_world, delta)
World.tick_world(_world, delta)
World.tick_world(_ui_world, delta)
//render worlds
render_empty("clear")
World.render(_world, _camera, "game", "", Globals["RelativeGameRect"].pos_size_list, {"clear_color":_color})
World.render(_ui_world, _ui_camera, "ui")
render_empty("copy_to_screen")
} //tick
render_empty(path){
//prepare data
if(!_empty_set) _empty_set = Render.create_set()
var floats = Floats.new(16)
//and submit
Render.submit(
_empty_set, //empty render set
path, //render path pass to your renderer (origin of #1)
"", //the render target resource name
[0, 0, 1, 1], //region to render to
floats, floats) //matrices
}
} //