lzrtag-base 1.0.0

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