sc2ai 0.0.0.pre → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/data.json +1 -0
- data/data/data_readable.json +22842 -0
- data/data/sc2ai/protocol/common.proto +59 -0
- data/data/sc2ai/protocol/data.proto +120 -0
- data/data/sc2ai/protocol/debug.proto +127 -0
- data/data/sc2ai/protocol/error.proto +221 -0
- data/data/sc2ai/protocol/query.proto +55 -0
- data/data/sc2ai/protocol/raw.proto +202 -0
- data/data/sc2ai/protocol/sc2api.proto +718 -0
- data/data/sc2ai/protocol/score.proto +108 -0
- data/data/sc2ai/protocol/spatial.proto +115 -0
- data/data/sc2ai/protocol/ui.proto +145 -0
- data/data/setup/setup.SC2Map +0 -0
- data/data/setup/setup.SC2Replay +0 -0
- data/data/stableid.json +35730 -0
- data/data/versions.json +554 -0
- data/exe/sc2ai +35 -0
- data/lib/docker_build/Dockerfile.ruby +74 -0
- data/lib/docker_build/docker-compose-base-image.yml +10 -0
- data/lib/docker_build/docker-compose-ladderzip.yml +9 -0
- data/lib/sc2ai/api/ability_id.rb +1644 -0
- data/lib/sc2ai/api/buff_id.rb +306 -0
- data/lib/sc2ai/api/data.rb +101 -0
- data/lib/sc2ai/api/effect_id.rb +20 -0
- data/lib/sc2ai/api/tech_tree.rb +83 -0
- data/lib/sc2ai/api/tech_tree_data.rb +2338 -0
- data/lib/sc2ai/api/unit_type_id.rb +2022 -0
- data/lib/sc2ai/api/upgrade_id.rb +310 -0
- data/lib/sc2ai/cli/cli.rb +175 -0
- data/lib/sc2ai/cli/ladderzip.rb +154 -0
- data/lib/sc2ai/cli/new.rb +88 -0
- data/lib/sc2ai/configuration.rb +145 -0
- data/lib/sc2ai/connection/connection_listener.rb +30 -0
- data/lib/sc2ai/connection/requests.rb +417 -0
- data/lib/sc2ai/connection/status_listener.rb +15 -0
- data/lib/sc2ai/connection.rb +146 -0
- data/lib/sc2ai/local_play/client/configurable_options.rb +115 -0
- data/lib/sc2ai/local_play/client.rb +159 -0
- data/lib/sc2ai/local_play/client_manager.rb +70 -0
- data/lib/sc2ai/local_play/map_file.rb +48 -0
- data/lib/sc2ai/local_play/match.rb +184 -0
- data/lib/sc2ai/overrides/array.rb +14 -0
- data/lib/sc2ai/overrides/async/process/child.rb +31 -0
- data/lib/sc2ai/overrides/kernel.rb +33 -0
- data/lib/sc2ai/paths.rb +294 -0
- data/lib/sc2ai/player/actions.rb +386 -0
- data/lib/sc2ai/player/debug.rb +224 -0
- data/lib/sc2ai/player/game_state.rb +131 -0
- data/lib/sc2ai/player/geometry.rb +766 -0
- data/lib/sc2ai/player/previous_state.rb +49 -0
- data/lib/sc2ai/player/units.rb +337 -0
- data/lib/sc2ai/player.rb +661 -0
- data/lib/sc2ai/ports.rb +152 -0
- data/lib/sc2ai/protocol/_meta_documentation.rb +39 -0
- data/lib/sc2ai/protocol/common_pb.rb +43 -0
- data/lib/sc2ai/protocol/data_pb.rb +47 -0
- data/lib/sc2ai/protocol/debug_pb.rb +56 -0
- data/lib/sc2ai/protocol/error_pb.rb +36 -0
- data/lib/sc2ai/protocol/extensions/color.rb +20 -0
- data/lib/sc2ai/protocol/extensions/point.rb +23 -0
- data/lib/sc2ai/protocol/extensions/point_2_d.rb +26 -0
- data/lib/sc2ai/protocol/extensions/position.rb +202 -0
- data/lib/sc2ai/protocol/extensions/power_source.rb +19 -0
- data/lib/sc2ai/protocol/extensions/unit.rb +489 -0
- data/lib/sc2ai/protocol/query_pb.rb +47 -0
- data/lib/sc2ai/protocol/raw_pb.rb +57 -0
- data/lib/sc2ai/protocol/sc2api_pb.rb +130 -0
- data/lib/sc2ai/protocol/score_pb.rb +40 -0
- data/lib/sc2ai/protocol/spatial_pb.rb +48 -0
- data/lib/sc2ai/protocol/ui_pb.rb +56 -0
- data/lib/sc2ai/unit_group/action_ext.rb +74 -0
- data/lib/sc2ai/unit_group/filter_ext.rb +379 -0
- data/lib/sc2ai/unit_group.rb +277 -0
- data/lib/sc2ai/version.rb +2 -1
- data/lib/sc2ai.rb +93 -2
- data/lib/templates/ladderzip/bin/ladder.tt +23 -0
- data/lib/templates/new/.ladderignore +20 -0
- data/lib/templates/new/Gemfile.tt +7 -0
- data/lib/templates/new/api/common.proto +59 -0
- data/lib/templates/new/api/data.proto +120 -0
- data/lib/templates/new/api/debug.proto +127 -0
- data/lib/templates/new/api/error.proto +221 -0
- data/lib/templates/new/api/query.proto +55 -0
- data/lib/templates/new/api/raw.proto +202 -0
- data/lib/templates/new/api/sc2api.proto +718 -0
- data/lib/templates/new/api/score.proto +108 -0
- data/lib/templates/new/api/spatial.proto +115 -0
- data/lib/templates/new/api/ui.proto +145 -0
- data/lib/templates/new/boot.rb.tt +6 -0
- data/lib/templates/new/my_bot.rb.tt +23 -0
- data/lib/templates/new/run_example_match.rb.tt +14 -0
- data/sc2ai.gemspec +80 -0
- metadata +344 -13
@@ -0,0 +1,131 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sc2
|
4
|
+
class Player
|
5
|
+
# Holds game state
|
6
|
+
module GameState
|
7
|
+
# @!attribute status
|
8
|
+
# @return [:launched, :in_game, :in_replay, :ended, :quit, :unknown] status
|
9
|
+
attr_accessor :status
|
10
|
+
|
11
|
+
include Connection::StatusListener
|
12
|
+
# Callback when game status changes
|
13
|
+
def on_status_change(status)
|
14
|
+
self.status = status
|
15
|
+
end
|
16
|
+
|
17
|
+
extend Forwardable
|
18
|
+
|
19
|
+
# @!attribute game_loop
|
20
|
+
# @return [Integer] current game loop
|
21
|
+
def_delegators :observation, :game_loop
|
22
|
+
|
23
|
+
# @!attribute game_info [rw]
|
24
|
+
# Access useful game information. Used in parsed pathing grid, terrain height, placement grid.
|
25
|
+
# Holds Api::ResponseGameInfo::#start_locations.
|
26
|
+
# @return [Api::ResponseGameInfo]
|
27
|
+
attr_reader :game_info
|
28
|
+
|
29
|
+
def game_info=(new_info)
|
30
|
+
@game_info_loop = game_loop || 0
|
31
|
+
@game_info = new_info
|
32
|
+
end
|
33
|
+
|
34
|
+
# @!attribute game_info_loop
|
35
|
+
# This is the last loop at which game_info was set.
|
36
|
+
# Used to determine staleness.
|
37
|
+
# @return [Integer]
|
38
|
+
attr_accessor :game_info_loop
|
39
|
+
|
40
|
+
# Determines if your game_info will be refreshed at this moment
|
41
|
+
# Has a hard-capped refresh of only ever 2 steps
|
42
|
+
# In general game_info is only refreshed Player::Bot reads from pathing_grid or placement_grid
|
43
|
+
# @return [Boolean]
|
44
|
+
def game_info_stale?
|
45
|
+
return true if game_info_loop.nil? || game_info.nil?
|
46
|
+
return false if game_info_loop == game_loop
|
47
|
+
|
48
|
+
# Note: No minimum step count set anymore
|
49
|
+
# We can do something like, only updating every 2+ frames:
|
50
|
+
game_info_loop + 2 <= game_loop
|
51
|
+
end
|
52
|
+
|
53
|
+
# @!attribute data
|
54
|
+
# @return [Api::ResponseData]
|
55
|
+
attr_accessor :data
|
56
|
+
|
57
|
+
# @!attribute observation
|
58
|
+
# @return [Api::Observation] snapshot of current game state
|
59
|
+
attr_writer :observation
|
60
|
+
|
61
|
+
# @!attribute chats_received
|
62
|
+
# @return [Array<Api::ChatReceived>] messages since last observation
|
63
|
+
#
|
64
|
+
# @example
|
65
|
+
# # Useful for commanding your own bot on step
|
66
|
+
# chats_received.each do |chat|
|
67
|
+
# if chat.message == "!gg"
|
68
|
+
# if chat.player_id == common.player_id
|
69
|
+
# # we sent this...
|
70
|
+
# leave_game # ladder surrender
|
71
|
+
# exit # exit script
|
72
|
+
# else
|
73
|
+
# # someone else messaged, dont quit
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
# end
|
77
|
+
attr_writer :chats_received
|
78
|
+
|
79
|
+
# @!attribute result
|
80
|
+
# @return [Api::Result] the result of the game (:Victory/:Defeat/:Tie)
|
81
|
+
attr_accessor :result
|
82
|
+
|
83
|
+
# @!attribute spent_minerals
|
84
|
+
# @see Unit#build and #morph
|
85
|
+
# @return [Integer] sum of minerals spent via Unit##build an Unit#morph
|
86
|
+
attr_accessor :spent_minerals
|
87
|
+
|
88
|
+
# @!attribute spent_vespene
|
89
|
+
# @see Unit#build and #morph
|
90
|
+
# @return [Integer] sum of vespene gas spent via Unit##build an Unit##morph
|
91
|
+
attr_accessor :spent_vespene
|
92
|
+
|
93
|
+
# @!attribute spent_supply
|
94
|
+
# @see Unit#build and #morph
|
95
|
+
# @return [Integer] sum of supply spent via Unit##build an Unit##morph
|
96
|
+
attr_accessor :spent_supply
|
97
|
+
|
98
|
+
def observation
|
99
|
+
@observation || Api::Observation.new(game_loop: 0)
|
100
|
+
end
|
101
|
+
|
102
|
+
def chats_received
|
103
|
+
@chats_received || []
|
104
|
+
end
|
105
|
+
|
106
|
+
# An alias for observation.player_common to allow easier access to i.e. common.minerals
|
107
|
+
# @return [Api::PlayerCommon] common info such as minerals, vespene, supply
|
108
|
+
def common
|
109
|
+
observation.player_common || Api::PlayerCommon.new(
|
110
|
+
player_id: 0,
|
111
|
+
minerals: 50,
|
112
|
+
vespene: 0,
|
113
|
+
food_cap: ((race == Api::Race::Zerg) ? 14 : 15),
|
114
|
+
food_used: 12,
|
115
|
+
food_army: 0,
|
116
|
+
food_workers: 12,
|
117
|
+
idle_worker_count: 0,
|
118
|
+
army_count: 0,
|
119
|
+
warp_gate_count: 0,
|
120
|
+
larva_count: ((race == Api::Race::Zerg) ? 3 : 0)
|
121
|
+
)
|
122
|
+
end
|
123
|
+
|
124
|
+
# class << self
|
125
|
+
# def included(_mod)
|
126
|
+
# @status = :unknown
|
127
|
+
# end
|
128
|
+
# end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|