Render sitelen pona
This commit is contained in:
parent
fd520944e4
commit
11865da481
76
main.lua
76
main.lua
|
@ -1,16 +1,31 @@
|
||||||
local love = love
|
local love = love
|
||||||
|
local sitelenpona
|
||||||
|
local text
|
||||||
|
|
||||||
local sounds = {
|
local sounds = {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
local state = {
|
|
||||||
|
local state
|
||||||
|
state = {
|
||||||
|
|
||||||
|
Reset = function()
|
||||||
|
state.beat = {}
|
||||||
|
state.startTime = love.timer.getTime()
|
||||||
|
state.currentBeat = 1
|
||||||
|
end,
|
||||||
|
|
||||||
isGameStarted = false,
|
isGameStarted = false,
|
||||||
beatScoreThreshold = 1.0,
|
beatScoreThreshold = 1.0,
|
||||||
currentBeat = 1,
|
currentBeat = 1,
|
||||||
startTime = 0.0,
|
startTime = 0.0,
|
||||||
|
|
||||||
|
stickX = 0.0,
|
||||||
|
stickY = 0.0,
|
||||||
|
stickT = 0.0,
|
||||||
|
|
||||||
particle = {
|
particle = {
|
||||||
x = 0.0,
|
x = 0.0,
|
||||||
y = 0.0,
|
y = 0.0,
|
||||||
|
@ -46,14 +61,16 @@ local state = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function love.load()
|
||||||
|
sounds.goodPing = love.audio.newSource("soundTest.ogg", "static")
|
||||||
|
sounds.badPing = love.audio.newSource("chime8.ogg", "static")
|
||||||
|
sitelenpona = assert( require "sitelenpona" )
|
||||||
|
text = assert( require "text" )
|
||||||
|
return state.Reset()
|
||||||
|
|
||||||
--Reset game state.
|
|
||||||
local function NewGame()
|
|
||||||
state.beat = {}
|
|
||||||
state.startTime = love.timer.getTime()
|
|
||||||
state.currentBeat = 1
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
local function BeatScore( t )
|
local function BeatScore( t )
|
||||||
local beat = state.beat
|
local beat = state.beat
|
||||||
|
|
||||||
|
@ -84,11 +101,11 @@ local function BeatScore( t )
|
||||||
|
|
||||||
--Calculate beat score.
|
--Calculate beat score.
|
||||||
local score = dt * dt / ( mu * mu )
|
local score = dt * dt / ( mu * mu )
|
||||||
local TOLERANCE = 1.15
|
local TOLERANCE = 1.00001
|
||||||
if dt < mu then
|
if dt < mu then
|
||||||
return 1.15 * score
|
return TOLERANCE * score
|
||||||
else
|
else
|
||||||
return 1.15 / score
|
return TOLERANCE / score
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
@ -107,12 +124,11 @@ local function OnImpact( impact )
|
||||||
if state.currentBeat >= 120 then
|
if state.currentBeat >= 120 then
|
||||||
return OnVictory()
|
return OnVictory()
|
||||||
end
|
end
|
||||||
|
|
||||||
love.audio.play(sounds.goodPing)
|
love.audio.play(sounds.goodPing)
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
state.beatScoreThreshold = state.beatScoreThreshold - score
|
state.beatScoreThreshold = state.beatScoreThreshold - 0.05
|
||||||
love.audio.play(sounds.badPing)
|
love.audio.play(sounds.badPing)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -123,29 +139,41 @@ end
|
||||||
|
|
||||||
function love.draw()
|
function love.draw()
|
||||||
love.graphics.setColor(1.0, 1.0, 1.0)
|
love.graphics.setColor(1.0, 1.0, 1.0)
|
||||||
love.graphics.print("Hello World!", 400, 300)
|
love.graphics.print( state.beat.mu or 0, 0)
|
||||||
love.graphics.print( state.beat.mu or 0, 0, 0, 0, 10, 10 )
|
love.graphics.print( state.beat.t or 0, 0, 10)
|
||||||
love.graphics.print( state.beat.t or 0, 0, 100, 0, 10, 10 )
|
love.graphics.print( state.beatScoreThreshold, 0, 20)
|
||||||
love.graphics.print( state.beatScoreThreshold, 0, 200, 0, 10, 10 )
|
|
||||||
love.graphics.setColor(0, 0.4, 0.4)
|
love.graphics.setColor(0, 0.4, 0.4)
|
||||||
--love.graphics.circle("fill", 0, 0, 10)
|
sitelenpona.Draw( text.tok[state.currentBeat] )
|
||||||
|
love.graphics.setColor(0.5, 0.2, 0.8, 0.5)
|
||||||
|
love.graphics.circle("fill", 0, 0, 10)
|
||||||
end
|
end
|
||||||
|
|
||||||
function love.load()
|
|
||||||
sounds.goodPing = love.audio.newSource("soundTest.ogg", "static")
|
|
||||||
sounds.badPing = love.audio.newSource("chime8.ogg", "static")
|
|
||||||
|
|
||||||
return NewGame()
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
function love.update( dt )
|
function love.update( dt )
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function UpdateStick()
|
||||||
|
state.stickT = love.timer.getTime()
|
||||||
|
local x = (love.keyboard.isDown( "w" ) and 1.0 or 0.0) - (love.keyboard.isDown( "s" ) and 1.0 or 0.0)
|
||||||
|
local y = (love.keyboard.isDown( "d" ) and 1.0 or 0.0) - (love.keyboard.isDown( "a" ) and 1.0 or 0.0)
|
||||||
|
local n = math.sqrt( x * x + y * y )
|
||||||
|
if n < 0.001 then
|
||||||
|
state.stickX = x
|
||||||
|
state.stickY = y
|
||||||
|
else
|
||||||
|
state.stickX = x / n
|
||||||
|
state.stickY = y / n
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
function love.keypressed( key, code, isRepeat )
|
function love.keypressed( key, code, isRepeat )
|
||||||
if key == "escape" then return love.event.quit() end
|
if key == "escape" then return love.event.quit() end
|
||||||
if key == "w" then return OnImpact{ t = love.timer.getTime() } end
|
if key == "enter" then return OnImpact{ t = love.timer.getTime() } end
|
||||||
if key == "enter" then return NewGame() end
|
return UpdateStick()
|
||||||
|
end
|
||||||
|
|
||||||
|
function love.keyreleased( key, code )
|
||||||
|
return UpdateStick()
|
||||||
end
|
end
|
|
@ -0,0 +1,18 @@
|
||||||
|
--Render Sitelen Pona text. One file per glyph.
|
||||||
|
local love = love
|
||||||
|
local sp = {}
|
||||||
|
|
||||||
|
local info = love.filesystem.getInfo( "sitelenpona" )
|
||||||
|
for _, filename in ipairs(love.filesystem.getDirectoryItems( "sitelenpona" )) do
|
||||||
|
sp[filename:gsub( ".png", "" )] = love.graphics.newImage( "sitelenpona/"..filename )
|
||||||
|
end
|
||||||
|
--Render one glyph in the center.
|
||||||
|
sp.Draw = function( str )
|
||||||
|
local w, h = love.graphics.getDimensions()
|
||||||
|
local x, y = 0.5 * w - 128, 0.5 * h - 128
|
||||||
|
love.graphics.setColor( 1.0, 1.0, 1.0, 0.5 )
|
||||||
|
love.graphics.draw( sp[str] or sp.q, x, y )
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
return sp
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
|
@ -0,0 +1,17 @@
|
||||||
|
--Load poems.
|
||||||
|
local love = love
|
||||||
|
local txt = {}
|
||||||
|
|
||||||
|
local info = love.filesystem.getInfo( "text" )
|
||||||
|
for _, filename in ipairs(love.filesystem.getDirectoryItems( "text" )) do
|
||||||
|
local s = love.filesystem.read( "text/"..filename )
|
||||||
|
local t = {}
|
||||||
|
local i = 1
|
||||||
|
for w in s:gmatch( "%a+") do
|
||||||
|
t[i] = w
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
txt[filename:gsub( ".txt", "" )] = t
|
||||||
|
end
|
||||||
|
|
||||||
|
return txt
|
Loading…
Reference in New Issue