public SimulationContext(HavokConfiguration config) { // Unlock the plugin if it hasn't already been done. // If it remains locked, the simulation will do nothing. Plugin.EnsureUnlocked(); TimeStep = default; InputVelocities = default; Camera = default; unsafe { // Allocate this at a fixed memory location. The plugin writes to it. StepContext = (HavokSimulation.StepContext *)UnsafeUtility.Malloc(sizeof(HavokSimulation.StepContext), 16, Allocator.Persistent); UnsafeUtility.MemClear(StepContext, sizeof(HavokSimulation.StepContext)); VisualDebuggerEnabled = config.VisualDebugger.Enable != 0; WorldIndex = Plugin.HP_AllocateWorld(ref config, StepContext); m_WorldAllocated = true; } HaveStaticBodiesChanged = default; StaticBodiesSyncedOnce = false; }
protected override void OnUpdate() { World.GetExistingSystem <Unity.Physics.Systems.StepPhysicsWorld>().RegisterSimulation(SimulationType.HavokPhysics, () => { HavokConfiguration config = HasSingleton <HavokConfiguration>() ? GetSingleton <HavokConfiguration>() : HavokConfiguration.Default; return(new HavokSimulation(config)); }); }
protected override void OnUpdate() { World.GetExistingSystem <StepPhysicsWorld>().RegisterSimulation(SimulationType.HavokPhysics, () => { HavokConfiguration config = HasSingleton <HavokConfiguration>() ? GetSingleton <HavokConfiguration>() : HavokConfiguration.Default; var simulation = new HavokSimulation(config); simulation.SetStaticBodiesChangedFlag(World.GetExistingSystem <BuildPhysicsWorld>().HaveStaticBodiesChanged); return(simulation); }); }
internal static extern unsafe int HP_AllocateWorld(ref HavokConfiguration config, HavokSimulation.StepContext *stepContext);
public HavokSimulation(HavokConfiguration config) { m_SimulationContext = new SimulationContext(config); }