VanaTime 2.0.0 → 2.1.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.
@@ -1,82 +1,109 @@
1
- module FFXI
2
- class TimeManager
3
- include FFXI::Constants
4
-
5
- def initialize(earth_time=nil)
6
- @callbacks = {}
7
- setup(earth_time) if ! earth_time.nil?
8
- end
9
-
10
- def self.now
11
- self.new(Time.now)
12
- end
1
+ require 'logger'
13
2
 
14
- def reset
15
- earth_time = @time.earth_time
16
- setup(earth_time)
3
+ module FFXI
4
+ class TimeManager
5
+ def initialize(opts={})
6
+ @callbacks = {}
7
+ @cascading_updates = false
8
+
9
+ @vana_time = opts[:vana_time] || VanaTime.new
10
+ @vana_day = opts[:vana_day] || VanaDay.new
11
+ @vana_moon = opts[:vana_moon] || VanaMoon.new
12
+
13
+ @vana_moon_countdown = opts[:vana_moon_countdown] || VanaMoonCountdown.new
14
+ @skillup_calculator = opts[:skillup_calculator] || SkillupCalculator.new
15
+
16
+ [@vana_time, @vana_day, @vana_moon, @vana_moon_countdown,
17
+ @skillup_calculator].each do |obj|
18
+ obj.add_listener(self)
19
+ end
20
+
21
+ if opts[:logger]
22
+ level = opts[:log_level] || Logger::INFO
23
+ @log_listener = Util::LogListener.new(:logger => opts[:logger],
24
+ :log_level => level)
25
+
26
+ [@vana_time, @vana_day, @vana_moon, @vana_moon_countdown,
27
+ @skillup_calculator].each do |obj|
28
+ obj.add_listener(@log_listener)
17
29
  end
30
+ end
18
31
 
19
- def manage(time, day, moon)
20
- raise "time needs to be a VanaTime" if ! time.is_a? VanaTime
21
- raise "day needs to be a VanaDay" if ! day.is_a? VanaDay
22
- raise "moon needs to be a VanaMoon" if ! moon.is_a? VanaMoon
32
+ if opts[:cascading_updates]
33
+ enable_cascading_updates(opts[:earth_time] || Time.now)
34
+ end
35
+ end
23
36
 
24
- @time = time
25
- @day = day
26
- @moon = moon
27
- @moon_countdown = VanaMoonCountdown.new(@moon)
37
+ attr_reader :callbacks, :log_listener, :cascading_updates
38
+ attr_reader :vana_time, :vana_day, :vana_moon
39
+ attr_reader :vana_moon_countdown
40
+ attr_reader :skillup_calculator
28
41
 
29
- observe
30
- end
42
+ alias time vana_time
43
+ alias day vana_day
44
+ alias moon vana_moon
45
+ alias moon_countdown vana_moon_countdown
31
46
 
32
- def earth_time=(earth_time)
33
- raise "I don't have a VanaTime to update" if @time.nil?
34
- raise "Input needs to be a Time object" if ! earth_time.is_a? Time
47
+ def enable_cascading_updates(earth_time = Time.now)
48
+ @vana_time.update_earth_time(earth_time)
49
+ @vana_day.update_vana_time(@vana_time)
50
+ @vana_moon.update_earth_time(@vana_time.earth_time)
51
+ @vana_moon_countdown.update_moon(@vana_moon)
52
+ @skillup_calculator.update_day_and_moon(@vana_day, @vana_moon)
35
53
 
36
- @time.earth_time=(earth_time)
37
- end
54
+ @cascading_updates = true
55
+ end
38
56
 
39
- def callback_proc(type, callback)
40
- raise "callback needs to be a Proc/lambda" if ! callback.is_a? Proc
57
+ def disable_cascading_updates
58
+ @cascading_updates = false
59
+ end
41
60
 
42
- @callbacks[type] = [] if @callbacks[type].nil?
43
- @callbacks[type] << callback
44
- end
61
+ def update_earth_time(earth_time)
62
+ raise "Input needs to be a Time object" if ! earth_time.is_a? Time
63
+ @vana_time.update_earth_time(earth_time)
64
+ end
45
65
 
46
- def callback(type, &block)
47
- callback_proc(type, block)
48
- end
66
+ def update_vana_time(vt)
67
+ if vt.is_a? VanaTime
68
+ update_earth_time(vt.earth_time)
69
+ else
70
+ update_earth_time(FFXI::Common.vana_to_earth(vt))
71
+ end
72
+ end
49
73
 
50
- def update(type, updater)
51
- case type
52
- when MS_SECOND
53
- @moon_countdown.earth_time = @time.earth_time
54
- when MS_DAY
55
- @day.vana_time = @time.to_f
56
- @moon.earth_time = @time.earth_time
57
- when "moon_days"
58
- @moon_countdown.moon = @moon
59
- end
60
-
61
- @callbacks[type].each {|c| c.call(updater)} if ! @callbacks[type].nil?
74
+ def property_changed(property, old_value, new_value)
75
+ if @cascading_updates
76
+ case property
77
+ when :second
78
+ @vana_moon_countdown.update_earth_time(@vana_time.earth_time)
79
+ when :date
80
+ @vana_day.update_vana_time(@vana_time.to_f)
81
+ @vana_moon.update_earth_time(@vana_time.earth_time)
82
+ when :moon_days
83
+ @vana_moon_countdown.update_moon(@vana_moon)
84
+ @skillup_calculator.update_day_and_moon(@vana_day, @vana_moon)
85
+ when :day
86
+ @skillup_calculator.update_day_and_moon(@vana_day, @vana_moon)
62
87
  end
88
+ end
63
89
 
64
- private
90
+ @callbacks[property].each do |c|
91
+ c.call(self, old_value, new_value)
92
+ end if ! @callbacks[property].nil?
93
+ end
65
94
 
66
- def setup(time)
67
- @time = VanaTime.new(time)
68
- @day = VanaDay.new(@time.date_start)
69
- @moon = VanaMoon.new(@time.earth_time)
70
- @moon_countdown = VanaMoonCountdown.new(@moon)
95
+ def callback(property, proc=nil, &block)
96
+ if block_given?
97
+ cb = block
98
+ elsif ! proc.nil?
99
+ cb = proc
100
+ end
71
101
 
72
- observe
73
- end
102
+ raise "callback needs to be a Proc/lambda" if ! cb.is_a? Proc
74
103
 
75
- def observe
76
- @time.add_observer(self)
77
- @day.add_observer(self)
78
- @moon.add_observer(self)
79
- @moon_countdown.add_observer(self)
80
- end
104
+ @callbacks[property] = [] if @callbacks[property].nil?
105
+ @callbacks[property] << cb
81
106
  end
107
+
108
+ end
82
109
  end
@@ -0,0 +1,15 @@
1
+ require 'logger'
2
+
3
+ module FFXI
4
+ module Util
5
+ class LogListener
6
+ def initialize(opts={})
7
+ @log = opts[:logger] || Logger.new(STDERR)
8
+ @log.level = opts[:log_level] || Logger::INFO
9
+ end
10
+ def property_changed(property, old_value, new_value)
11
+ @log.info "#{property} changed from: <#{old_value}> to: <#{new_value}>"
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ module FFXI
2
+ module Util
3
+ class RubyBean
4
+
5
+ def initialize
6
+ @listeners = []
7
+ end
8
+
9
+ def add_listener(l)
10
+ @listeners.push(l) unless @listeners.include?(l)
11
+ end
12
+
13
+ def remove_listener(l)
14
+ @listeners.delete(l)
15
+ end
16
+
17
+ def has_listeners?
18
+ ! @listeners.empty?
19
+ end
20
+
21
+ def self.property(*properties)
22
+ properties.each do |p|
23
+ value = nil
24
+ define_method(p) { return value }
25
+ define_method("#{p}=") do |new_value|
26
+ return if value == new_value
27
+ @listeners.each do |l|
28
+ l.property_changed(p, value, new_value)
29
+ end
30
+ value = new_value
31
+ end
32
+ protected("#{p}=")
33
+ end
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
@@ -1,12 +1,17 @@
1
1
  $:.unshift File.dirname(__FILE__)
2
2
 
3
- require 'observer'
3
+ require 'util/ruby_bean'
4
+ require 'util/log_listener'
4
5
 
5
6
  require 'Vana/constants'
6
7
  require 'Vana/common'
7
- require 'Vana/time'
8
8
  require 'Vana/element'
9
+
10
+ require 'Vana/time'
9
11
  require 'Vana/day'
10
12
  require 'Vana/moon'
13
+
11
14
  require 'Vana/moon_countdown'
15
+ require 'Vana/skillup_calculator'
16
+
12
17
  require 'Vana/time_manager'
metadata CHANGED
@@ -1,33 +1,11 @@
1
- --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
- name: VanaTime
5
- version: !ruby/object:Gem::Version
6
- version: 2.0.0
7
- date: 2007-09-08 00:00:00 -04:00
8
- summary: A library for converting realtime to vanadiel time
9
- require_paths:
10
- - lib
11
- email: ttilley@gmail.com
1
+ --- !ruby/object:Gem::Specification
12
2
  homepage: http://vanatime.rubyforge.org/
13
- rubyforge_project: vanatime
14
- description: A library for converting realtime to vanadiel time
15
- autorequire:
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
25
- platform: ruby
26
- signing_key:
27
- cert_chain:
3
+ extensions: []
4
+ executables: []
5
+ version: !ruby/object:Gem::Version
6
+ version: 2.1.0
28
7
  post_install_message:
29
- authors:
30
- - Travis Tilley
8
+ date: 2007-09-18 04:00:00 +00:00
31
9
  files:
32
10
  - README
33
11
  - Manifest
@@ -35,25 +13,43 @@ files:
35
13
  - lib/vana_time.rb
36
14
  - lib/Vana/time_manager.rb
37
15
  - lib/Vana/time.rb
16
+ - lib/Vana/skillup_calculator.rb
38
17
  - lib/Vana/moon_countdown.rb
39
18
  - lib/Vana/moon.rb
40
19
  - lib/Vana/element.rb
41
20
  - lib/Vana/day.rb
42
21
  - lib/Vana/constants.rb
43
22
  - lib/Vana/common.rb
23
+ - lib/util/ruby_bean.rb
24
+ - lib/util/log_listener.rb
44
25
  - CHANGELOG
45
26
  - VanaTime.gemspec
46
- test_files: []
47
-
27
+ rubygems_version: 0.9.4
48
28
  rdoc_options: []
49
-
29
+ signing_key:
30
+ cert_chain:
31
+ name: VanaTime
32
+ has_rdoc: true
33
+ platform: ruby
34
+ summary: A library for converting realtime to vanadiel time
35
+ default_executable:
36
+ bindir: bin
37
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
38
+ version:
39
+ requirements:
40
+ - - '>'
41
+ - !ruby/object:Gem::Version
42
+ version: 0.0.0
43
+ require_paths:
44
+ - lib
45
+ specification_version: 1
46
+ test_files: []
47
+ dependencies: []
48
+ description: A library for converting realtime to vanadiel time
49
+ authors:
50
+ - Travis Tilley
51
+ email: ttilley@gmail.com
50
52
  extra_rdoc_files: []
51
-
52
- executables: []
53
-
54
- extensions: []
55
-
56
53
  requirements: []
57
-
58
- dependencies: []
59
-
54
+ rubyforge_project: vanatime
55
+ autorequire: