/* call-seq:
 *   Vector3.new()                      -> vector
 *   Vector3.new([x,y,z])       -> vector
 *       Vector3.new(vector)         -> vector
 *   Vector3.new(x,y,z)         -> vector
 * 
 * Create a new vector instance.
 */
static VALUE Vector3_Initialize( VALUE self, VALUE someArgs )
{
        long arrayLength = RARRAY_LEN( someArgs );
        rb_iv_set( self, "@x", INT2NUM( 0 ) );
        rb_iv_set( self, "@y", INT2NUM( 0 ) );
        rb_iv_set( self, "@z", INT2NUM( 0 ) );
        
        if( arrayLength == 0 )
        {
                // Nothing needs to be done
        }
        else if( arrayLength == 1 )
        {
                Vector3_internal_CopyFrom( self, rb_ary_entry( someArgs, 0 ) );
        }
        else if( arrayLength == 3 )
        {
                VALUE arg1 = rb_ary_entry( someArgs, 0 );
                VALUE arg2 = rb_ary_entry( someArgs, 1 );
                VALUE arg3 = rb_ary_entry( someArgs, 1 );
                Vector3_internal_ValidateTypes( arg1, arg2, arg3 );
                
                rb_iv_set( self, "@x", arg1 );
                rb_iv_set( self, "@y", arg2 );
                rb_iv_set( self, "@z", arg3 );
        }
        
        rb_iv_set( self, "@dataType", CLASS_OF( rb_iv_get( self, "@x" ) ) );
        return self;
}