lzrtag-base 1.0.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.
@@ -0,0 +1,116 @@
1
+
2
+ require_relative 'effects_player.rb'
3
+
4
+ module LZRTag
5
+ module Player
6
+ class Life < Effects
7
+
8
+ # Return the amount of life a player currently has.
9
+ # This value can not be set directly, but should instead be modified
10
+ # via {regenerate} and {damage_by}.
11
+ # It is a number from 0 to maxLife (default 100
12
+ # Any change in a player's life is send to MQTT, as well as signalled via
13
+ # :playerRegenerated and :playerHurt events
14
+ attr_reader :life
15
+ # Set the maximum amount of life a player has. Can be useful to
16
+ # introduce tank classes with more life.
17
+ attr_reader :maxLife
18
+
19
+ # Returns the last time the player was damaged.
20
+ # This can be useful to apply buffs and other data, as well as
21
+ # "post-damage regenration delay"
22
+ attr_reader :lastDamageTime
23
+
24
+ def initialize(*data)
25
+ super(*data);
26
+
27
+ @life = 0;
28
+ @maxLife = 100;
29
+
30
+ @lastDamageTime = Time.at(0);
31
+
32
+ regenerate(@maxLife);
33
+ end
34
+
35
+ # Regenerate the player by a given amount.
36
+ # This function will update the player's life, increasing it
37
+ # by amount, and will send :playerRegenerated [player, deltaLife]
38
+ # or :playerFullyRegenerated [player]
39
+ # if a player's life was increased to the maximum value.
40
+ # @param amount [Numeric] Amount of life to add
41
+ def regenerate(amount, source = nil)
42
+ unless((amount.is_a? Numeric) && amount >= 0)
43
+ raise ArgumentError, "Amount needs to be a positive number!"
44
+ end
45
+
46
+ nLife = @life + amount;
47
+ nLife = @maxLife if(nLife > @maxLife)
48
+ return if nLife == @life;
49
+
50
+ oLife = @life;
51
+ @life = nLife;
52
+
53
+ @handler.send_event(:playerRegenerated, self, @life - oLife, source);
54
+ if(@life == maxLife)
55
+ @handler.send_event(:playerFullyRegenerated, self, source);
56
+ end
57
+
58
+ _pub_to("Stats/HP", @life.to_s, retain: true);
59
+ end
60
+
61
+ # Damage a player by a given amount with given source.
62
+ # This function will damage a player by "amount", but will not
63
+ # decrease a player's life below zero. Instead, it will kill the player.
64
+ # This function will send out :playerHurt [player, sourcePlayer, deltaLife]
65
+ # and potentially also :playerKilled
66
+ # @param amount [Numeric] Amount to damage the player by
67
+ # @param sourcePlayer [nil, Player::Base] The player this damage originated from - optional
68
+ def damage_by(amount, sourcePlayer = nil)
69
+ unless(amount.is_a? Numeric)
70
+ raise ArgumentError, "Amount needs to be a number!";
71
+ end
72
+ unless (sourcePlayer.is_a? Base) or sourcePlayer.nil?
73
+ raise ArgumentError, "sourcePlayer needs to be a Player::Base!"
74
+ end
75
+
76
+ oLife = @life;
77
+ nLife = @life - amount;
78
+ nLife = [0, nLife].max;
79
+
80
+ @lastDamageTime = Time.now();
81
+
82
+ if(nLife != @life)
83
+ @life = nLife;
84
+
85
+ @handler.send_event :playerHurt, self, sourcePlayer, oLife - @life;
86
+ _pub_to("Stats/HP", @life.to_s, retain: true);
87
+
88
+ kill_by(sourcePlayer) if(nLife <= 0);
89
+ end
90
+
91
+ return oLife - nLife;
92
+ end
93
+
94
+ def maxLife=(newVal)
95
+ unless(newVal.is_a? Numeric && newVal >= 1)
96
+ raise ArgumentError, "Amount needs to be a number >= 1!"
97
+ end
98
+
99
+ @maxLife = newVal;
100
+ if(@life > @maxLife)
101
+ @life = @maxLife;
102
+ _pub_to("Stats/HP", @life, retain: true);
103
+ end
104
+
105
+ _pub_to("CFG/MaxLife", @maxLife, retain: true);
106
+ end
107
+
108
+ # @private
109
+ def clear_all_topics()
110
+ super();
111
+ _pub_to("Stats/HP", "", retain: true);
112
+ _pub_to("CFG/MaxLife", "", retain: true);
113
+ end
114
+ end
115
+ end
116
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lzrtag-base
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Xasin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-19 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mqtt-sub_handler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: xml-simple
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: guard-minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description:
84
+ email:
85
+ executables: []
86
+ extensions: []
87
+ extra_rdoc_files: []
88
+ files:
89
+ - README.md
90
+ - docs/EventSymbols.md
91
+ - docs/MQTTBranches.md
92
+ - lib/lzrtag.rb
93
+ - lib/lzrtag/game/base_game.rb
94
+ - lib/lzrtag/handler/base_handler.rb
95
+ - lib/lzrtag/handler/count_handler.rb
96
+ - lib/lzrtag/handler/game_handler.rb
97
+ - lib/lzrtag/handler/hitArb_handler.rb
98
+ - lib/lzrtag/hooks/base_hook.rb
99
+ - lib/lzrtag/hooks/standard_hooks.rb
100
+ - lib/lzrtag/map/map_set.rb
101
+ - lib/lzrtag/map/map_zone.rb
102
+ - lib/lzrtag/map/myMaps_parser.rb
103
+ - lib/lzrtag/player/base_player.rb
104
+ - lib/lzrtag/player/effects_player.rb
105
+ - lib/lzrtag/player/hardware_player.rb
106
+ - lib/lzrtag/player/life_player.rb
107
+ homepage: https://github.com/XasWorks/LZRTag/
108
+ licenses:
109
+ - GPL-3.0
110
+ metadata: {}
111
+ post_install_message:
112
+ rdoc_options: []
113
+ require_paths:
114
+ - lib
115
+ required_ruby_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ requirements: []
126
+ rubyforge_project:
127
+ rubygems_version: 2.5.2.1
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: Base classes for Xasin's LZRTag system
131
+ test_files: []