func main() { gotAttrs, initAttrs := console.GetScreenBufferInfo() if gotAttrs { defer console.SetScreenBufferInfo(initAttrs) } rCon := setup() console.SetCursorProperties(1, false) console.ClearScreen(80, 25) sprite := new(rc.Sprite) sprite.X = 4 sprite.Y = 3 spriteChars := rc.StringToArray(2, 2, "SSS ") rc.Replace(&spriteChars, ' ', rc.TransparancyChar) spriteColors := rc.FillArrayI(2, 2, console.ChFgCyan) spriteColors[0][1] = console.ChFgGreen | console.ChBgDarkMagenta sprite.SetGraphics(spriteChars, spriteColors) rCon.RegisterSprite(sprite, 0) rCon.Draw() for { isHit, char := console.GetKey() if isHit { char = strings.ToLower(char) switch char { case "w": if sprite.Y > 0 { sprite.Y-- } case "a": if sprite.X > 0 { sprite.X-- } case "s": if sprite.Y < rCon.EnvHeight { sprite.Y++ } case "d": if sprite.X < rCon.EnvWidth { sprite.X++ } case "q": return } rCon.Draw() } } }
func (btn *Button) draw() { btn.sprite.X = btn.x btn.sprite.Y = btn.y rectWidth := len(btn.text) + (btn.xPadding * 2) rectHeight := (btn.yPadding * 2) + 1 //+1 for the shadow rBuffer := rc.FillArrayR(rectWidth+1, rectHeight+1, rc.TransparancyChar) cBuffer := rc.FillArrayI(rectWidth+1, rectHeight+1, 0) //draw the shadow if !btn.isPressed { for i := 1; i <= rectWidth; i++ { rBuffer[rectHeight][i] = ' ' cBuffer[rectHeight][i] = btn.shadowColor } for i := 1; i <= rectHeight; i++ { rBuffer[i][rectWidth] = ' ' cBuffer[i][rectWidth] = btn.shadowColor } } //draw the box rectOffset := 0 if btn.isPressed { rectOffset = 1 } fgColor := btn.enabledTextColor bgColor := btn.enabledBgColor if btn.hasFocus { bgColor = btn.focusedBGColor } if !btn.isEnabled { fgColor = btn.disabledTextColor bgColor = btn.disabledBgColor } rectColor := fgColor | bgColor for row := 0; row < rectHeight; row++ { for col := 0; col < rectWidth; col++ { rBuffer[row+rectOffset][col+rectOffset] = ' ' cBuffer[row+rectOffset][col+rectOffset] = rectColor } } textRow := btn.yPadding + rectOffset textIndent := btn.xPadding + rectOffset textSlice := []rune(btn.text) for i := 0; i < len(textSlice); i++ { rBuffer[textRow][textIndent+i] = textSlice[i] } btn.sprite.SetGraphics(rBuffer, cBuffer) btn.owner.InvalidateVisual() }
func setup() *rc.RogueConsole { con := rc.NewRogueConsole(25, 9, 25, 9) redArray := rc.FillArrayI(25, 9, console.ChFgRed) greenArray := rc.FillArrayI(25, 9, console.ChFgGreen) blueArray := rc.FillArrayI(25, 9, console.ChFgBlue) yellowArray := rc.FillArrayI(25, 9, console.ChFgYellow) bg1 := rc.StringToArray(25, 9, "┌───────────────────────┐"+ "│ │"+ "│ │"+ "│ │"+ "│ │"+ "│ │"+ "│ │"+ "│ │"+ "└───────────────────────┘") bg2 := rc.StringToArray(25, 9, " "+ " "+ " /─\\ "+ " \\─/ "+ " "+ " 1234 "+ " "+ " "+ " ") fg1 := rc.StringToArray(25, 9, " "+ " "+ " ab "+ " "+ " "+ " "+ " "+ " "+ " ") fg2 := rc.StringToArray(25, 9, " "+ " "+ " c "+ " d "+ " "+ " "+ " "+ " "+ " ") rc.Replace(&bg1, ' ', rc.TransparancyChar) rc.Replace(&bg2, ' ', rc.TransparancyChar) rc.Replace(&fg1, ' ', rc.TransparancyChar) rc.Replace(&fg2, ' ', rc.TransparancyChar) con.AddBackground(bg1, redArray) con.AddBackground(bg2, greenArray) con.AddForeground(fg1, blueArray) con.AddForeground(fg2, yellowArray) con.CameraX = 0 con.CameraY = 0 return con }