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