lib/pokerstats/hand_statistics.rb in pokerstats-2.0.13 vs lib/pokerstats/hand_statistics.rb in pokerstats-2.0.14
- old
+ new
@@ -10,15 +10,16 @@
include Pluggable
include HandConstants
plugin_include_module HandStatisticsAPI
def initialize
install_plugins self
- @hand_information = {}
+ @hand_information = {:number_players => 0, :ante => "0.0".to_d}
@player_hashes = []
@button_player_index = nil
@cached_player_position = nil
@street_state = nil
+ @last_street_state = nil
street_transition(:prelude)
end
##
# Hand Information
@@ -28,10 +29,14 @@
raise Pokerstats::HandHistoryParseError, "#{HAND_RECORD_INCOMPLETE_MESSAGE}: #{(HAND_INFORMATION_KEYS - @hand_information.keys).inspect}" unless (HAND_INFORMATION_KEYS - @hand_information.keys).empty?
HAND_INFORMATION_KEYS.inject({}) do |hash, key|
hash.merge!(key => @hand_information[key])
end
end
+
+ def hand_information(field)
+ @hand_information[field]
+ end
def update_hand update
street_transition(update[:street]) unless update[:street] == @street_state
@hand_information.update(update)
self
@@ -63,23 +68,29 @@
def register_player player
screen_name = player[:screen_name]
raise Pokerstats::HandHistoryParseError, "#{PLAYER_RECORDS_DUPLICATE_PLAYER_NAME}: #{screen_name.inspect}" if players.member?(screen_name)
@cached_player_position = nil
@player_hashes << player
- plugins.each{|each| each.register_player(screen_name, @street_state)} #why the second parameter?
+ @hand_information[:number_players]+=1
+ plugins.each{|each| each.register_player(screen_name, @street_state, player)} #why the second parameter?
street_transition_for_player(@street_state, screen_name)
end
###
# Street state information
##
def street
@street_state
end
+
+ def last_street
+ @last_street_state
+ end
def street_transition street
+ @last_street_state = @street_state
@street_state = street
plugins.each{|each| each.street_transition(street)}
players.each {|player| street_transition_for_player(street, player)}
end
@@ -114,10 +125,21 @@
end
def position screen_name
(@cached_player_position && @cached_player_position[screen_name]) || calculate_player_position(screen_name)
end
+
+ # player screen_name_first goes before player screen_name_second
+ def betting_order?(screen_name_first, screen_name_second)
+ if button?(screen_name_first)
+ false
+ elsif button?(screen_name_second)
+ true
+ else
+ position(screen_name_first) < position(screen_name_second)
+ end
+ end
def button?(screen_name)
position(screen_name) && position(screen_name).zero?
end
@@ -144,11 +166,10 @@
end
def attacker?(screen_name)
(number_players > 2) && (button?(screen_name) || cutoff?(screen_name))
end
-
-
+
##
# Action Information
##
def aggression(description)
case description