consoleparty 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []