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.
- checksums.yaml +7 -0
- data/README.md +98 -0
- data/docs/EventSymbols.md +117 -0
- data/docs/MQTTBranches.md +74 -0
- data/lib/lzrtag.rb +13 -0
- data/lib/lzrtag/game/base_game.rb +220 -0
- data/lib/lzrtag/handler/base_handler.rb +169 -0
- data/lib/lzrtag/handler/count_handler.rb +55 -0
- data/lib/lzrtag/handler/game_handler.rb +258 -0
- data/lib/lzrtag/handler/hitArb_handler.rb +80 -0
- data/lib/lzrtag/hooks/base_hook.rb +143 -0
- data/lib/lzrtag/hooks/standard_hooks.rb +174 -0
- data/lib/lzrtag/map/map_set.rb +48 -0
- data/lib/lzrtag/map/map_zone.rb +95 -0
- data/lib/lzrtag/map/myMaps_parser.rb +136 -0
- data/lib/lzrtag/player/base_player.rb +104 -0
- data/lib/lzrtag/player/effects_player.rb +96 -0
- data/lib/lzrtag/player/hardware_player.rb +251 -0
- data/lib/lzrtag/player/life_player.rb +116 -0
- metadata +131 -0
@@ -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: []
|