consoleparty 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/party +3 -0
- data/lib/party.rb +208 -0
- 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
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: []
|