Space-Smash-Out/Assets/Scripts/Managers/AffectingForcesManager.cs
Jakob Feldmann 64162cb4a1 feat: whole project restructuring
This can be seen as the initial state of the project after the released demo.

The changes include:
- New ship models
- Singleton manager structure to keep project scaleable in the future
     - Managing players, their settings, character choices, statistics, match setups, controls etc. in a separate decoupled scene
- Main menu with transitions to the arena scene
- Beginnings of a custom audio solution
- Logging with Log4Net

It is really a complete overhaul of the projects structure and management.
2024-04-01 23:06:39 +02:00

62 lines
1.5 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
public class AffectingForcesManager : MonoBehaviour
{
public enum Zone { NimbleZone, OutsideZone, UninitializedZone }
private Dictionary<int, Vector3> impulseForces = new Dictionary<int, Vector3>();
private Dictionary<int, Func<Transform, Vector3>> currentGravity = new Dictionary<int, Func<Transform, Vector3>>();
private Dictionary<int, Zone> zoneInhabitants = new Dictionary<int, Zone>();
public Zone GetZoneOfInstance(int id)
{
if (!zoneInhabitants.ContainsKey(id))
{
return Zone.UninitializedZone;
}
return zoneInhabitants[id];
}
public void IntroduceImpulseForce(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, Vector3> gravityFunction)
{
currentGravity[instanceID] = gravityFunction;
}
public Vector3 GetImpulseForInstance(int instanceID)
{
if (impulseForces.ContainsKey(instanceID))
{
return impulseForces[instanceID];
}
return new Vector3();
}
public Func<Transform, Vector3> GetGravityForInstance(int instanceID)
{
if (currentGravity.ContainsKey(instanceID))
{
return currentGravity[instanceID];
}
return new Func<Transform, Vector3>(position => new Vector3());
}
}