A few words about tech solutions
My full-time-job-game-engine is Unity. Sorry for that. Löve (and Lua in the first place) feels like a sip of fresh air. A huge sip.
As a metaprogramming enjoyer I am fascinated by metatables and almost endless opportunities that Lua can bring.
I fell in Löve with Lua, hehe.
But habits are habits. Here are three things that I missed from Unity (and C#): objects (and a bit of types), tweens and asynchronous methods.
Objects
I love functional style, but objects are objects. I learned Lua in 15 minutes, thanks Tyler, but I looked up how to create a pseudo-type too often, so I took that piece of code and converted it into a function that returns a pseudo-type with given constructor:
function createType(constructor) local newType = {} newType.__index = newType function newType:new(...) local n = {} constructor(n, ...) return setmetatable(n, newType) end return newType end
Now we can describe types in separate files like this:
local myType = createType(function(n) n.position = {100, 200} end) function myType:sayHi() -- do something with fresh instance end return myType
Okay, types are ready to use. Check!
Tweens
Tweens are simple. Just add deltaTime every frame, do something cool as the timer progresses, and don’t forget to stop if elapsed time span is long enough.
Creating a tweener (a singleton that will loop over a collection of tweens and remove the ones that already ended) is almost boring.
local Tween = createType(function(tween, from, to, duration, ease, valueCallback, endCallback) tween.from = from tween.to = to tween.duration = duration tween.ease = ease or DEFAULT_EASE tween.progress = 0 tween.valueCallback = valueCallback tween.endCallback = endCallback end) function Tween:tick(dt) if self.progress >= self.duration then if self.endCallback then self.endCallback() end if self.valueCallback then self.valueCallback(self.to) end return false end local p = self.progress / self.duration local v = lerp(self.ease(p), self.from, self.to) if self.valueCallback then self.valueCallback(v) end self.progress = self.progress + dt return true end
Tweens are implemented and come in all flavors: delay, tweenSet, tweenSetInt and tween01 cover all my needs at the moment. Check!
async / await
Asynchronous operations are something else. So I stepped on a long and hard path of implementing “async/await” to satisfy my primal C# instincts… I hope the next article will cover all my inventions!
<----- To Be Continued -----
Unnamed Domino Roguelike
Roguelike deckbuilder with dominoes.
Status | In development |
Author | sladkokotikov |
Tags | Deck Building, Roguelike |
More posts
- [Lua Tip] Imitate enum with a few lines of code1 day ago
- Async / await in LÖVE2D.2 days ago
- First post. Like obligatory "initial commit"4 days ago
Leave a comment
Log in with itch.io to leave a comment.