package collada.Library.controllers
--
-- Models a collada 'controllers' library, which is a collection of controllers.
--
is

   type Inputs_view    is access all Library.Inputs;
   type int_Array_view is access all int_Array;


   ----------
   --- Joints
   --

   type Joints is
      record
         Inputs : Inputs_view;
      end record;


   ------------------
   --- vertex_Weights
   --

   type vertex_Weights is
      record
         Count   : Natural;
         Inputs  : Inputs_view;

         v_Count : int_Array_view;
         v       : int_Array_view;
      end record;

   function  joint_Offset_of (Self : in vertex_Weights) return math.Index;
   function weight_Offset_of (Self : in vertex_Weights) return math.Index;


   --------
   --- Skin
   --

   type Skin is
      record
         main_Source       : Text;
         bind_shape_Matrix : float_Array (1 .. 16);
         Sources           : library.Sources_view;
         Joints            : controllers.Joints;
         vertex_weights    : controllers.vertex_Weights;
      end record;

   function Weights_of           (Self : in Skin) return access float_Array;
   function bind_shape_Matrix_of (Self : in Skin) return Matrix_4x4;
   function bind_Poses_of        (Self : in Skin) return Matrix_4x4_array;
   function joint_Names_of       (Self : in Skin) return Text_array;


   --------------
   --- Controller
   --

   type Controller is
      record
         Name : Text;
         Id   : Text;
         Skin : controllers.Skin;
      end record;

   type Controller_array      is array (Positive range <>) of Controller;
   type Controller_array_view is access Controller_array;

   ----------------
   --- Library Item
   --

   type Item is
      record
         Contents : Controller_array_view;
      end record;


end collada.Library.controllers;
