VanaTime 2.0.0 → 2.1.0

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