1. -- 
  2. -- Jan & Uwe R. Zimmer, Australia, July 2011 
  3. -- 
  4.  
  5. with Ada.Numerics;          use Ada.Numerics; 
  6.  
  7. with Graphics_Configuration; use Graphics_Configuration; 
  8. with Float_Type;            use Float_Type; 
  9. with Swarm_Configurations;   use Swarm_Configurations; 
  10. --  with Swarm_Structures;      use Swarm_Structures; 
  11. with Swarm_Structures_Base; use Swarm_Structures_Base; 
  12. with Vectors_3D;            use Vectors_3D; 
  13.  
  14. package Swarm_Configuration is 
  15.  
  16.    Configuration : Configurations := Single_Globe_In_Orbit; -- (Single_Globe_In_Orbit, Dual_Globes_In_Orbit, Globe_Grid_In_Centre) 
  17.  
  18.    Initial_No_of_Elements : constant Positive  := 42; 
  19.    Initial_Swarm_Position : constant Vector_3D := Zero_Vector_3D; 
  20.    Initual_Edge_Length    : constant Real      := 1.0; 
  21.  
  22.    Repulse_Strength           : constant Real :=   1.00; 
  23.    Repulse_Centre             : constant Real :=   0.12; 
  24.    Repulse_Steepness          : constant Real :=  30.00; 
  25.    Unconditional_Repulse_Dist : constant Real :=   0.30; 
  26.  
  27.    Attract_Strength           : constant Real :=   0.20; 
  28.    Attract_Close_Centre       : constant Real :=   0.80; 
  29.    Attract_Close_Steepness    : constant Real :=  50.00; 
  30.    Attract_Far_Centre         : constant Real :=   2.00; 
  31.    Attract_Far_Steepness      : constant Real :=   4.00; 
  32.  
  33.    Approach_Strength          : constant Real :=   1.00; 
  34.    Approach_Steepness         : constant Real :=   1.00; 
  35.    Max_Approach_Velocity      : constant Real :=   3.00; 
  36.    Target_Fetch_Range         : constant Real :=   0.03; 
  37.  
  38.    Detection_Range            : constant Real :=   3.00; -- 3.00; 
  39.    Comms_Range                : constant Real :=   0.20; 
  40.  
  41.    Velocity_Matching_Range    : constant Real :=   0.30; 
  42.    Velocity_Matching_Strength : constant Real :=   0.05; 
  43.  
  44.    Friction                   : constant Real :=   0.02; -- 0.01; 
  45.  
  46.    No_of_Cores_for_Swarm      : constant Positive := 8; 
  47.  
  48.    Max_Assumed_Acceleration   : constant Real  :=  1.50; 
  49.    Max_Update_Interval        : constant Float :=  0.10; -- sec. 
  50.  
  51.    Charging_Setup         : constant Charging_Setups_R := Charging_Setups (Configuration); 
  52.    Energy_Globe_Detection : constant Real              := Energy_Globe_Detections (Configuration); 
  53.    Energy_Globes_Defaults : constant Energy_Globes_A   := Globe_Defaults (Configuration); 
  54.  
  55.    -- Orbiting parameters for globes 
  56.    Sphere_Increment : constant Vector_3D := (x => 2.0 * Pi / Intented_Framerate / 1000.0, 
  57.                                              y => 2.0 * Pi / Intented_Framerate / 1100.0, 
  58.                                              z => 2.0 * Pi / Intented_Framerate / 120.0); 
  59.  
  60.    function Inter_Swarm_Attraction   (x : Distances) return Acc_Scalar; 
  61.    function Inter_Swarm_Repulsion    (x : Distances) return Acc_Scalar; 
  62.    function Inter_Swarm_Acceleration (x : Distances) return Acc_Scalar; 
  63.  
  64.    function Approach_Acceleration    (Velocity_Towards_Goal : Real) return Acc_Scalar; 
  65.    function Approach_Acceleration    (x : Distances; 
  66.                                       Velocity_Towards_Goal : Real) return Acc_Scalar; 
  67.  
  68.    function Velocity_Matching (Velocity, Velocity_Difference : Velocities) return Accelerations; 
  69.  
  70. end Swarm_Configuration;