Load static configs from JSON, export build setup
This commit is contained in:
@@ -1,8 +1,5 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using TMPro;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
using Unity.VisualScripting;
|
||||
using UnityEngine;
|
||||
|
||||
public abstract class Agent : MonoBehaviour {
|
||||
@@ -22,7 +19,9 @@ public abstract class Agent : MonoBehaviour {
|
||||
protected double _timeInPhase = 0;
|
||||
|
||||
[SerializeField]
|
||||
public StaticConfig StaticConfig;
|
||||
public string staticConfigFile = "generic_static_config.json";
|
||||
|
||||
protected StaticConfig _staticConfig;
|
||||
|
||||
// Define delegates
|
||||
public delegate void AgentHitEventHandler(Agent agent);
|
||||
@@ -130,6 +129,10 @@ public abstract class Agent : MonoBehaviour {
|
||||
protected abstract void UpdateBoost(double deltaTime);
|
||||
protected abstract void UpdateMidCourse(double deltaTime);
|
||||
|
||||
protected virtual void Awake() {
|
||||
_staticConfig = ConfigLoader.LoadStaticConfig(staticConfigFile);
|
||||
}
|
||||
|
||||
// Start is called before the first frame update
|
||||
protected virtual void Start() {
|
||||
_flightPhase = FlightPhase.READY;
|
||||
@@ -141,7 +144,7 @@ public abstract class Agent : MonoBehaviour {
|
||||
_timeInPhase += Time.fixedDeltaTime;
|
||||
|
||||
var launch_time = _agentConfig.dynamic_config.launch_config.launch_time;
|
||||
var boost_time = launch_time + StaticConfig.boostConfig.boostTime;
|
||||
var boost_time = launch_time + _staticConfig.boostConfig.boostTime;
|
||||
double elapsedSimulationTime = SimManager.Instance.GetElapsedSimulationTime();
|
||||
|
||||
if (_flightPhase == FlightPhase.TERMINATED) {
|
||||
|
||||
@@ -17,6 +17,20 @@ public static class ConfigLoader {
|
||||
}
|
||||
}
|
||||
|
||||
public static StaticConfig LoadStaticConfig(string configFileName) {
|
||||
string configFilePath = Path.Combine(Application.streamingAssetsPath, "Configs/Models", configFileName);
|
||||
if (File.Exists(configFilePath)) {
|
||||
string json = File.ReadAllText(configFilePath);
|
||||
StaticConfig config = JsonConvert.DeserializeObject<StaticConfig>(json, new JsonSerializerSettings {
|
||||
Converters = { new Newtonsoft.Json.Converters.StringEnumConverter() }
|
||||
});
|
||||
return config;
|
||||
} else {
|
||||
Debug.LogError($"Static configuration file not found at path: {configFilePath}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public static void PrintSimulationConfig(SimulationConfig config)
|
||||
{
|
||||
if (config == null)
|
||||
|
||||
@@ -1,67 +1,43 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using System;
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class StaticConfig {
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class AccelerationConfig {
|
||||
[Tooltip("Maximum reference acceleration")]
|
||||
public float maxReferenceAcceleration = 300f;
|
||||
[Tooltip("Reference speed")]
|
||||
public float referenceSpeed = 1000f;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class BoostConfig {
|
||||
[Tooltip("Boost time in seconds")]
|
||||
public float boostTime = 0.3f;
|
||||
[Tooltip("Boost acceleration")]
|
||||
public float boostAcceleration = 350f;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class LiftDragConfig {
|
||||
[Tooltip("Lift coefficient")]
|
||||
public float liftCoefficient = 0.2f;
|
||||
[Tooltip("Drag coefficient")]
|
||||
public float dragCoefficient = 0.7f;
|
||||
[Tooltip("Lift to drag ratio")]
|
||||
public float liftDragRatio = 5f;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class BodyConfig {
|
||||
[Tooltip("Mass in kg")]
|
||||
public float mass = 0.37f;
|
||||
[Tooltip("Cross-sectional area in m²")]
|
||||
public float crossSectionalArea = 3e-4f;
|
||||
[Tooltip("Fin area in m²")]
|
||||
public float finArea = 6e-4f;
|
||||
[Tooltip("Body area in m²")]
|
||||
public float bodyArea = 1e-2f;
|
||||
}
|
||||
|
||||
[System.Serializable]
|
||||
[Serializable]
|
||||
public class HitConfig {
|
||||
[Tooltip("Hit radius")]
|
||||
public float hitRadius = 1f;
|
||||
[Tooltip("Kill probability")]
|
||||
public float killProbability = 0.9f;
|
||||
}
|
||||
|
||||
[Header("Acceleration Configuration")]
|
||||
public AccelerationConfig accelerationConfig;
|
||||
|
||||
[Header("Boost Configuration")]
|
||||
public BoostConfig boostConfig;
|
||||
|
||||
[Header("Lift and Drag Configuration")]
|
||||
public LiftDragConfig liftDragConfig;
|
||||
|
||||
[Header("Body Configuration")]
|
||||
public BodyConfig bodyConfig;
|
||||
|
||||
[Header("Hit Configuration")]
|
||||
public HitConfig hitConfig;
|
||||
}
|
||||
@@ -120,8 +120,11 @@ public class InputManager : MonoBehaviour
|
||||
void HandleNonLockableInput()
|
||||
{
|
||||
HandleScrollWheelInput();
|
||||
if (Input.GetKeyDown(KeyCode.I))
|
||||
|
||||
if(Input.GetKeyDown(KeyCode.Escape))
|
||||
{
|
||||
Application.Quit();
|
||||
}
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.C))
|
||||
{
|
||||
|
||||
@@ -22,7 +22,7 @@ public class Missile : Agent {
|
||||
// Unassign the target from the missile.
|
||||
public override void UnassignTarget() {
|
||||
base.UnassignTarget();
|
||||
}
|
||||
}
|
||||
|
||||
protected override void UpdateReady(double deltaTime) {
|
||||
Vector3 accelerationInput = Vector3.zero;
|
||||
@@ -43,7 +43,7 @@ public class Missile : Agent {
|
||||
|
||||
// Calculate boost acceleration
|
||||
float boostAcceleration =
|
||||
(float)(StaticConfig.boostConfig.boostAcceleration * Constants.kGravity);
|
||||
(float)(_staticConfig.boostConfig.boostAcceleration * Constants.kGravity);
|
||||
Vector3 accelerationInput = boostAcceleration * rollAxis;
|
||||
|
||||
// Calculate the total acceleration
|
||||
@@ -81,7 +81,7 @@ public class Missile : Agent {
|
||||
Agent otherAgent = other.gameObject.GetComponentInParent<Agent>();
|
||||
if (otherAgent != null && otherAgent.GetComponent<Target>() != null) {
|
||||
// Check kill probability before marking as hit
|
||||
float killProbability = StaticConfig.hitConfig.killProbability;
|
||||
float killProbability = _staticConfig.hitConfig.killProbability;
|
||||
GameObject markerObject = Instantiate(Resources.Load<GameObject>("Prefabs/HitMarkerPrefab"),
|
||||
transform.position, Quaternion.identity);
|
||||
if (Random.value <= killProbability) {
|
||||
@@ -102,8 +102,8 @@ public class Missile : Agent {
|
||||
|
||||
protected float CalculateMaxAcceleration() {
|
||||
float maxReferenceAcceleration =
|
||||
(float)(StaticConfig.accelerationConfig.maxReferenceAcceleration * Constants.kGravity);
|
||||
float referenceSpeed = StaticConfig.accelerationConfig.referenceSpeed;
|
||||
(float)(_staticConfig.accelerationConfig.maxReferenceAcceleration * Constants.kGravity);
|
||||
float referenceSpeed = _staticConfig.accelerationConfig.referenceSpeed;
|
||||
return Mathf.Pow(GetComponent<Rigidbody>().velocity.magnitude / referenceSpeed, 2) *
|
||||
maxReferenceAcceleration;
|
||||
}
|
||||
@@ -122,9 +122,9 @@ public class Missile : Agent {
|
||||
}
|
||||
|
||||
private float CalculateDrag() {
|
||||
float dragCoefficient = StaticConfig.liftDragConfig.dragCoefficient;
|
||||
float crossSectionalArea = StaticConfig.bodyConfig.crossSectionalArea;
|
||||
float mass = StaticConfig.bodyConfig.mass;
|
||||
float dragCoefficient = _staticConfig.liftDragConfig.dragCoefficient;
|
||||
float crossSectionalArea = _staticConfig.bodyConfig.crossSectionalArea;
|
||||
float mass = _staticConfig.bodyConfig.mass;
|
||||
float dynamicPressure = (float)GetDynamicPressure();
|
||||
float dragForce = dragCoefficient * dynamicPressure * crossSectionalArea;
|
||||
return dragForce / mass;
|
||||
@@ -133,7 +133,7 @@ public class Missile : Agent {
|
||||
private float CalculateLiftInducedDrag(Vector3 accelerationInput) {
|
||||
float liftAcceleration =
|
||||
(accelerationInput - Vector3.Dot(accelerationInput, transform.up) * transform.up).magnitude;
|
||||
float liftDragRatio = StaticConfig.liftDragConfig.liftDragRatio;
|
||||
float liftDragRatio = _staticConfig.liftDragConfig.liftDragRatio;
|
||||
return Mathf.Abs(liftAcceleration / liftDragRatio);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user