Advertisement
Guest User

numberbox.nim

a guest
Sep 14th, 2017
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Nim 2.85 KB | None | 0 0
  1. # number box - a simple incremental game
  2.  
  3. # in a real project, you just `import nch`
  4. import
  5.   sys,
  6.   std,
  7.   vgfx,
  8.   phy,
  9.   sdl2
  10.  
  11. ## PauseState
  12. type PauseState* = ref object of State
  13.   pauseMsg: Elem
  14.  
  15. method init(state: PauseState) =
  16.   state.pauseMsg = state.mgr.owner.add("pauseMsg")
  17.   state.pauseMsg.attach(VecText(
  18.     text: "-PAUSED-",
  19.     textAlign: TextAlign.center,
  20.     scale: vector2d(0.5, 0.5),
  21.     spacing: vector2d(0.5, 0.1),
  22.     slant: 0.0,
  23.     color: color(0, 255, 0, 255)
  24.   ))
  25.   state.pauseMsg.pos = vector2d(0, 0)
  26.  
  27. method handleInput(state: PauseState, input: ptr InputMgr): bool =
  28.   if input.getKeyState(SDL_SCANCODE_SPACE) == BtnState.pressed:
  29.     state.exit()
  30.   true # prevents "lower" states from handling input while this state is active and not exiting
  31.  
  32. method tick(state: PauseState, ev: TickEvent): bool =
  33.   true # prevents "lower" States from ticking while this state is active and not exiting
  34.  
  35. method bury(state: PauseState) =
  36.   state.pauseMsg.destroy()
  37.  
  38.  
  39. ## MainState
  40. type MainState* = ref object of State
  41.   num: int
  42.   curNum: float
  43.   nextNum: float
  44.   world: Elem
  45.   numberBox: Elem
  46.   url: Elem
  47.  
  48. method init(state: MainState) =
  49.   state.world = state.mgr.owner.add("world")
  50.  
  51.   var cam = state.mgr.owner.add("mainCam")
  52.   cam.attach(Camera(size: 10))
  53.   cam.pos = vector2d(0, 0)
  54.  
  55.   state.numberBox = state.world.add("numberBox")
  56.   state.numberBox.attach(VecText(
  57.     text: "0",
  58.     textAlign: TextAlign.center,
  59.     scale: vector2d(1, 1),
  60.     spacing: vector2d(0.2, 0.2),
  61.     slant: 0.0,
  62.     color: color(255, 255, 255, 255)
  63.   ))
  64.   state.numberBox.pos = vector2d(0, 0)
  65.  
  66.   state.url = state.world.add("url")
  67.   state.url.attach(VecText(
  68.     text: "github.com/rezich/nch",
  69.     textAlign: TextAlign.center,
  70.     scale: vector2d(0.3, 0.175),
  71.     spacing: vector2d(0.05, 0.1),
  72.     slant: 0.0,
  73.     color: color(63, 63, 63, 255)
  74.   ))
  75.   state.url.pos = vector2d(0, -4.75)
  76.  
  77. method handleInput(state: MainState, input: ptr InputMgr): bool =
  78.   if input.getKeyState(SDL_SCANCODE_ESCAPE) == BtnState.pressed:
  79.     state.mgr.push(PauseState())
  80.     return true
  81.   if input.getKeyState(SDL_SCANCODE_SPACE) == BtnState.pressed:
  82.     inc state.num
  83.     getComp[VecText](state.numberBox).text = $state.num
  84.   true
  85.  
  86. method tick(state: MainState, ev: TickEvent): bool =
  87.   state.curNum += ev.dt
  88.   while state.curNum >= 1.0:
  89.     state.curNum -= 1.0
  90.     inc state.num
  91.     getComp[VecText](state.numberBox).text = $state.num
  92.   false
  93.  
  94. ## Main
  95. if isMainModule:
  96.   var app = elem("nch demo: number box")
  97.  
  98.   reg[TimestepMgr](app, 1)
  99.   app.attach(TimestepMgr())
  100.   defer: getComp[TimestepMgr](app).initialize()
  101.   reg[InputMgr](app, 1)
  102.   reg[Renderer](app, 1)
  103.   reg[StateMgr](app, 1)
  104.  
  105.   app.attach(InputMgr())
  106.   app.attach(Renderer(width: 640, height: 480))
  107.  
  108.   reg[VecText](app, 1024)
  109.  
  110.   app.attach(StateMgr()).push(MainState())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement