72 lines
1.8 KiB
C#
72 lines
1.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
public class AffectingForcesManager : MonoBehaviour
|
|
{
|
|
public enum Zone { NimbleZone, OutsideZone, UninitializedZone }
|
|
private readonly Dictionary<int, Vector3> impulseForces = new();
|
|
private readonly Dictionary<int, Func<Transform, Transform, Vector3>> currentGravity = new();
|
|
private readonly Dictionary<int, Transform> currentGravitySource = new();
|
|
private readonly Dictionary<int, Zone> zoneInhabitants = new();
|
|
|
|
public Zone GetZoneOfInstance(int id)
|
|
{
|
|
if (!zoneInhabitants.ContainsKey(id))
|
|
{
|
|
return Zone.UninitializedZone;
|
|
}
|
|
|
|
return zoneInhabitants[id];
|
|
}
|
|
|
|
public void IntroduceForce(int instanceID, Vector3 force)
|
|
{
|
|
if (!impulseForces.ContainsKey(instanceID))
|
|
{
|
|
impulseForces[instanceID] = force;
|
|
}
|
|
else
|
|
{
|
|
impulseForces[instanceID] += force;
|
|
}
|
|
}
|
|
|
|
public void SetZoneForInstance(int instnaceID, Zone zone)
|
|
{
|
|
zoneInhabitants[instnaceID] = zone;
|
|
}
|
|
|
|
public void SetGravityForInstance(int instanceID, Func<Transform, Transform, Vector3> gravityFunction, Transform gravitySource)
|
|
{
|
|
currentGravity[instanceID] = gravityFunction;
|
|
currentGravitySource[instanceID] = gravitySource;
|
|
}
|
|
|
|
public Vector3 GetForceForInstance(int instanceID)
|
|
{
|
|
if (impulseForces.ContainsKey(instanceID))
|
|
{
|
|
return impulseForces[instanceID];
|
|
}
|
|
return new Vector3();
|
|
}
|
|
|
|
public Func<Transform, Transform, Vector3> GetGravityForInstance(int instanceID)
|
|
{
|
|
if (currentGravity.ContainsKey(instanceID))
|
|
{
|
|
return currentGravity[instanceID];
|
|
}
|
|
return new Func<Transform, Transform, Vector3>((gravitySource, target) => new Vector3());
|
|
}
|
|
public Transform GetGravitySourceForInstance(int instanceID)
|
|
{
|
|
if (currentGravitySource.ContainsKey(instanceID))
|
|
{
|
|
return currentGravitySource[instanceID];
|
|
}
|
|
return transform;
|
|
}
|
|
}
|