petli 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -3
- data/LICENSE +1 -1
- data/bin/anim +3 -8
- data/bin/petli +13 -10
- data/data/poop.txtanim +2 -2
- data/lib/petli/pet/death.rb +29 -5
- data/lib/petli/pet/food.rb +9 -6
- data/lib/petli/pet.rb +0 -4
- data/lib/petli/stages/base.rb +10 -4
- data/lib/petli/stages/dice.rb +7 -5
- data/lib/petli/stages/feed.rb +9 -9
- data/lib/petli/stages/guess.rb +6 -4
- data/lib/petli/stages/main.rb +7 -11
- data/lib/petli/stages/play.rb +5 -7
- data/lib/petli/version.rb +1 -1
- data/lib/tatty/atlas.rb +4 -0
- data/lib/tatty.rb +2 -4
- data/petli.gemspec +1 -1
- metadata +5 -7
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 05a633461e7b8d56e725df4c11e7e46cfd4877d5cd269289c10a466cea5c4c42
|
|
4
|
+
data.tar.gz: 2f39e13184061908e8f337e1283b7b8f798ee0203a1edc82ad487707cc59cb2c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fb7341dee8c0668b1ffdd2251e97501cd79251d39346c26d28103a1481409a30a0ba55e9d692fbfc991ec0dbaf33ccfff4b4b3a76363d808c64d5f2dc88adfae
|
|
7
|
+
data.tar.gz: 251b601b1e23126c8e6c60ddb34b36c73f9c81b4c14befe724b383e32d28e92948f700164004e6b6c2997b5df8cc6f6289350269c6666a279628a586feadbbf3
|
data/Gemfile.lock
CHANGED
|
@@ -8,7 +8,7 @@ PATH
|
|
|
8
8
|
tty-cursor (~> 0.7.1)
|
|
9
9
|
tty-platform (~> 0.3.0)
|
|
10
10
|
tty-reader (~> 0.9.0)
|
|
11
|
-
tty-screen (~> 0.8.
|
|
11
|
+
tty-screen (~> 0.8.2)
|
|
12
12
|
|
|
13
13
|
GEM
|
|
14
14
|
remote: https://rubygems.org/
|
|
@@ -31,17 +31,18 @@ GEM
|
|
|
31
31
|
tty-cursor (~> 0.7)
|
|
32
32
|
tty-screen (~> 0.8)
|
|
33
33
|
wisper (~> 2.0)
|
|
34
|
-
tty-screen (0.8.
|
|
34
|
+
tty-screen (0.8.2)
|
|
35
35
|
unicode-display_width (2.1.0)
|
|
36
36
|
unicode_utils (1.4.0)
|
|
37
37
|
wisper (2.0.1)
|
|
38
38
|
|
|
39
39
|
PLATFORMS
|
|
40
40
|
arm64-darwin-20
|
|
41
|
+
arm64-darwin-25
|
|
41
42
|
x86_64-darwin-20
|
|
42
43
|
|
|
43
44
|
DEPENDENCIES
|
|
44
45
|
petli!
|
|
45
46
|
|
|
46
47
|
BUNDLED WITH
|
|
47
|
-
|
|
48
|
+
4.0.12
|
data/LICENSE
CHANGED
data/bin/anim
CHANGED
|
@@ -16,14 +16,9 @@ class Animate < Tatty::Stage
|
|
|
16
16
|
done = @animation.step
|
|
17
17
|
@animation.reset if !@animation.loop and done
|
|
18
18
|
render_at(0, 0, @animation.display)
|
|
19
|
+
render_at(0, 5, "Animation: #{@animation.name}")
|
|
19
20
|
end
|
|
20
21
|
end
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
animation = Tatty::Anim.from_atlas(filepath, name: name)
|
|
25
|
-
if animation.nil?
|
|
26
|
-
puts "Cannot find animation '#{name}'"
|
|
27
|
-
else
|
|
28
|
-
Tatty.run(Animate, animation: animation)
|
|
29
|
-
end
|
|
23
|
+
atlas = Tatty::Atlas.new(ARGV[0])
|
|
24
|
+
Tatty.run(Animate, animation: atlas[ARGV[1] || :default] || atlas[atlas.names.first])
|
data/bin/petli
CHANGED
|
@@ -7,10 +7,9 @@ OptionParser.new do |opts|
|
|
|
7
7
|
opts.banner = "Usage: petli [options]"
|
|
8
8
|
opts.on("-r", "--reset", "Reset button to start over again") {|v| options[:reset] = v }
|
|
9
9
|
opts.on("-s", "--status", "Dump pet status") {|v| options[:status] = v}
|
|
10
|
-
opts.on("-
|
|
11
|
-
opts.on("-c", "--
|
|
12
|
-
opts.on("-
|
|
13
|
-
opts.on("-l", "--clean", "Clean up any 'dirt' without viewing") {|v| options[:clean] = v}
|
|
10
|
+
opts.on("-f FOOD", "--feed=FOOD", "Feed your pet bread without viewing") {|v| options[:feed] = v}
|
|
11
|
+
opts.on("-c", "--clean", "Clean up any 'dirt' without viewing") {|v| options[:clean] = v}
|
|
12
|
+
opts.on("-l", "--light", "Hit the lightswitch") {|v| options[:light] = v}
|
|
14
13
|
opts.on("-p", "--path [PATH]", "path to your pet data (defaults to system config dir)") do |v|
|
|
15
14
|
$tattydboverridepath = v
|
|
16
15
|
end
|
|
@@ -18,18 +17,22 @@ end.parse!
|
|
|
18
17
|
|
|
19
18
|
pet = Petli::Pet.new
|
|
20
19
|
pet.display # force pet to update first
|
|
20
|
+
FOOD_OPTIONS = [:bread, :candy, :medicine]
|
|
21
21
|
|
|
22
22
|
if options[:reset]
|
|
23
23
|
Tatty::DB.clear
|
|
24
24
|
puts "Goodbye. I hope you love your next pet!"
|
|
25
25
|
elsif options[:status]
|
|
26
26
|
puts Tatty::DB.dump
|
|
27
|
-
elsif options[:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
elsif options[:feed]
|
|
28
|
+
if [:bread, :candy, :medicine].include?(options[:feed].to_sym)
|
|
29
|
+
pet.feed!(food: options[:feed].to_sym)
|
|
30
|
+
else
|
|
31
|
+
puts "Unknown food #{options[:feed]}, only accepts #{FOOD_OPTIONS.join(", ")}"
|
|
32
|
+
exit 1
|
|
33
|
+
end
|
|
34
|
+
elsif options[:light]
|
|
35
|
+
pet.light_switch
|
|
33
36
|
elsif options[:clean]
|
|
34
37
|
pet.clean
|
|
35
38
|
else
|
data/data/poop.txtanim
CHANGED
data/lib/petli/pet/death.rb
CHANGED
|
@@ -6,16 +6,40 @@ module Petli
|
|
|
6
6
|
db_attr :died_at
|
|
7
7
|
|
|
8
8
|
def check_if_dead
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
self.died_at = Time.now
|
|
9
|
+
die! if unhappy? && unhealthy? && (too_sick? || too_hungry?)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def die!
|
|
13
|
+
self.died_at = Time.now
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def sick?
|
|
17
|
+
self.sick > 0
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def too_sick?
|
|
21
|
+
self.sick > 2
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def too_hungry?
|
|
25
|
+
days_since(self.last_meal) >= 1
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def unhappy?
|
|
29
|
+
self.happiness <= 1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def unhealthy?
|
|
33
|
+
self.health <= 1
|
|
14
34
|
end
|
|
15
35
|
|
|
16
36
|
def dead?
|
|
17
37
|
!self.died_at.nil?
|
|
18
38
|
end
|
|
39
|
+
|
|
40
|
+
def lifetime
|
|
41
|
+
(self.died_at.nil? ? days_since(self.birth) : days_since(self.birth, self.died_at)).to_i
|
|
42
|
+
end
|
|
19
43
|
end
|
|
20
44
|
end
|
|
21
45
|
end
|
data/lib/petli/pet/food.rb
CHANGED
|
@@ -12,12 +12,7 @@ module Petli
|
|
|
12
12
|
|
|
13
13
|
def update_hunger
|
|
14
14
|
for_hours_since(last_meal) do |i, hr_ago|
|
|
15
|
-
|
|
16
|
-
next if rand <= 0.3
|
|
17
|
-
self.health = [1, self.health-1].max
|
|
18
|
-
self.happiness = [1, self.happiness-1].max
|
|
19
|
-
self.poops << hr_ago if rand <= 0.8 && self.poops.count < POOP_LOCATIONS.count
|
|
20
|
-
self.sick = self.poops.filter{|poop| hours_since(poop) > 1 }.count
|
|
15
|
+
hunger(hr_ago) if rand >= 0.3
|
|
21
16
|
end
|
|
22
17
|
end
|
|
23
18
|
|
|
@@ -34,6 +29,14 @@ module Petli
|
|
|
34
29
|
self.sick = [0, self.sick - 1].max if food == :medicine
|
|
35
30
|
end
|
|
36
31
|
|
|
32
|
+
def hunger(hr_ago=hours_ago(1))
|
|
33
|
+
self.health = [1, self.health-1].max
|
|
34
|
+
self.happiness = [1, self.happiness-1].max
|
|
35
|
+
self.poops = self.poops + [hr_ago] if rand <= 0.4 && self.poops.count < POOP_LOCATIONS.count
|
|
36
|
+
self.sick = [self.poops.filter{|poop| hours_since(poop) > 1 }.count, 3].min
|
|
37
|
+
self.last_meal = Time.now
|
|
38
|
+
end
|
|
39
|
+
|
|
37
40
|
def clean
|
|
38
41
|
self.poops = []
|
|
39
42
|
end
|
data/lib/petli/pet.rb
CHANGED
data/lib/petli/stages/base.rb
CHANGED
|
@@ -14,21 +14,27 @@ module Petli
|
|
|
14
14
|
end
|
|
15
15
|
|
|
16
16
|
def keypress(event)
|
|
17
|
-
|
|
17
|
+
key = event.value.downcase
|
|
18
|
+
exit if key == "q" || key == "\e" || key == "x"
|
|
18
19
|
return if @pet.busy? || @pet.dead?
|
|
19
20
|
@page -= 1 if event.key.name == :left && @page > 0
|
|
20
21
|
@page += 1 if event.key.name == :right && @page < action_pages.count - 1
|
|
21
|
-
|
|
22
|
+
keyact = self.actions.keys.find{|k| k[0].to_s.downcase == key}
|
|
23
|
+
if !keyact.nil?
|
|
24
|
+
actions[keyact].call
|
|
25
|
+
elsif !self.actions[:else].nil?
|
|
26
|
+
actions[:else].call
|
|
27
|
+
end
|
|
22
28
|
end
|
|
23
29
|
|
|
24
30
|
def actions
|
|
25
|
-
|
|
31
|
+
{}
|
|
26
32
|
end
|
|
27
33
|
|
|
28
34
|
def action_pages
|
|
29
35
|
pages = []
|
|
30
36
|
current_page = []
|
|
31
|
-
fmt_actions = self.actions.map{|a| "[#{a[0].capitalize}]#{a[1..]}"}
|
|
37
|
+
fmt_actions = self.actions.filter{|a,b| a != :else}.keys.map{|a| "[#{a[0].capitalize}]#{a[1..]}"}
|
|
32
38
|
fmt_actions.each do |action|
|
|
33
39
|
len = (current_page + [action]).join(" ").length
|
|
34
40
|
if len >= GAME_WIDTH-2
|
data/lib/petli/stages/dice.rb
CHANGED
|
@@ -10,7 +10,10 @@ module Petli
|
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
def actions
|
|
13
|
-
|
|
13
|
+
{
|
|
14
|
+
higher: -> {pick("h")},
|
|
15
|
+
lower: -> {pick("l")},
|
|
16
|
+
}
|
|
14
17
|
end
|
|
15
18
|
|
|
16
19
|
def enter
|
|
@@ -24,11 +27,10 @@ module Petli
|
|
|
24
27
|
def roll
|
|
25
28
|
end
|
|
26
29
|
|
|
27
|
-
def
|
|
28
|
-
return if event.value != "h" and event.value != "l"
|
|
29
|
-
@pickedhigher = event.value == "h"
|
|
30
|
+
def pick(dir)
|
|
30
31
|
@pick = (1..6).to_a.sample
|
|
31
|
-
@
|
|
32
|
+
@pickedhigher = dir == "h"
|
|
33
|
+
@won = (dir == "h" && @pick > @value) || (dir == "l" && @pick < @value)
|
|
32
34
|
@won ? @pet.celebrate : @pet.embarass
|
|
33
35
|
@countdown = 10
|
|
34
36
|
end
|
data/lib/petli/stages/feed.rb
CHANGED
|
@@ -2,17 +2,17 @@ module Petli
|
|
|
2
2
|
module Stages
|
|
3
3
|
class Feed < Base
|
|
4
4
|
def actions
|
|
5
|
-
|
|
5
|
+
acts = {
|
|
6
|
+
bread: -> {feed(:bread)},
|
|
7
|
+
snack: -> {feed(:candy)},
|
|
8
|
+
else: -> {goto(Main, pet: @pet)},
|
|
9
|
+
}
|
|
10
|
+
acts[:med] = -> {feed(:medicine)} if @pet.sick?
|
|
11
|
+
acts
|
|
6
12
|
end
|
|
7
13
|
|
|
8
|
-
def
|
|
9
|
-
|
|
10
|
-
@pet.feed(food: :bread)
|
|
11
|
-
elsif event.value == "s"
|
|
12
|
-
@pet.feed(food: :candy)
|
|
13
|
-
elsif event.value == "m"
|
|
14
|
-
@pet.feed(food: :medicine)
|
|
15
|
-
end
|
|
14
|
+
def feed(food)
|
|
15
|
+
@pet.feed(food: food)
|
|
16
16
|
goto(Main, pet: @pet)
|
|
17
17
|
end
|
|
18
18
|
end
|
data/lib/petli/stages/guess.rb
CHANGED
|
@@ -8,7 +8,10 @@ module Petli
|
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def actions
|
|
11
|
-
|
|
11
|
+
{
|
|
12
|
+
left: -> {pick("l")},
|
|
13
|
+
right: -> {pick("r")},
|
|
14
|
+
}
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def enter
|
|
@@ -19,10 +22,9 @@ module Petli
|
|
|
19
22
|
@pet.reset
|
|
20
23
|
end
|
|
21
24
|
|
|
22
|
-
def
|
|
23
|
-
return if event.value != "l" and event.value != "r"
|
|
25
|
+
def pick(dir)
|
|
24
26
|
@petpickedleft = rand(1..2) == 1
|
|
25
|
-
@pickedleft =
|
|
27
|
+
@pickedleft = dir == "l"
|
|
26
28
|
(@petpickedleft == @pickedleft) ? @pet.celebrate : @pet.embarass
|
|
27
29
|
@countdown = 10
|
|
28
30
|
end
|
data/lib/petli/stages/main.rb
CHANGED
|
@@ -2,19 +2,15 @@ module Petli
|
|
|
2
2
|
module Stages
|
|
3
3
|
class Main < Base
|
|
4
4
|
def actions
|
|
5
|
-
return
|
|
6
|
-
acts =
|
|
7
|
-
|
|
5
|
+
return {light: -> {@pet.light_switch}} if @pet.lights_out
|
|
6
|
+
acts = {
|
|
7
|
+
play: -> {goto(Play, pet: @pet)},
|
|
8
|
+
feed: -> {goto(Feed, pet: @pet)},
|
|
9
|
+
light: -> {@pet.light_switch},
|
|
10
|
+
}
|
|
11
|
+
acts[:clean] = -> {@pet.clean} if @pet.poops.count > 0
|
|
8
12
|
acts
|
|
9
13
|
end
|
|
10
|
-
|
|
11
|
-
def onkey(event)
|
|
12
|
-
return @pet.light_switch if event.value == "l"
|
|
13
|
-
return if @pet.lights_out
|
|
14
|
-
return goto(Feed, pet: @pet) if event.value == "f"
|
|
15
|
-
return @pet.clean if event.value == "c"
|
|
16
|
-
return goto(Play, pet: @pet) if event.value == "p"
|
|
17
|
-
end
|
|
18
14
|
end
|
|
19
15
|
end
|
|
20
16
|
end
|
data/lib/petli/stages/play.rb
CHANGED
|
@@ -2,13 +2,11 @@ module Petli
|
|
|
2
2
|
module Stages
|
|
3
3
|
class Play < Base
|
|
4
4
|
def actions
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return goto(Guess, pet: @pet) if event.value == "g"
|
|
11
|
-
goto(Main, pet: @pet)
|
|
5
|
+
{
|
|
6
|
+
guess: -> {goto(Guess, pet: @pet)},
|
|
7
|
+
dice: -> {goto(Dice, pet: @pet)},
|
|
8
|
+
else: -> {goto(Main, pet: @pet)},
|
|
9
|
+
}
|
|
12
10
|
end
|
|
13
11
|
end
|
|
14
12
|
end
|
data/lib/petli/version.rb
CHANGED
data/lib/tatty/atlas.rb
CHANGED
data/lib/tatty.rb
CHANGED
|
@@ -9,10 +9,8 @@ module Tatty
|
|
|
9
9
|
|
|
10
10
|
def self.run(klass, **kargs)
|
|
11
11
|
self.goto(klass, **kargs)
|
|
12
|
-
@reader = TTY::Reader.new
|
|
13
|
-
@reader.on(:keypress)
|
|
14
|
-
self.stage.keypress(event)
|
|
15
|
-
end
|
|
12
|
+
@reader = TTY::Reader.new(track_history: false)
|
|
13
|
+
@reader.on(:keypress){|e| self.stage.keypress(e)}
|
|
16
14
|
|
|
17
15
|
begin
|
|
18
16
|
TTY::Cursor.invisible do
|
data/petli.gemspec
CHANGED
|
@@ -33,7 +33,7 @@ Gem::Specification.new do |s|
|
|
|
33
33
|
|
|
34
34
|
s.add_dependency("pastel", "~> 0.8.0")
|
|
35
35
|
s.add_dependency("tty-cursor", "~> 0.7.1")
|
|
36
|
-
s.add_dependency("tty-screen", "~> 0.8.
|
|
36
|
+
s.add_dependency("tty-screen", "~> 0.8.2")
|
|
37
37
|
s.add_dependency("tty-reader", "~> 0.9.0")
|
|
38
38
|
s.add_dependency("tty-color", "~> 0.6.0")
|
|
39
39
|
s.add_dependency("tty-box", "~> 0.7.0")
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: petli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tim Anema
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: pastel
|
|
@@ -44,14 +43,14 @@ dependencies:
|
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: 0.8.
|
|
46
|
+
version: 0.8.2
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: 0.8.
|
|
53
|
+
version: 0.8.2
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
55
|
name: tty-reader
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -185,8 +184,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
185
184
|
- !ruby/object:Gem::Version
|
|
186
185
|
version: '0'
|
|
187
186
|
requirements: []
|
|
188
|
-
rubygems_version: 3.
|
|
189
|
-
signing_key:
|
|
187
|
+
rubygems_version: 3.6.7
|
|
190
188
|
specification_version: 4
|
|
191
189
|
summary: A little pet in your console
|
|
192
190
|
test_files: []
|