consoleparty 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/party +3 -0
  3. data/lib/party.rb +208 -0
  4. metadata +75 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6c14573b6796d64dde5e87419504ee15659506b0
4
+ data.tar.gz: c368fced00ec17f5fc61f37342595ab0a8645be7
5
+ SHA512:
6
+ metadata.gz: 5964bdb969cd32c5a33583b4933688a45cadad25440ae09217b8db5056e4c871e0433f2f64956bc395679fed59a798eb6ee7de2ab6eb37daf7a5500901fd44f4
7
+ data.tar.gz: cae41ed34bcb99f92b46bcd6acbd9edad4302de06be3ebfca7999e71d22dc77161122d587ecc0d6f3021a26a078e0a10c26d6d6eea7243d43d3edd0a38c314fa
data/bin/party ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'party'
data/lib/party.rb ADDED
@@ -0,0 +1,208 @@
1
+ require 'curses'
2
+ require 'getoptlong'
3
+
4
+ opts = GetoptLong.new(
5
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT ],
6
+ [ '--farewell', '-f', GetoptLong::OPTIONAL_ARGUMENT ],
7
+ [ '--silent', '-s', GetoptLong::OPTIONAL_ARGUMENT ]
8
+ )
9
+
10
+ silent = false
11
+ farewell = false
12
+ stuff_to_say = ["Party", "Wo-hoo", "Party", "Yeah"]
13
+ opts.each do |opt, arg|
14
+ case opt
15
+ when '--help'
16
+ puts <<~EOF
17
+ party [--silent] ... ["Things", "To", "Say"]
18
+
19
+ -h, --help:
20
+ show help
21
+
22
+ -f [greeting], --farewell [greeting]:
23
+ says greeting at the end, or "I had a great time" by default
24
+
25
+ -s, --silent:
26
+ start a silent party (without MC)
27
+ EOF
28
+ exit()
29
+ when '--farewell'
30
+ if arg == ''
31
+ farewell = "Ei häd äh Grad Tim"
32
+ else
33
+ farewell = arg
34
+ end
35
+ when '--silent'
36
+ silent = true
37
+ end
38
+ end
39
+
40
+ if ARGV.length != 0
41
+ stuff_to_say = ARGV
42
+ end
43
+
44
+
45
+ include Curses
46
+ class Party
47
+
48
+ def self.start(silent, farewell, stuff_to_say)
49
+ interrupted = false
50
+ cols = (%x( tput cols )).to_i
51
+ lines = (%x( tput lines )).to_i
52
+ rec_width = 54
53
+ rec_height = 20
54
+ rec_left_x = cols/2-rec_width/2
55
+ rec_left_y = lines/2-rec_height/2
56
+ init_screen
57
+ start_color
58
+ init_pair(0,COLOR_BLACK, COLOR_YELLOW)
59
+ init_pair(1,COLOR_WHITE, COLOR_BLUE)
60
+ init_pair(2,COLOR_BLACK,COLOR_RED)
61
+ init_pair(3,COLOR_RED,COLOR_BLACK)
62
+ init_pair(4,COLOR_BLACK,COLOR_WHITE)
63
+ init_pair(5,COLOR_BLACK,COLOR_MAGENTA)
64
+ sem = Mutex.new
65
+ talking = Mutex.new
66
+ rect = Thread.new {
67
+ i = 1
68
+ delta = 1
69
+ while !interrupted
70
+ sleep_time = (1.0/i.to_f)*1.3
71
+ sem.synchronize {
72
+ draw_rect(rec_left_x,rec_left_y,rec_width,rec_height, color_pair((i+3)%5), color_pair((i+3)%5), "PARTY")
73
+ }
74
+ sleep(sleep_time)
75
+ sem.synchronize {
76
+ draw_rect(rec_left_x,rec_left_y,rec_width,rec_height, color_pair(1), color_pair(1), "WOHOO")
77
+ }
78
+ sleep(sleep_time)
79
+ i+=delta
80
+ if i == 10
81
+ delta = -1
82
+ end
83
+ if i == 1
84
+ delta = 1
85
+ end
86
+ end
87
+ }
88
+
89
+ saying = Thread.new {
90
+ i = 0
91
+ while !silent
92
+ talking.synchronize{
93
+ %x[say "#{stuff_to_say[i % (stuff_to_say.length) ]}" ];
94
+ }
95
+ i+=1
96
+ end
97
+ }
98
+
99
+ bg_lines = Thread.new {
100
+ color = 0
101
+ while !interrupted
102
+ sleep(1)
103
+ i=0
104
+ while i < lines
105
+ sem.synchronize {
106
+ draw_line(i, lambda { |col, line| rec_left_y <= line && rec_left_y+rec_height >= line && rec_left_x <= col && rec_left_x+rec_width > col})
107
+ refresh
108
+ }
109
+ sleep(0.04)
110
+ i+=1
111
+ end
112
+ sleep(0.5)
113
+ for i in 0..lines
114
+ for j in 0..cols
115
+ sem.synchronize {
116
+ unless rec_left_y <= i && rec_left_y+rec_height >= i && rec_left_x <= j && rec_left_x+rec_width > j
117
+ setpos(i,j)
118
+ attron(color_pair((color%3)+1))
119
+ addstr(" ")
120
+ refresh
121
+ end
122
+ }
123
+ sleep(0.0004)
124
+ end
125
+ end
126
+ color += 1
127
+ end
128
+ }
129
+ trap("INT") {
130
+ rect.kill()
131
+ bg_lines.kill()
132
+ saying.kill()
133
+ }
134
+ bg_lines.join
135
+ rect.join
136
+ saying.join
137
+ close_screen
138
+ if (!silent)
139
+ talking.synchronize {
140
+ if farewell
141
+ %x(say #{farewell} );
142
+ end
143
+ }
144
+ end
145
+ end
146
+
147
+
148
+ def self.draw_rect(leftX, leftY, l, h, rect_color, text_color, string)
149
+ setpos(leftY, leftX)
150
+ attron(rect_color)
151
+ addstr(spaceStr(l))
152
+ for o in 1..(h-1)
153
+ setpos(leftY+o, leftX+l-2)
154
+ attron(rect_color)
155
+ addstr(" ")
156
+ end
157
+ for o in 1..(h-1)
158
+ setpos(leftY+o, leftX)
159
+ addstr(" ")
160
+ end
161
+ setpos(leftY+h,leftX)
162
+ attron(rect_color)
163
+ addstr(spaceStr(l))
164
+ attron(text_color)
165
+
166
+ for j in 0..h-2
167
+ setpos(leftY+1+j, leftX+2)
168
+ for o in 1..(l-4)/string.length
169
+ addstr(string)
170
+ end
171
+ end
172
+ refresh
173
+ end
174
+
175
+
176
+ def self.draw_line(lineNr, should_not_draw)
177
+ setpos(lineNr, 0)
178
+ for i in 0..cols-1
179
+ if (i/3)%3 == 0
180
+ attron(color_pair(5))
181
+ elsif (i/3)%3 == 1
182
+ attron(color_pair(1))
183
+ elsif (i/3)%3 == 2
184
+ attron(color_pair(2))
185
+ end
186
+ unless should_not_draw.call(i, lineNr)
187
+ setpos(lineNr, i)
188
+ addstr(" ")
189
+ end
190
+ end
191
+ end
192
+
193
+ def self.draw_lines_to(lineNr)
194
+ for line in 0..lineNr
195
+ draw_line(line)
196
+ end
197
+ end
198
+
199
+ def self.spaceStr(length)
200
+ s = ""
201
+ for _ in 1..length
202
+ s += " "
203
+ end
204
+ return s
205
+ end
206
+ end
207
+
208
+ Party.start(silent, farewell, stuff_to_say)
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: consoleparty
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Calvin Claus
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-02-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.14'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.14'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description:
42
+ email:
43
+ - calvinclaus@me.com
44
+ executables:
45
+ - party
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - bin/party
50
+ - lib/party.rb
51
+ homepage: http://github.com/calvinclaus
52
+ licenses:
53
+ - MIT
54
+ metadata: {}
55
+ post_install_message:
56
+ rdoc_options: []
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ required_rubygems_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 2.5.2
72
+ signing_key:
73
+ specification_version: 4
74
+ summary: Makes your terminal party.
75
+ test_files: []