Skip to content

Instantly share code, notes, and snippets.

@germandiagogomez
Last active May 25, 2021 10:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save germandiagogomez/86e132a58104073b1c8b622da2eb0478 to your computer and use it in GitHub Desktop.
Save germandiagogomez/86e132a58104073b1c8b622da2eb0478 to your computer and use it in GitHub Desktop.
Menu Screen from game scripted
import "environment" for Env
import "guinyoteview" for IBasicGameView, TrySelectEvent
import "inputsystem" for Input
import "guinyoteutils" for MouseClickedEvent, MouseReleasedEvent
class InputSystem {
construct new(inputSystem) {
_input = inputSystem
}
getEvents() {
return _input.getEvents()
}
}
class GameView {
construct new() {
_gameScreen = IBasicGameView.create("GameMenu")
_gameScreen.setConfig(Env.config)
_gameScreen.onInit(Env.videoManager)
// This is downcasting, basically. A trick not needed in ChaiScript
_menuScreen = _gameScreen.getAsGameMenu()
_menuScreen.setUserAvatarIfExists()
_menuScreen.setUserNameIfExists()
}
consumeEvent(evt) {
return _gameScreen.consumeEvent(evt)
}
draw() {
_gameScreen.draw()
}
// playerName is a read-only property
playerName {
return _menuScreen.playerName
}
}
class Main {
static makeMenuChoice(choice) {
if (choice == 0) {
return "OnlineRoomsScreen"
} else {
return ""
}
}
static createViewFiber() {
return Fiber.new{|events|
var gv = GameView.new()
var menuChoice = -1
while (menuChoice == -1 || gv.playerName == null || gv.playerName == "") {
if (events) {
for (event in events.where{|e| e is MouseReleasedEvent}) {
menuChoice = gv.consumeEvent(TrySelectEvent.new(event.x, event.y))
}
}
}
gv.draw()
events = Fiber.yield()
}
Fiber.yield([makeMenuChoice(menuChoice),
gv.playerName])
}
static createInputFiber() {
return Fiber.new{
var inputSystem = InputSystem.new(Input)
var events = null
while (true) {
events = inputSystem.getEvents()
if (events.count > 0) {
Fiber.yield(events)
}
Fiber.yield(null)
}
}
}
static main(args) {
var inputFiber = createInputFiber()
var viewFiber = createViewFiber()
var events = null
var results = null
while (!results) {
events = inputFiber.call()
results = viewFiber.call(events)
if (results != null) break
}
return results
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment