/// <summary> /// Loads descriptor of the sensor and initialize the sensor /// </summary> public bool LoadFromDesc(MySensorDesc desc) { if (m_Inserted) { return(false); } if (!desc.IsValid()) { return(false); } m_Matrix = desc.m_Matrix; m_Element = desc.m_Element; m_Element.Sensor = this; m_SensorEventHandler = desc.m_SensorEventHandler; MyCommonDebugUtils.AssertDebug(m_Interactions.Count == 0); m_Interactions.Clear(); m_Guid = GUID_COUNTER; if (GUID_COUNTER > ushort.MaxValue) { GUID_COUNTER = 0; } GUID_COUNTER++; return(true); }
/// <summary> /// Loads descriptor of the sensor and initialize the sensor /// </summary> public bool LoadFromDesc(MySensorDesc desc) { if (m_Inserted) { return false; } if(!desc.IsValid()) return false; m_Matrix = desc.m_Matrix; m_Element = desc.m_Element; m_Element.Sensor = this; m_SensorEventHandler = desc.m_SensorEventHandler; MyCommonDebugUtils.AssertDebug(m_Interactions.Count == 0); m_Interactions.Clear(); m_Guid = GUID_COUNTER; if (GUID_COUNTER > ushort.MaxValue) { GUID_COUNTER = 0; } GUID_COUNTER++; return true; }
public MySensor CreateSensor(MySensorDesc desc) { if (!desc.IsValid()) { // invalid desc MyCommonDebugUtils.AssertDebug(false); return(null); } MySensor sensor = m_SensorsPool.Allocate(); MyCommonDebugUtils.AssertDebug(sensor != null); sensor.LoadFromDesc(desc); return(sensor); }
public MySensor CreateSensor(MySensorDesc desc) { if (!desc.IsValid()) { // invalid desc MyCommonDebugUtils.AssertDebug(false); return null; } MySensor sensor = m_SensorsPool.Allocate(); MyCommonDebugUtils.AssertDebug(sensor != null); sensor.LoadFromDesc(desc); return sensor; }
public MyPhysicsObjects() { m_RigidBodyDesc = new MyRigidBodyDesc(); m_SensorDesc = new MySensorDesc(); m_RBSphereElementDesc = new MyRBSphereElementDesc(); m_RBBoxElementDesc = new MyRBBoxElementDesc(); m_RBCapsuleElementDesc = new MyRBCapsuleElementDesc(); m_RBTriangleMeshDesc = new MyRBTriangleMeshElementDesc(); m_RBVoxelElementDesc = new MyRBVoxelElementDesc(); m_SensorsPool = new MyObjectsPool <MySensor>(128); m_SphereSensorElementPool = new MyObjectsPool <MySphereSensorElement>(128); m_RigidsPool = new MyObjectsPool <MyRigidBody>(24576); m_RBSphereElementPool = new MyObjectsPool <MyRBSphereElement>(16384); m_RBBoxElementPool = new MyObjectsPool <MyRBBoxElement>(16384); m_RBCapsuleElementPool = new MyObjectsPool <MyRBCapsuleElement>(16); m_RBTriangleMeshElementPool = new MyObjectsPool <MyRBTriangleMeshElement>(16384);//value from Ales - 64 m_RBVoxelElementPool = new MyObjectsPool <MyRBVoxelElement>(512); }
public MyPhysicsObjects() { m_RigidBodyDesc = new MyRigidBodyDesc(); m_SensorDesc = new MySensorDesc(); m_RBSphereElementDesc = new MyRBSphereElementDesc(); m_RBBoxElementDesc = new MyRBBoxElementDesc(); m_RBCapsuleElementDesc = new MyRBCapsuleElementDesc(); m_RBTriangleMeshDesc = new MyRBTriangleMeshElementDesc(); m_RBVoxelElementDesc = new MyRBVoxelElementDesc(); m_SensorsPool = new MyObjectsPool<MySensor>(128); m_SphereSensorElementPool = new MyObjectsPool<MySphereSensorElement>(128); m_RigidsPool = new MyObjectsPool<MyRigidBody>(24576); m_RBSphereElementPool = new MyObjectsPool<MyRBSphereElement>(16384); m_RBBoxElementPool = new MyObjectsPool<MyRBBoxElement>(16384); m_RBCapsuleElementPool = new MyObjectsPool<MyRBCapsuleElement>(16); m_RBTriangleMeshElementPool = new MyObjectsPool<MyRBTriangleMeshElement>(16384);//value from Ales - 64 m_RBVoxelElementPool = new MyObjectsPool<MyRBVoxelElement>(512); }
protected override void InitPrefab(string displayName, Vector3 relativePosition, Matrix localOrientation, MyMwcObjectBuilder_PrefabBase objectBuilder, MyPrefabConfiguration prefabConfig) { MyPrefabConfigurationKinematic prefabKinematicConfig = (MyPrefabConfigurationKinematic)prefabConfig; MyMwcObjectBuilder_PrefabKinematic kinematicBuilder = objectBuilder as MyMwcObjectBuilder_PrefabKinematic; MyModel model = MyModels.GetModelOnlyDummies(m_config.ModelLod0Enum); for (int i = 0; i < prefabKinematicConfig.KinematicParts.Count; i++) { MyPrefabConfigurationKinematicPart kinematicPart = prefabKinematicConfig.KinematicParts[i]; MyModelDummy open, close; if (model.Dummies.TryGetValue(kinematicPart.m_open, out open) && model.Dummies.TryGetValue(kinematicPart.m_close, out close)) { float? kinematicPartHealth = kinematicBuilder.KinematicPartsHealth[i]; float? kinematicPartMaxHealth = kinematicBuilder.KinematicPartsMaxHealth[i]; uint? kinematicPartEntityId = kinematicBuilder.KinematicPartsEntityId[i]; // if health is not set or not destroyed, then create part if (kinematicPartHealth == null || kinematicPartHealth != 0) { MyPrefabKinematicPart newPart = new MyPrefabKinematicPart(m_owner); if (kinematicPartEntityId.HasValue) { newPart.EntityId = new MyEntityIdentifier(kinematicPartEntityId.Value); } Parts[i] = newPart; newPart.Init(this, kinematicPart, prefabKinematicConfig.m_openTime, prefabKinematicConfig.m_closeTime, (MyModelsEnum)kinematicPart.m_modelMovingEnum, open.Matrix, close.Matrix, prefabKinematicConfig.MaterialType, prefabKinematicConfig.m_soundLooping, prefabKinematicConfig.m_soundOpening, prefabKinematicConfig.m_soundClosing/*, m_groupMask*/, kinematicPartHealth, kinematicPartMaxHealth, Activated); } } } //make handler m_sensorHandler = new MyPrefabKinematicSensor(this); MySphereSensorElement sensorEl = new MySphereSensorElement(); sensorEl.Radius = DETECT_RADIUS; sensorEl.LocalPosition = new Vector3(0, 0, 0); sensorEl.DetectRigidBodyTypes = MyConstants.RIGIDBODY_TYPE_SHIP; sensorEl.SpecialDetectingAngle = DETECTION_ANGLE; MySensorDesc senDesc = new MySensorDesc(); senDesc.m_Element = sensorEl; senDesc.m_Matrix = WorldMatrix; senDesc.m_SensorEventHandler = m_sensorHandler; m_sensor = new MySensor(); m_sensor.LoadFromDesc(senDesc); MyPhysics.physicsSystem.GetSensorModule().AddSensor(m_sensor); GetOwner().UpdateAABB(); UseProperties = new MyUseProperties(MyUseType.FromHUB | MyUseType.Solo, MyUseType.FromHUB); if (kinematicBuilder.UseProperties == null) { UseProperties.Init(MyUseType.FromHUB, MyUseType.FromHUB, 3, 4000, false); } else { UseProperties.Init(kinematicBuilder.UseProperties); } UpdateHudAndCloseStatus(); }
private void InitSensor(MyMwcObjectBuilder_EntityDetector_TypesEnum type, Vector3 size) { MySensorElement sensorElement; if (type == MyMwcObjectBuilder_EntityDetector_TypesEnum.Sphere) { MySphereSensorElement sphereSensorElement = new MySphereSensorElement(); sphereSensorElement.Radius = size.Length() / 2f; sensorElement = sphereSensorElement; EntityDetectorType = MyEntityDetectorType.Sphere; m_radius = sphereSensorElement.Radius; } else if (type == MyMwcObjectBuilder_EntityDetector_TypesEnum.Box) { MyBoxSensorElement boxSensorElement = new MyBoxSensorElement(); boxSensorElement.Size = size; sensorElement = boxSensorElement; EntityDetectorType = MyEntityDetectorType.Box; m_extent = size / 2f; } else { throw new MyMwcExceptionApplicationShouldNotGetHere(); } sensorElement.LocalPosition = Vector3.Zero; MySensorDesc senDesc = new MySensorDesc(); senDesc.m_Element = sensorElement; senDesc.m_Matrix = Matrix.Identity; senDesc.m_SensorEventHandler = this; m_sensor.Inserted = false; m_sensor.LoadFromDesc(senDesc); m_sensor.Active = true; m_size = size; }