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.
- data/CHANGELOG +6 -0
- data/Manifest +3 -0
- data/README +95 -125
- data/VanaTime.gemspec +17 -17
- data/lib/Vana/common.rb +65 -65
- data/lib/Vana/constants.rb +20 -21
- data/lib/Vana/day.rb +47 -44
- data/lib/Vana/element.rb +45 -40
- data/lib/Vana/moon.rb +131 -139
- data/lib/Vana/moon_countdown.rb +48 -51
- data/lib/Vana/skillup_calculator.rb +142 -0
- data/lib/Vana/time.rb +98 -110
- data/lib/Vana/time_manager.rb +91 -64
- data/lib/util/log_listener.rb +15 -0
- data/lib/util/ruby_bean.rb +39 -0
- data/lib/vana_time.rb +7 -2
- metadata +35 -39
data/lib/Vana/time_manager.rb
CHANGED
@@ -1,82 +1,109 @@
|
|
1
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
32
|
+
if opts[:cascading_updates]
|
33
|
+
enable_cascading_updates(opts[:earth_time] || Time.now)
|
34
|
+
end
|
35
|
+
end
|
23
36
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
30
|
-
|
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
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
37
|
-
|
54
|
+
@cascading_updates = true
|
55
|
+
end
|
38
56
|
|
39
|
-
|
40
|
-
|
57
|
+
def disable_cascading_updates
|
58
|
+
@cascading_updates = false
|
59
|
+
end
|
41
60
|
|
42
|
-
|
43
|
-
|
44
|
-
|
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
|
-
|
47
|
-
|
48
|
-
|
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
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
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
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
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
|
-
|
73
|
-
end
|
102
|
+
raise "callback needs to be a Proc/lambda" if ! cb.is_a? Proc
|
74
103
|
|
75
|
-
|
76
|
-
|
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
|
data/lib/vana_time.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
$:.unshift File.dirname(__FILE__)
|
2
2
|
|
3
|
-
require '
|
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
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
59
|
-
|
54
|
+
rubyforge_project: vanatime
|
55
|
+
autorequire:
|