On 12/12/05, Joe Van Dyk <joevandyk / gmail.com> wrote:
> (I've already looked at Swig, btw.  I'd like to do this one by hand.)
>
> I have the following:
>
> typedef struct {
>   double x;
>   double y;
>   double z;
> } VelocityRecord;
>
> typedef struct {
>   double x;
>   double y;
>   double z;
> } PositionRecord;
>
> typedef struct {
>   int id;
>   int type;
>   PositionRecord position;
>   VelocityRecord velocity;
> } Player;
>
> Player Players[10];
>
>
> The number of Players is fixed ahead of time.  I want to be able to
> access that data from Ruby.  Ideally, something like:
>
> module Simulation
>     attr_accessor :players  # Other stuff will be here
>     class Player
>         class VelocityRecord
>             attr_accessor :x, :y :z
>         end
>         class PositionRecord
>           attr_accessor :x, :y, :z
>         end
>     end
> end

Hm, on second thought, it's probably a lot easier to do:

class Player
  attr_reader :x_position, :y_position, :z_position, :x_velocity,
:y_velocity, :z_velocity
end

So, maybe something like this?

void Init_Simulation()
{
  rb_define_module(mSimulation, "Simulation");
  rb_define_class_under(cPlayer, "Player");

  rb_define_method(cPlayer, "x_position", get_x_position, 0);
  rb_define_method(cPlayer, "y_position", get_y_position, 0);
  rb_define_method(cPlayer, "z_position", get_z_position, 0);
  rb_define_method(cPlayer, "x_velocity", get_x_velocity, 0);
  rb_define_method(cPlayer, "y_velocity", get_y_velocity, 0);
  rb_define_method(cPlayer, "z_velocity", get_z_velocity, 0);
}