gemini 1.0.0 → 1.0.1

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.
Files changed (52) hide show
  1. data/bin/gemini +20 -12
  2. data/package/jar/gemini.jar +0 -0
  3. data/src/base_state.rb +6 -12
  4. data/src/behaviors/animated_sprite.rb +6 -2
  5. data/src/behaviors/audible.rb +6 -1
  6. data/src/behaviors/axis_stateful.rb +2 -0
  7. data/src/behaviors/big_sprite.rb +2 -1
  8. data/src/behaviors/bounding_box_collidable.rb +2 -0
  9. data/src/behaviors/camera_anchored_drawable.rb +1 -1
  10. data/src/behaviors/cardinal_movable.rb +18 -11
  11. data/src/behaviors/clickable.rb +1 -0
  12. data/src/behaviors/countable.rb +1 -0
  13. data/src/behaviors/debug_physical.rb +25 -13
  14. data/src/behaviors/debug_tangible.rb +1 -0
  15. data/src/behaviors/drawable.rb +1 -0
  16. data/src/behaviors/drawable_shape.rb +4 -3
  17. data/src/behaviors/fading_image_trail_emittable.rb +4 -0
  18. data/src/behaviors/game_object_emittable.rb +1 -0
  19. data/src/behaviors/gravity_source.rb +3 -2
  20. data/src/behaviors/inertial.rb +3 -0
  21. data/src/behaviors/movable2d.rb +1 -0
  22. data/src/behaviors/multi_animated_sprite.rb +7 -1
  23. data/src/behaviors/physical.rb +123 -77
  24. data/src/behaviors/physical_cardinal_movable.rb +14 -13
  25. data/src/behaviors/physical_sprite.rb +25 -9
  26. data/src/behaviors/platformer_controllable.rb +9 -2
  27. data/src/behaviors/pointer.rb +2 -0
  28. data/src/behaviors/pressable.rb +4 -0
  29. data/src/behaviors/receives_events.rb +3 -0
  30. data/src/behaviors/regional.rb +5 -0
  31. data/src/behaviors/repulsive.rb +28 -0
  32. data/src/behaviors/rotates_to_point.rb +2 -1
  33. data/src/behaviors/spatial.rb +4 -4
  34. data/src/behaviors/sprite.rb +17 -6
  35. data/src/behaviors/stateful.rb +2 -0
  36. data/src/behaviors/taggable.rb +1 -0
  37. data/src/behaviors/tangible.rb +8 -0
  38. data/src/behaviors/timeable.rb +9 -0
  39. data/src/behaviors/top_down_vehicle.rb +1 -0
  40. data/src/behaviors/triangle_trail_emittable.rb +5 -0
  41. data/src/behaviors/updates.rb +1 -0
  42. data/src/behaviors/updates_at_consistant_rate.rb +1 -0
  43. data/src/behaviors/vectored_movement.rb +1 -0
  44. data/src/behaviors/world_collidable.rb +1 -0
  45. data/src/game_objects/static_sprite.rb +3 -2
  46. data/src/game_objects/triangle_trail.rb +1 -1
  47. data/src/gemini_version.rb +1 -1
  48. data/src/managers/input_support/input_mapping.rb +10 -10
  49. data/src/managers/scrolling_render_manager.rb +8 -6
  50. data/src/project_generator.rb +6 -0
  51. data/src/vector.rb +19 -7
  52. metadata +4 -3
@@ -1,3 +1,4 @@
1
+ #Makes an object receive an event when a given time period has elapsed.
1
2
  class Timeable < Gemini::Behavior
2
3
  depends_on :Updates
3
4
 
@@ -9,10 +10,14 @@ class Timeable < Gemini::Behavior
9
10
  end
10
11
  end
11
12
 
13
+ #Add a countdown delay of the given number of seconds to the object.
14
+ #When the specified time has elapsed, a :countdown_complete event with the specified name will be passed to the object.
15
+ #If notify_frequency is specified, a :timer_tick event with the Timer object will be passed to the object each time the specified interval elapses.
12
16
  def add_countdown(name, seconds, notify_frequency = nil)
13
17
  @timers[name] = Timer.new(name, Timer::COUNTDOWN, seconds, notify_frequency) {|timer| @target.notify :timer_tick, timer }
14
18
  end
15
19
 
20
+ #Add a countup delay to the object. See add_countdown.
16
21
  def add_countup(name, seconds, notify_frequency = nil)
17
22
  @timers[name] = Timer.new(name, Timer::COUNTUP, seconds, notify_frequency) {|timer| @target.notify :timer_tick, timer }
18
23
  end
@@ -30,6 +35,7 @@ private
30
35
  end
31
36
  end
32
37
 
38
+ #Used to track how much time has elapsed.
33
39
  class Timer
34
40
  COUNTDOWN = :countdown
35
41
  COUNTUP = :countup
@@ -43,6 +49,7 @@ class Timer
43
49
  @milliseconds_since_last_notify = 0
44
50
  end
45
51
 
52
+ #Use the given elapsed time to determine if callbacks should be triggered.
46
53
  def apply_delta(delta_in_milliseconds)
47
54
  return if @countdown_complete
48
55
 
@@ -61,10 +68,12 @@ class Timer
61
68
  @countdown_complete = false
62
69
  end
63
70
 
71
+ #Number of timer ticks (notification periods) that have passed.
64
72
  def ticks_elapsed
65
73
  (@current_milliseconds / (@notify_frequency)).round
66
74
  end
67
75
 
76
+ #Number of timer ticks (notification periods) left before the countdown/countup is complete.
68
77
  def ticks_left
69
78
  ((@milliseconds - @current_milliseconds) / (@notify_frequency)).round
70
79
  end
@@ -1,3 +1,4 @@
1
+ #Allows an object to accelerate and turn within a 2D plane.
1
2
  class TopDownVehicle < Gemini::Behavior
2
3
  attr_accessor :minimum_speed_to_turn
3
4
  alias_method :set_minimum_speed_to_turn, :minimum_speed_to_turn=
@@ -1,5 +1,6 @@
1
1
  require 'behaviors/drawable'
2
2
 
3
+ #Makes an object draw a shrinking trail behind itself as it moves.
3
4
  class TriangleTrailEmittable < Gemini::Behavior
4
5
  #depends_on :Movable2d
5
6
  depends_on :Updates
@@ -19,6 +20,7 @@ class TriangleTrailEmittable < Gemini::Behavior
19
20
  @target.game_state.remove @emitter
20
21
  end
21
22
 
23
+ #Transparency to use. 1.0 is opaque. Default is 0.5.
22
24
  def alpha
23
25
  @emitter.alpha
24
26
  end
@@ -27,14 +29,17 @@ class TriangleTrailEmittable < Gemini::Behavior
27
29
  @emitter.alpha = alpha
28
30
  end
29
31
 
32
+ #Takes an Array with the relative x and y coordinates to begin the trail.
30
33
  def emit_triangle_trail_from_offset(offset)
31
34
  @emitter_offset = offset
32
35
  end
33
36
 
37
+ #Specifies the half-width of the widest part of the trail.
34
38
  def emit_triangle_trail_with_radius(radius)
35
39
  @emitter.radius = radius
36
40
  end
37
41
 
42
+ #Name of layer to draw trail on.
38
43
  def layer=(layer_name)
39
44
  @target.game_state.manager(:game_object).move_game_object_to_layer(@emitter, layer_name)
40
45
  end
@@ -1,3 +1,4 @@
1
+ #Makes an object receive events for changes in state.
1
2
  class Updates < Gemini::Behavior
2
3
 
3
4
  def load
@@ -1,3 +1,4 @@
1
+ #Makes an object receive events when a time period has elapsed.
1
2
  class UpdatesAtConsistantRate < Gemini::Behavior
2
3
  attr_accessor :updates_per_second
3
4
 
@@ -1,3 +1,4 @@
1
+ #Makes an object move within a 2D plane.
1
2
  class VectoredMovement < Gemini::Behavior
2
3
  attr_accessor :forward_speed, :reverse_speed, :rotation_speed
3
4
  alias_method :set_forward_speed, :forward_speed=
@@ -1,3 +1,4 @@
1
+ #Makes an object generate an event if it collides with another.
1
2
  class WorldCollidable < Gemini::Behavior
2
3
  depends_on :BoundingBoxCollidable
3
4
  depends_on_kind_of :CollisionPoolAlgorithm
@@ -1,5 +1,6 @@
1
1
  class StaticSprite < Gemini::GameObject
2
- has_behavior :TangibleSprite
2
+ has_behavior :PhysicalSprite
3
+
3
4
  def load(sprite_name_or_image, x=nil, y=nil, width=nil, height=nil, *tags)
4
5
  set_image sprite_name_or_image
5
6
  if width.nil? || height.nil?
@@ -7,7 +8,7 @@ class StaticSprite < Gemini::GameObject
7
8
  else
8
9
  set_shape :Box, width, height
9
10
  end
10
- set_mass Tangible::INFINITE_MASS
11
+ set_mass :infinite
11
12
  set_static_body
12
13
  set_restitution 1.0
13
14
  set_friction 0.0
@@ -1,4 +1,4 @@
1
- class Gemini::TriangleTrail < Gemini::GameObject
1
+ class TriangleTrail < Gemini::GameObject
2
2
  #has_behavior :Movable2d
3
3
  has_behavior :Spatial
4
4
  attr_accessor :radius, :alpha
@@ -1,3 +1,3 @@
1
1
  module Gemini
2
- VERSION = "1.0.0"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -32,17 +32,17 @@ module Gemini
32
32
  end
33
33
 
34
34
  def poll(raw_input)
35
- @game_value = case @device
36
- when :key
37
- poll_key(raw_input)
38
- when :mouse
39
- when :joystick
40
- poll_joystick(raw_input)
41
- end
35
+ @poll_result = case @device
36
+ when :key
37
+ poll_key(raw_input)
38
+ when :mouse
39
+ when :joystick
40
+ poll_joystick(raw_input)
41
+ end
42
42
  if post_canceled?
43
43
  nil
44
44
  else
45
- to_game_message(raw_input)
45
+ to_game_message(raw_input, @poll_result)
46
46
  end
47
47
  end
48
48
 
@@ -116,8 +116,8 @@ module Gemini
116
116
  end
117
117
 
118
118
  # eventually, raw_input will need to be wrapped
119
- def to_game_message(raw_input)
120
- game_message = InputMessage.new(@game_message, @game_value)
119
+ def to_game_message(raw_input, game_value)
120
+ game_message = InputMessage.new(@game_message, game_value)
121
121
  game_message.player = @player
122
122
  @input_callback.call(game_message, raw_input) unless @input_callback.nil?
123
123
  game_message
@@ -34,11 +34,13 @@ class ScrollingRenderManager < BasicRenderManager
34
34
 
35
35
  def calculate_object_position
36
36
  #TODO: This should go once declared method overriding is possible.
37
- if @tracking_game_object.kind_of? TangibleSprite
38
- body_position = @tracking_game_object.body_position
39
- Vector.new(-(body_position.x - (@game_state.screen_width / 2)), -(body_position.y - (@game_state.screen_height / 2)))
40
- else
41
- Vector.new(-(body_position.x - (@game_state.screen_width / 2)), -(body_position.y - (@game_state.screen_height / 2)))
42
- end
37
+ position = @tracking_game_object.position
38
+ Vector.new(-(position.x - (@game_state.screen_width / 2)), -(position.y - (@game_state.screen_height / 2)))
39
+ # if @tracking_game_object.kind_of? TangibleSprite
40
+ # body_position = @tracking_game_object.body_position
41
+ # Vector.new(-(body_position.x - (@game_state.screen_width / 2)), -(body_position.y - (@game_state.screen_height / 2)))
42
+ # else
43
+ # Vector.new(-(body_position.x - (@game_state.screen_width / 2)), -(body_position.y - (@game_state.screen_height / 2)))
44
+ # end
43
45
  end
44
46
  end
@@ -31,6 +31,9 @@ require 'java'
31
31
 
32
32
  $LOAD_PATH.clear
33
33
  $LOAD_PATH << File.expand_path(File.dirname(__FILE__))
34
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'game_objects'))
35
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'managers'))
36
+ $LOAD_PATH << File.expand_path(File.join(File.dirname(__FILE__), 'states'))
34
37
 
35
38
  # only when running in non-standalone
36
39
  if File.exist? File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', 'java'))
@@ -39,6 +42,9 @@ if File.exist? File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib', '
39
42
  $CLASSPATH << jar
40
43
  end
41
44
  end
45
+ %w{behaviors game_objects input_helpers input_mappings states}.each do |dir|
46
+ $LOAD_PATH << "src/\#{dir}"
47
+ end
42
48
 
43
49
  require 'gemini'
44
50
 
@@ -1,22 +1,26 @@
1
1
  class Vector
2
+ SlickVector = Java::org::newdawn::slick::geom::Vector2f
3
+
2
4
  attr_reader :native_vector
3
5
 
4
- def dup
5
- self.new(x, y)
6
- end
7
-
8
6
  def self.from_polar_vector(magnitude, angle)
9
7
  w = Math.sin(Gemini::Math.degrees_to_radians(angle))
10
8
  h = -Math.cos(Gemini::Math.degrees_to_radians(angle))
11
9
  return new(w * magnitude, h * magnitude)
12
10
  end
13
-
11
+
14
12
  def initialize(x = 0.0, y = 0.0, z = nil)
15
- @native_vector = Java::org::newdawn::slick::geom::Vector2f.new(x, y)
13
+ @native_vector = SlickVector.new(x, y)
14
+ end
15
+
16
+ ORIGIN = new(0.0, 0.0).freeze
17
+
18
+ def dup
19
+ self.class.new(x, y)
16
20
  end
17
21
 
18
22
  def +(other_vector)
19
- Vector.new(x + other_vector.x, y + other_vector.y)
23
+ self.class.new(x + other_vector.x, y + other_vector.y)
20
24
  end
21
25
 
22
26
  def x
@@ -57,6 +61,10 @@ class Vector
57
61
  Gemini::Math.radians_to_degrees(Math.atan2(y - other_vector.y, x - other_vector.x)) + 90.0
58
62
  end
59
63
 
64
+ def midpoint_of(other_vector)
65
+ Vector.new((x + other_vector.x) / 2.0, (y + other_vector.y) / 2.0)
66
+ end
67
+
60
68
  def pivot_around_degrees(other_vector, rotation)
61
69
  pivot_around(other_vector, Gemini::Math.degrees_to_radians(rotation))
62
70
  end
@@ -82,6 +90,10 @@ class Vector
82
90
  def negate
83
91
  self.class.new(-x, -y)
84
92
  end
93
+
94
+ def to_s
95
+ "<#{self.class} - X: #{x} Y: #{y}>"
96
+ end
85
97
  end
86
98
 
87
99
  class Java::net::phys2d::math::Vector2f
metadata CHANGED
@@ -5,9 +5,9 @@ homepage: http://rubyforge.org/projects/gemini/
5
5
  executables:
6
6
  - gemini
7
7
  version: !ruby/object:Gem::Version
8
- version: 1.0.0
8
+ version: 1.0.1
9
9
  post_install_message:
10
- date: 2009-06-21 07:00:00 +00:00
10
+ date: 2009-07-04 07:00:00 +00:00
11
11
  files:
12
12
  - lib/ibxm.jar
13
13
  - lib/jinput.jar
@@ -78,6 +78,7 @@ files:
78
78
  - src/behaviors/pressable.rb
79
79
  - src/behaviors/receives_events.rb
80
80
  - src/behaviors/regional.rb
81
+ - src/behaviors/repulsive.rb
81
82
  - src/behaviors/rotates_to_point.rb
82
83
  - src/behaviors/spatial.rb
83
84
  - src/behaviors/spline_stretchable_sprite.rb
@@ -166,7 +167,7 @@ dependencies:
166
167
  requirements:
167
168
  - - '>='
168
169
  - !ruby/object:Gem::Version
169
- version: "0"
170
+ version: 1.3.7
170
171
  description: ""
171
172
  email: logustus@gmail.com
172
173
  authors: