func gameloop(screen *sdl.Surface) { gc := &GameContext{screen, 320, 16} for { e := sdl.WaitEvent() screen.FillRect(nil, 0x0) gc.drawFloor() gc.drawPlayer() gc.drawObjects() switch re := e.(type) { case *sdl.QuitEvent: return case *sdl.MouseMotionEvent: screen.FillRect(&sdl.Rect{ int16(re.X), int16(re.Y), 50, 50}, 0xffffff) screen.Blit(&sdl.Rect{ int16(re.X), int16(re.Y), 0, 0}, playerTexture, nil) fmt.Println(re.X, re.Y) case *sdl.KeyboardEvent: if re.Type == sdl.KEYDOWN { keyname := sdl.GetKeyName(sdl.Key(re.Keysym.Sym)) fmt.Println("pressed:", keyname) switch keyname { case "right": gc.moveRight() case "left": gc.moveLeft() case "q": return } } else if re.Type == sdl.KEYUP { gc.resetPlayerSpeed() } default: //fmt.Println("What the heck?!") } gc.Dump() screen.Flip() } }
func (o *Object) Draw(surface *sdl.Surface, gc *GameContext) { windowStartX := int16(gc.PlayerPosition - 320) // "move" the object according to the window drawRect := &sdl.Rect{ X: o.Rect.X - windowStartX, Y: o.Rect.Y, W: o.Rect.W, H: o.Rect.H, } surface.FillRect(drawRect, o.Color) }
func initFillBox(screen *sdl.Surface) { /*{{{*/ for i := range paint_chan { if i.f.T == i.c { continue } i.f.T = i.c screen.FillRect(i.f.toRect(), uint32(i.c)) // Do updates of screen in the main loop. //screen.UpdateRect(i.f.ToFourTuple()); } /*}}}*/ }
/* * Draw a grid on the display and return info about the Tile */ func drawGrid(screen *sdl.Surface) { /*{{{*/ vid := sdl.GetVideoInfo() // First the vertical for i := 0; i < int(vid.Current_w); i += SIZE { screen.FillRect( &sdl.Rect{int16(i), int16(0), 1, uint16(vid.Current_h)}, 0x000000) screen.UpdateRect(int32(i), 0, 1, uint32(vid.Current_h)) } // Then the horizontal for i := 0; i < int(vid.Current_h); i += SIZE { screen.FillRect( &sdl.Rect{0, int16(i), uint16(vid.Current_w), 1}, 0x000000) screen.UpdateRect(0, int32(i), uint32(vid.Current_w), 1) } return /*}}}*/ }