You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EasyDarwin/vendor/github.com/common-nighthawk/go-figure/public_methods.go

94 lines
2.0 KiB

6 years ago
package figure
import (
"fmt"
"io"
"strings"
"time"
)
//stdout
func (fig figure) Print() {
for _, printRow := range fig.Slicify() {
fmt.Println(printRow)
}
}
func (fig figure) String() string {
s := ""
for _, printRow := range fig.Slicify() {
s += fmt.Sprintf("%s\n", printRow)
}
return s
}
func (fig figure) Scroll(duration, stillness int, direction string) {
endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
fig.phrase = fig.phrase + " "
clearScreen()
for time.Now().Before(endTime) {
var shiftedPhrase string
chars := []byte(fig.phrase)
if strings.HasPrefix(strings.ToLower(direction), "r") {
shiftedPhrase = string(append(chars[len(chars)-1:], chars[0:len(chars)-1]...))
} else {
shiftedPhrase = string(append(chars[1:len(chars)], chars[0]))
}
fig.phrase = shiftedPhrase
fig.Print()
sleep(stillness)
clearScreen()
}
}
func (fig figure) Blink(duration, timeOn, timeOff int) {
if timeOff < 0 {
timeOff = timeOn
}
endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
clearScreen()
for time.Now().Before(endTime) {
fig.Print()
sleep(timeOn)
clearScreen()
sleep(timeOff)
}
}
func (fig figure) Dance(duration, freeze int) {
endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
font := fig.font //TODO: change to deep copy
font.evenLetters()
figures := []figure{figure{font: font}, figure{font: font}}
clearScreen()
for i, c := range fig.phrase {
appenders := []string{" ", " "}
appenders[i%2] = string(c)
for f, _ := range figures {
figures[f].phrase = figures[f].phrase + appenders[f]
}
}
for p := 0; time.Now().Before(endTime); p ^= 1 {
figures[p].Print()
figures[1-p].Print()
sleep(freeze)
clearScreen()
}
}
//writers
func Write(w io.Writer, fig figure) {
for _, printRow := range fig.Slicify() {
fmt.Fprintf(w, "%v\n", printRow)
}
}
//helpers
func clearScreen() {
fmt.Print("\033[H\033[2J")
}
func sleep(milliseconds int) {
time.Sleep(time.Duration(milliseconds) * time.Millisecond)
}