hlockey 4 → 6

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 (47) hide show
  1. checksums.yaml +4 -4
  2. data/data/election.json +20 -0
  3. data/data/information.json +5 -0
  4. data/data/league.json +1984 -0
  5. data/data/links.json +5 -0
  6. data/data/previous_election_results.json +98 -0
  7. data/lib/hlockey/actions.rb +22 -0
  8. data/lib/hlockey/constants.rb +6 -0
  9. data/lib/hlockey/data.rb +6 -5
  10. data/lib/hlockey/game/fight.rb +35 -20
  11. data/lib/hlockey/game/weather/audacity.rb +20 -0
  12. data/lib/hlockey/game/weather/chicken.rb +57 -0
  13. data/lib/hlockey/game/weather/incline.rb +43 -0
  14. data/lib/hlockey/game/weather/stars.rb +23 -0
  15. data/lib/hlockey/game/weather/sunset.rb +23 -0
  16. data/lib/hlockey/game/weather/waves.rb +33 -0
  17. data/lib/hlockey/game/weather/weatherable.rb +63 -0
  18. data/lib/hlockey/game/weather.rb +17 -0
  19. data/lib/hlockey/game.rb +123 -89
  20. data/lib/hlockey/league.rb +68 -76
  21. data/lib/hlockey/message.rb +62 -62
  22. data/lib/hlockey/mod/fencebuilder.rb +16 -0
  23. data/lib/hlockey/mod/fencedestroyer.rb +16 -0
  24. data/lib/hlockey/mod/handholding.rb +55 -0
  25. data/lib/hlockey/mod/immaterial.rb +26 -0
  26. data/lib/hlockey/mod/locked.rb +22 -0
  27. data/lib/hlockey/mod/moddable.rb +49 -0
  28. data/lib/hlockey/mod/nonconfrontational.rb +17 -0
  29. data/lib/hlockey/mod/powernapper.rb +46 -0
  30. data/lib/hlockey/mod/punchy.rb +17 -0
  31. data/lib/hlockey/mod.rb +25 -0
  32. data/lib/hlockey/selfdescribable.rb +9 -0
  33. data/lib/hlockey/team/player.rb +58 -0
  34. data/lib/hlockey/team/stadium.rb +52 -0
  35. data/lib/hlockey/team.rb +66 -25
  36. data/lib/hlockey/utils.rb +10 -2
  37. data/lib/hlockey/version.rb +1 -1
  38. metadata +37 -19
  39. data/data/election.yaml +0 -21
  40. data/data/external/names.txt +0 -19948
  41. data/data/information.yaml +0 -24
  42. data/data/league.yaml +0 -1526
  43. data/data/links.yaml +0 -3
  44. data/data/previous_election_results.yaml +0 -59
  45. data/lib/hlockey/game/actions.rb +0 -27
  46. data/lib/hlockey/player.rb +0 -73
  47. data/lib/hlockey/weather.rb +0 -168
data/lib/hlockey/team.rb CHANGED
@@ -1,40 +1,82 @@
1
- require("hlockey/player")
1
+ require("hlockey/team/player")
2
+ require("hlockey/team/stadium")
2
3
 
3
4
  module Hlockey
5
+ ##
6
+ # A team in the league
4
7
  # Created by League when data is loaded
5
8
  class Team
6
- attr_accessor(:wins, :losses, :roster, :shadows, :status, :to_s)
7
- attr_reader(:emoji, :color, :motto)
9
+ attr_accessor(:wins, :losses, :roster, :shadows, :status)
10
+ attr_reader(:name, :emoji, :color, :motto, :stadium, :evolutions)
8
11
 
9
- # random is only used if roster is nil
10
- def initialize(name, color, emoji, roster: nil, shadows: nil, random: Random)
11
- @to_s = name
12
+ alias to_s name
13
+
14
+ # @param name [String]
15
+ # @param color [String]
16
+ # @param emoji [String]
17
+ # @param motto [String]
18
+ # @param stadium [Hash<:full_name, :hlockey_type, :nickname, :description => String>]
19
+ # @param roster [Hash<:lwing, :center, :rwing, :ldef, :goalie, :rdef => Hash>]
20
+ # @param shadows [Array<Hash>]
21
+ def initialize(name:, color:, emoji:, motto:, stadium:, roster:, shadows:,
22
+ evolutions: 0)
23
+ @name = name
12
24
  @color = color
13
25
  @emoji = emoji
14
- @roster = if roster.nil?
15
- %i[lwing center rwing ldef goalie rdef].each_with_object({}) do |pos, h|
16
- h[pos] = Player.new(self, random)
17
- end
18
- else
19
- roster
20
- end
21
- @shadows = shadows.nil? ? Array.new(6) { Player.new(random) } : shadows
22
- @wins = 0
23
- @losses = 0
24
- end
26
+ @motto = motto
27
+ @evolutions = evolutions
28
+
29
+ @stadium = Stadium.new(team: self, **stadium)
30
+
31
+ @roster = roster.transform_values { Player.new(team: self, **_1) }
32
+ @shadows = shadows.map { Player.new(team: self, **_1) }
25
33
 
26
- def w_l
27
- "#{@wins}-#{@losses}"
34
+ @status = :in_contention
35
+ @wins = @losses = 0
28
36
  end
29
37
 
30
- def worst_player_pos
31
- @roster.transform_values { |p| p.stats.values.reduce(:+) }
32
- .min_by { |_, v| v }
33
- .first
38
+ # @return [Hash]
39
+ def to_h(simple: false)
40
+ res = {
41
+ name: @name,
42
+ color: @color,
43
+ emoji: @emoji,
44
+ motto: @motto,
45
+ evolutions: @evolutions,
46
+ stadium: @stadium.to_h(simple:),
47
+ roster: @roster.transform_values { _1.to_h(simple:) },
48
+ shadows: @shadows.map { _1.to_h(simple:) }
49
+ }
50
+
51
+ res.delete(:evolutions) if simple && res[:evolutions].zero?
52
+
53
+ unless simple
54
+ res[:status] = @status
55
+ res[:wins] = @wins
56
+ res[:losses] = @losses
57
+ end
58
+
59
+ res
34
60
  end
35
61
 
62
+ # @return [String] wins/losses in string representation
63
+ def w_l = "#{@wins}-#{@losses}"
64
+
65
+ # @return [Boolean]
66
+ def positive_record? = @wins > @losses
67
+
68
+ # @return [Array<Player>]
69
+ def players = @roster.values + @shadows
70
+
71
+ # @return [Symbol] the position of the worst player on the roster
72
+ def worst_player_pos =
73
+ @roster.transform_values { _1.stats.values.sum }.min_by { _2 }.first
74
+
75
+ # @return [Hash<String => Player>] #roster, but with keys better for displaying
76
+ def roster_display = @roster.transform_keys(&self.class.method(:pos_name))
77
+
36
78
  # Takes symbol from Team roster & converts it to full position name
37
- def self.pos_name(pos)
79
+ def self.pos_name(pos) =
38
80
  case pos
39
81
  when :lwing
40
82
  "Left wing"
@@ -47,6 +89,5 @@ module Hlockey
47
89
  else
48
90
  pos.capitalize.to_s
49
91
  end
50
- end
51
92
  end
52
93
  end
data/lib/hlockey/utils.rb CHANGED
@@ -1,8 +1,16 @@
1
1
  module Hlockey
2
+ ##
3
+ # Utility methods to help with various Hlockey related tasks
2
4
  module Utils
5
+ # Transforms hash keys to be better for displaying the information in the hash
6
+ # @param hash [Hash<#to_s => Object>]
7
+ # @return [Hash<String => Object>] the new hash
8
+ def self.hash_display_keys(hash)
9
+ hash.transform_keys { |key| key.to_s.capitalize.gsub("_", " ") }
10
+ end
11
+
3
12
  # Does a weighted random with a hash,
4
- # where the keys are elements being randomly selected,
5
- # and the values are the weights
13
+ # where the keys are elements being randomly selected and the values are the weights
6
14
  # @param hash [Hash<Object => Integer>]
7
15
  # @param prng [#rand]
8
16
  # @return [Object]
@@ -1,3 +1,3 @@
1
1
  module Hlockey
2
- VERSION = "4".freeze
2
+ VERSION = "6".freeze
3
3
  end
metadata CHANGED
@@ -1,59 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hlockey
3
3
  version: !ruby/object:Gem::Version
4
- version: '4'
4
+ version: '6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lavender Perry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-04 00:00:00.000000000 Z
11
+ date: 2023-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: psych
14
+ name: json
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: '2.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5'
26
+ version: '2.6'
27
27
  description: Hlockey library.
28
- email: endie2@protonmail.com
28
+ email: lavender.perry@outlook.com
29
29
  executables: []
30
30
  extensions: []
31
31
  extra_rdoc_files: []
32
32
  files:
33
- - data/election.yaml
34
- - data/external/names.txt
35
- - data/information.yaml
36
- - data/league.yaml
37
- - data/links.yaml
38
- - data/previous_election_results.yaml
33
+ - data/election.json
34
+ - data/information.json
35
+ - data/league.json
36
+ - data/links.json
37
+ - data/previous_election_results.json
39
38
  - lib/hlockey.rb
39
+ - lib/hlockey/actions.rb
40
40
  - lib/hlockey/constants.rb
41
41
  - lib/hlockey/data.rb
42
42
  - lib/hlockey/game.rb
43
- - lib/hlockey/game/actions.rb
44
43
  - lib/hlockey/game/fight.rb
44
+ - lib/hlockey/game/weather.rb
45
+ - lib/hlockey/game/weather/audacity.rb
46
+ - lib/hlockey/game/weather/chicken.rb
47
+ - lib/hlockey/game/weather/incline.rb
48
+ - lib/hlockey/game/weather/stars.rb
49
+ - lib/hlockey/game/weather/sunset.rb
50
+ - lib/hlockey/game/weather/waves.rb
51
+ - lib/hlockey/game/weather/weatherable.rb
45
52
  - lib/hlockey/league.rb
46
53
  - lib/hlockey/message.rb
47
- - lib/hlockey/player.rb
54
+ - lib/hlockey/mod.rb
55
+ - lib/hlockey/mod/fencebuilder.rb
56
+ - lib/hlockey/mod/fencedestroyer.rb
57
+ - lib/hlockey/mod/handholding.rb
58
+ - lib/hlockey/mod/immaterial.rb
59
+ - lib/hlockey/mod/locked.rb
60
+ - lib/hlockey/mod/moddable.rb
61
+ - lib/hlockey/mod/nonconfrontational.rb
62
+ - lib/hlockey/mod/powernapper.rb
63
+ - lib/hlockey/mod/punchy.rb
64
+ - lib/hlockey/selfdescribable.rb
48
65
  - lib/hlockey/team.rb
66
+ - lib/hlockey/team/player.rb
67
+ - lib/hlockey/team/stadium.rb
49
68
  - lib/hlockey/utils.rb
50
69
  - lib/hlockey/version.rb
51
- - lib/hlockey/weather.rb
52
- homepage: https://github.com/Hlockey/lib
70
+ homepage: https://hlockey.gay
53
71
  licenses:
54
72
  - LicenseRef-LICENSE.md
55
73
  metadata:
56
- source_code_uri: https://github.com/Hlockey/lib
74
+ source_code_uri: https://codeberg.org/LavenderPerry/hlockey
57
75
  post_install_message:
58
76
  rdoc_options: []
59
77
  require_paths:
@@ -62,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
62
80
  requirements:
63
81
  - - ">="
64
82
  - !ruby/object:Gem::Version
65
- version: '0'
83
+ version: 3.1.0
66
84
  required_rubygems_version: !ruby/object:Gem::Requirement
67
85
  requirements:
68
86
  - - ">="
@@ -72,5 +90,5 @@ requirements: []
72
90
  rubygems_version: 3.4.10
73
91
  signing_key:
74
92
  specification_version: 4
75
- summary: Hlockey season 4.
93
+ summary: Hlockey season 6.
76
94
  test_files: []
data/data/election.yaml DELETED
@@ -1,21 +0,0 @@
1
- ---
2
- :Bribery:
3
- :Stadiums: Give each team a home.
4
- :Lootboxes: Encourage children to gamble.
5
- :We Do A Little Losing: Recognize the losingest teams with an Underbracket.
6
- :Treasure:
7
- :Dave: The worst stat on your team is set to 4.5.
8
- :Nice: Boost your worst player by 0.69 in every stat.
9
- :Vengabus: All your team's stats are boosted by your team's losses * 0.005.
10
- :Unvengabus: Your division's top team has all their stats reduced by their wins * 0.005.
11
- :Shared Training: All teams in your division get +0.3 in each stat on each player.
12
- :Theft: Your worst player steals 0.3 in every stat from the champion team's best player.
13
- :Coaching:
14
- :Please Block Shots: Move your team's best defensive player to goalie.
15
- :Please Win Faceoffs: Move your team's player best offensive player to center.
16
- :Draft: Add a new random player to your shadows.
17
- :Small Gamble: All your team's stats go up or down by 0.5 at random.
18
- :Big Gamble: All your team's stats go up or down by 1.0 at random.
19
- :Revolution: Your team's best player and worst player split their stats evenly.
20
- :Clock Wise: Rotate each player on the roster to the position clockwise of them.
21
- :Clock Unwise: Rotate each player on the roster to the position counterclockwise of them.