125 lines
2.8 KiB
Plaintext
125 lines
2.8 KiB
Plaintext
var core = use('core')
|
|
var camera = use('camera')
|
|
var compositor = use('compositor')
|
|
var input = use('input')
|
|
var sprite_factory = use('sprite')
|
|
var text2d = use('text2d')
|
|
var random = use('random')
|
|
|
|
var GW = 1200, GH = 600
|
|
|
|
var game_cam = camera.make({width: GW, height: GH, pos: {x: GW / 2, y: GH / 2}})
|
|
var hud_cam = camera.make({width: GW, height: GH, pos: {x: GW / 2, y: GH / 2}})
|
|
|
|
input.configure({
|
|
action_map: {
|
|
spawn: ['mouse_button_left']
|
|
}
|
|
})
|
|
|
|
// Bunny tracking
|
|
var bunnies = []
|
|
var bunny_sprites = []
|
|
var BUNNY_W = 26, BUNNY_H = 37
|
|
|
|
// HUD
|
|
var count_label = text2d({
|
|
text: "Bunnies: 0", pos: {x: 10, y: GH - 25},
|
|
plane: 'hud', size: 16, color: {r: 1, g: 1, b: 1, a: 1}
|
|
})
|
|
var fps_label = text2d({
|
|
text: "FPS: 0", pos: {x: 10, y: GH - 45},
|
|
plane: 'hud', size: 16, color: {r: 1, g: 1, b: 1, a: 1}
|
|
})
|
|
|
|
var fps_timer = 0
|
|
var frame_count = 0
|
|
|
|
function add_bunny(x, y) {
|
|
var bunny = {
|
|
vx: (random.random() * 300) - 150,
|
|
vy: (random.random() * 300) - 150
|
|
}
|
|
var s = sprite_factory({
|
|
image: "bunny",
|
|
pos: {x: x, y: y},
|
|
width: BUNNY_W, height: BUNNY_H,
|
|
anchor_x: 0.5, anchor_y: 0.5,
|
|
plane: 'game'
|
|
})
|
|
push(bunnies, bunny)
|
|
push(bunny_sprites, s)
|
|
}
|
|
|
|
// Initial bunnies
|
|
var i = 0
|
|
for (i = 0; i < 100; i++) {
|
|
add_bunny(
|
|
random.random() * GW,
|
|
random.random() * GH
|
|
)
|
|
}
|
|
count_label.text = "Bunnies: " + text(length(bunnies))
|
|
|
|
// Mouse position tracking
|
|
var mouse_x = GW / 2, mouse_y = GH / 2
|
|
|
|
var comp_config = {
|
|
clear: {r: 0.2, g: 0.2, b: 0.3, a: 1},
|
|
planes: [
|
|
{name: 'game', camera: game_cam, resolution: {width: GW, height: GH}, presentation: 'letterbox'},
|
|
{name: 'hud', camera: hud_cam, resolution: {width: GW, height: GH}, presentation: 'stretch'}
|
|
]
|
|
}
|
|
|
|
core.start({
|
|
width: 1200, height: 600, title: "Bunnymark",
|
|
|
|
input: function(ev) {
|
|
if (ev.type == 'mouse_motion') {
|
|
mouse_x = ev.pos.x
|
|
mouse_y = ev.pos.y
|
|
}
|
|
},
|
|
|
|
update: function(dt) {
|
|
// Spawn bunnies while clicking
|
|
var down = input.player1().down()
|
|
var si = 0
|
|
if (down.spawn) {
|
|
for (si = 0; si < 50; si++) {
|
|
add_bunny(mouse_x, mouse_y)
|
|
}
|
|
count_label.text = "Bunnies: " + text(length(bunnies))
|
|
}
|
|
|
|
// Update all bunnies
|
|
var b = null, s = null
|
|
for (i = 0; i < length(bunnies); i++) {
|
|
b = bunnies[i]
|
|
s = bunny_sprites[i]
|
|
|
|
s.pos.x += b.vx * dt
|
|
s.pos.y += b.vy * dt
|
|
|
|
if (s.pos.x < 0) { s.pos.x = 0; b.vx = -b.vx }
|
|
else if (s.pos.x > GW) { s.pos.x = GW; b.vx = -b.vx }
|
|
if (s.pos.y < 0) { s.pos.y = 0; b.vy = -b.vy }
|
|
else if (s.pos.y > GH) { s.pos.y = GH; b.vy = -b.vy }
|
|
}
|
|
|
|
// FPS counter
|
|
frame_count++
|
|
fps_timer += dt
|
|
if (fps_timer >= 1) {
|
|
fps_label.text = "FPS: " + text(frame_count)
|
|
frame_count = 0
|
|
fps_timer -= 1
|
|
}
|
|
},
|
|
|
|
render: function() {
|
|
return compositor.execute(compositor.compile(comp_config))
|
|
}
|
|
})
|