1. -- 
  2. -- Jan & Uwe R. Zimmer, Australia, September 2019 
  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 := Single_Globe_In_Orbit; 
  20.    -- valid Configurations are (Single_Globe_In_Orbit, Dual_Globes_In_Orbit, Dual_Globes_In_Orbit_Fast, 
  21.    --                           Random_Globes_In_Orbits, Globe_Grid_In_Centre, Globe_Grid_Drifting) 
  22.    ----------------------------------------------------------------------------- 
  23.  
  24.    Initial_No_of_Elements : constant Positive  := 64; 
  25.    Initial_Swarm_Position : constant Vector_3D := Zero_Vector_3D; 
  26.    Initual_Edge_Length    : constant Real      := 1.0; 
  27.  
  28.    Repulse_Strength           : constant Real :=   1.00; 
  29.    Repulse_Centre             : constant Real :=   0.12; 
  30.    Repulse_Steepness          : constant Real :=  30.00; 
  31.    Unconditional_Repulse_Dist : constant Real :=   0.30; 
  32.  
  33.    Attract_Strength           : constant Real :=   0.20; 
  34.    Attract_Close_Centre       : constant Real :=   0.80; 
  35.    Attract_Close_Steepness    : constant Real :=  50.00; 
  36.    Attract_Far_Centre         : constant Real :=   2.00; 
  37.    Attract_Far_Steepness      : constant Real :=   4.00; 
  38.  
  39.    Approach_Strength          : constant Real :=   1.00; 
  40.    Approach_Steepness         : constant Real :=   1.00; 
  41.    Max_Approach_Velocity      : constant Real :=   3.00; 
  42.    Target_Fetch_Range         : constant Real :=   0.03; 
  43.  
  44.    Detection_Range            : constant Real :=   3.00; 
  45.    Comms_Range                : constant Real :=   0.20; 
  46.  
  47.    Velocity_Matching_Range    : constant Real :=   0.30; 
  48.    Velocity_Matching_Strength : constant Real :=   0.05; 
  49.  
  50.    Friction                   : constant Real :=   0.02; 
  51.  
  52.    No_of_Cores_for_Swarm      : constant Positive := Positive (Number_Of_CPUs); 
  53.  
  54.    Max_Assumed_Acceleration   : constant Real  :=  1.50; 
  55.    Max_Update_Interval        : constant Real  :=  0.10; -- sec. 
  56.  
  57.    Charging_Setup         : constant Charging_Setups_R := Charging_Setups (Configuration); 
  58.    Energy_Globe_Detection : constant Real              := Energy_Globe_Detections (Configuration); 
  59.    Energy_Globes_Defaults : constant Energy_Globes     := Default_Globes (Configuration); 
  60.    Energy_Globes_Velocity : constant Vector_3D         := (x => 0.15, y => 0.0, z => 0.0); 
  61.  
  62.    -- Orbiting parameters for globes 
  63.    Sphere_Increment : constant Vector_3D := (x => 2.0 * Pi / Intented_Framerate / 1000.0, 
  64.                                              y => 2.0 * Pi / Intented_Framerate / 1100.0, 
  65.                                              z => 2.0 * Pi / Intented_Framerate / 120.0); 
  66.  
  67.    Sphere_Increment_Fast : constant Vector_3D := (x => 2.0 * Pi / Intented_Framerate / 100.0, 
  68.                                                   y => 2.0 * Pi / Intented_Framerate / 110.0, 
  69.                                                   z => 2.0 * Pi / Intented_Framerate / 12.0); 
  70.  
  71.    Tolerated_Vehicle_Activation_Delay : constant Duration := To_Duration (Milliseconds (100)); 
  72.    Tolerated_Identify_Call_Delay      : constant Duration := To_Duration (Milliseconds (100)); 
  73.  
  74.    function Inter_Swarm_Attraction   (x : Distances) return Acc_Scalar; 
  75.    function Inter_Swarm_Repulsion    (x : Distances) return Acc_Scalar; 
  76.    function Inter_Swarm_Acceleration (x : Distances) return Acc_Scalar; 
  77.  
  78.    function Approach_Acceleration    (Velocity_Towards_Goal : Real) return Acc_Scalar; 
  79.    function Approach_Acceleration    (x : Distances; 
  80.                                       Velocity_Towards_Goal : Real) return Acc_Scalar; 
  81.  
  82.    function Velocity_Matching (Velocity, Velocity_Difference : Velocities) return Accelerations; 
  83.  
  84. end Swarm_Configuration;