using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MagicPhysX; // for enable Extension Methods. using MagicPhysX.Toolkit; using PhysX; using static MagicPhysX.NativeMethods; // recommend to use C API. namespace Physx { public unsafe struct PhysxWorldManager { public PhysxWorldManager() { //TODO 后续根据实际业务来写 //stamp_ = KG_GetTimeStamp(); stamp_ = 0; physx_world_manager_.Clear(); } //virtual ~PhysxWorldManager(); bool AddPhysxWorld(UInt64 area_id) { var itl = physx_world_manager_.ContainsKey(area_id); if (itl = true) return false; var physx_world = new PhysxWorld(); // physx_world if (physx_world.Equals(default(PhysxWorld)) == false) return false; physx_world.OnInit(); //physx_world_manager_.Add< area_id, physx_world}); physx_world_manager_.Add(area_id, (nint)(&physx_world)); return true; } PhysxWorld* GetPhysxWorld(UInt64 area_id) { nint ret = 0; if (physx_world_manager_.TryGetValue(area_id, out ret)) { return (PhysxWorld*)(ret.ToPointer()); } return null; } bool AddActorToPhysxWorld(UInt64 area_id, PxRigidActor* obj) { var physx_world = GetPhysxWorld(area_id); if (physx_world == null) { return false; } physx_world->AddActorToDaynamicWorld(obj); return true; } bool PickUpActorFromPhysxWorld(UInt64 area_id, PxRigidActor* obj) { var physx_world = GetPhysxWorld(area_id); if (physx_world == null) { return false; } physx_world->PickUpActor(obj); return true; } //暂不实现 业务代码 //bool SwitchPhysxWorld(KScene* scene, UInt64 cur_area_id, UInt64 to_area_id, KHero* hero) //{ //} //bool UpdatePhysxWorld(KScene* secene) //{ // return false; //} bool HasPhysxWorld() { return physx_world_manager_.Count() > 0; } Dictionary physx_world_manager_; UInt64 stamp_; } }