Example #1
0
        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();
        }
Example #2
0
        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;
                        }
                    }
                }
            }
        }
Example #3
0
 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();
        }