public MyGuiScreenEditorEditProperties(List <MyEntity> entities) : base(new Vector2(0.5f, 0.5f), new Vector2(0.75f, 1f)) { Debug.Assert(entities.Count > 0); Debug.Assert(CanEditProperties(entities)); AddCaption(new StringBuilder("Edit properties"), MyGuiConstants.LABEL_TEXT_COLOR); m_entities = entities; m_editProperties = new MyEditProperties(); m_editProperties.Name = m_entities[0].Name; m_editProperties.DisplayName = m_entities[0].DisplayName; m_editProperties.Faction = m_entities[0].Faction; m_editProperties.HealthRatio = m_entities[0].HealthRatio; m_editProperties.MaxHealth = m_entities[0].MaxHealth; m_editProperties.IsIndestructible = !m_entities[0].IsDestructible; m_editProperties.RequiresEnergy = m_entities[0] is MyPrefabBase ? ((MyPrefabBase)m_entities[0]).RequiresEnergy : null; m_editProperties.UseProperties = m_entities[0] is IMyUseableEntity ? ((IMyUseableEntity)m_entities[0]).UseProperties : null; m_editProperties.IsActivated = m_entities[0].Activated; m_editProperties.DisplayHud = m_entities[0].DisplayOnHud; m_editProperties.Difficulty = m_entities[0].MaxDifficultyToActivated; if (m_entities[0] is MyPrefabKinematic) { MyPrefabKinematic prefabKinematic = m_entities[0] as MyPrefabKinematic; MyPrefabConfigurationKinematic prefabKinematicConfig = prefabKinematic.GetConfiguration() as MyPrefabConfigurationKinematic; m_editProperties.KinematicPartsHealthAndMaxHealth = new MyHealthAndMaxHealth[prefabKinematicConfig.KinematicParts.Count]; for (int i = 0; i < m_editProperties.KinematicPartsHealthAndMaxHealth.Length; i++) { MyPrefabKinematicPart kinematicPart = prefabKinematic.Parts[i]; if (kinematicPart != null) { float health = kinematicPart.Health; float maxHealth = kinematicPart.MaxHealth; m_editProperties.KinematicPartsHealthAndMaxHealth[i] = new MyHealthAndMaxHealth(health, maxHealth); } } } m_editPropertiesFlags = GetEditProperties(m_entities); DetectNotSameProperties(); InitControls(); m_errorMessages = new List <StringBuilder>(); m_errorMessage = new StringBuilder(); }
private void Save() { foreach (MyEntity entity in m_entities) { if (m_name != null) { entity.SetName(m_editProperties.Name); } if (m_displayName != null) { entity.DisplayName = m_editProperties.DisplayName; } if (m_faction != null) { entity.Faction = m_editProperties.Faction; } if (m_requiresEnergyCheckbox != null) { ((MyPrefabBase)entity).RequiresEnergy = m_requiresEnergyCheckbox.Checked; } if (m_maxHealth != null) { entity.MaxHealth = m_editProperties.MaxHealth.Value; } if (m_healthPercentage != null) { entity.HealthRatio = m_editProperties.HealthRatio.Value; } if (m_indestructible != null) { entity.IsDestructible = !m_indestructible.Checked; } if (m_useProperties != null) { m_useProperties.SaveTo(((IMyUseableEntity)entity).UseProperties); } if (m_activated != null) { entity.Activate(m_editProperties.IsActivated, false); } if (m_displayHud != null) { entity.DisplayOnHud = m_editProperties.DisplayHud; } if (m_difficulty != null) { entity.MaxDifficultyToActivated = m_editProperties.Difficulty; } if (m_editProperties.KinematicPartsHealthAndMaxHealth != null && entity is MyPrefabKinematic) { MyPrefabKinematic prefabKinematic = entity as MyPrefabKinematic; for (int i = 0; i < m_editProperties.KinematicPartsHealthAndMaxHealth.Length; i++) { MyHealthAndMaxHealth healthAndMaxHealth = m_editProperties.KinematicPartsHealthAndMaxHealth[i]; MyPrefabKinematicPart prefabKinematicPart = prefabKinematic.Parts[i]; if (healthAndMaxHealth != null && prefabKinematicPart != null) { prefabKinematicPart.MaxHealth = healthAndMaxHealth.MaxHealth; prefabKinematicPart.Health = healthAndMaxHealth.Health; } } } } }
private void DetectNotSameProperties() { m_editPropertiesNotSame = new bool[MyMwcUtils.GetMaxValueFromEnum <MyEditPropertyEnum>() + 1]; foreach (MyEntity entity in m_entities) { if ((m_editPropertiesFlags & MyEditPropertyEnum.Name) > 0 && entity.Name != m_editProperties.Name) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.Name] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.DisplayName) > 0 && entity.DisplayName != m_editProperties.DisplayName) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.DisplayName] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.Faction) > 0 && entity.Faction != m_editProperties.Faction) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.Faction] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.HealthRatio) > 0 && entity.HealthRatio != m_editProperties.HealthRatio) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.HealthRatio] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.MaxHealth) > 0 && entity.MaxHealth != m_editProperties.MaxHealth) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.MaxHealth] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.Indestructible) > 0 && !entity.IsDestructible != m_editProperties.IsIndestructible) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.Indestructible] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.UseProperties) > 0 && entity is IMyUseableEntity && ((IMyUseableEntity)entity).UseProperties != m_editProperties.UseProperties) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.UseProperties] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.RequiresEnergy) > 0 && entity is MyPrefabBase && ((MyPrefabBase)entity).RequiresEnergy != m_editProperties.RequiresEnergy) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.RequiresEnergy] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.Activated) > 0 && entity.Activated != m_editProperties.IsActivated) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.Activated] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.DisplayHud) > 0 && entity.DisplayOnHud != m_editProperties.DisplayHud) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.DisplayHud] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.Difficulty) > 0 && entity.MaxDifficultyToActivated != m_editProperties.Difficulty) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.Difficulty] = true; } if ((m_editPropertiesFlags & MyEditPropertyEnum.KinematicPartsHealthAndMaxHealth) > 0 && entity is MyPrefabKinematic) { MyPrefabKinematic prefabKinematic = entity as MyPrefabKinematic; MyPrefabConfigurationKinematic prefabKinematicConfig = prefabKinematic.GetConfiguration() as MyPrefabConfigurationKinematic; for (int i = 0; i < prefabKinematicConfig.KinematicParts.Count; i++) { MyPrefabKinematicPart prefabKinematicPart = prefabKinematic.Parts[i]; if (m_editProperties.KinematicPartsHealthAndMaxHealth == null && (prefabKinematicConfig.KinematicParts.Count != m_editProperties.KinematicPartsHealthAndMaxHealth.Length || m_editProperties.KinematicPartsHealthAndMaxHealth[i] == null && prefabKinematicPart != null || m_editProperties.KinematicPartsHealthAndMaxHealth[i] != null && prefabKinematicPart == null || m_editProperties.KinematicPartsHealthAndMaxHealth[i].Health != prefabKinematicPart.Health || m_editProperties.KinematicPartsHealthAndMaxHealth[i].MaxHealth != prefabKinematicPart.MaxHealth)) { m_editPropertiesNotSame[(int)MyEditPropertyEnum.KinematicPartsHealthAndMaxHealth] = true; } } } } }
public void RemovePart(MyPrefabKinematicPart part) { int partsCount = 0; for (int i = 0; i < MyMwcObjectBuilder_PrefabKinematic.MAX_KINEMATIC_PARTS; i++) { if (Parts[i] == part) { Parts[i] = null; } if (Parts[i] != null) { partsCount++; } } if (partsCount == 0) { RemoveLockedHud(); } }
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(); }