...
1 package figure
2
3 import (
4 "fmt"
5 "io"
6 "strings"
7 "time"
8 )
9
10
11 func (fig figure) Print() {
12 for _, printRow := range fig.Slicify() {
13 if fig.color != "" {
14 printRow = colors[fig.color] + printRow + colors["reset"]
15 }
16 fmt.Println(printRow)
17 }
18 }
19
20
21 func (fig figure) ColorString() string {
22 s := ""
23 for _, printRow := range fig.Slicify() {
24 if fig.color != "" {
25 printRow = colors[fig.color] + printRow + colors["reset"]
26 }
27 s += fmt.Sprintf("%s\n", printRow)
28 }
29 return s
30 }
31
32 func (fig figure) String() string {
33 s := ""
34 for _, printRow := range fig.Slicify() {
35 s += fmt.Sprintf("%s\n", printRow)
36 }
37 return s
38 }
39
40 func (fig figure) Scroll(duration, stillness int, direction string) {
41 endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
42 fig.phrase = fig.phrase + " "
43 clearScreen()
44 for time.Now().Before(endTime) {
45 var shiftedPhrase string
46 chars := []byte(fig.phrase)
47 if strings.HasPrefix(strings.ToLower(direction), "r") {
48 shiftedPhrase = string(append(chars[len(chars)-1:], chars[0:len(chars)-1]...))
49 } else {
50 shiftedPhrase = string(append(chars[1:len(chars)], chars[0]))
51 }
52 fig.phrase = shiftedPhrase
53 fig.Print()
54 sleep(stillness)
55 clearScreen()
56 }
57 }
58
59 func (fig figure) Blink(duration, timeOn, timeOff int) {
60 if timeOff < 0 {
61 timeOff = timeOn
62 }
63 endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
64 clearScreen()
65 for time.Now().Before(endTime) {
66 fig.Print()
67 sleep(timeOn)
68 clearScreen()
69 sleep(timeOff)
70 }
71 }
72
73 func (fig figure) Dance(duration, freeze int) {
74 endTime := time.Now().Add(time.Duration(duration) * time.Millisecond)
75 font := fig.font
76 font.evenLetters()
77 figures := []figure{figure{font: font}, figure{font: font}}
78 clearScreen()
79 for i, c := range fig.phrase {
80 appenders := []string{" ", " "}
81 appenders[i%2] = string(c)
82 for f, _ := range figures {
83 figures[f].phrase = figures[f].phrase + appenders[f]
84 }
85 }
86 for p := 0; time.Now().Before(endTime); p ^= 1 {
87 figures[p].Print()
88 figures[1-p].Print()
89 sleep(freeze)
90 clearScreen()
91 }
92 }
93
94
95 func Write(w io.Writer, fig figure) {
96 for _, printRow := range fig.Slicify() {
97 fmt.Fprintf(w, "%v\n", printRow)
98 }
99 }
100
101
102 func clearScreen() {
103 fmt.Print("\033[H\033[2J")
104 }
105
106 func sleep(milliseconds int) {
107 time.Sleep(time.Duration(milliseconds) * time.Millisecond)
108 }
109
View as plain text