void SetAutoMountIfExceededLimit(MyMwcObjectBuilder_SmallShip_Weapon weaponObjectBuilder)
        {
            if (!weaponObjectBuilder.IsNormalWeapon)
            {
                return;
            }

            const int universalLauncherCount    = 2;
            var       maxNormalWeapons          = Ship.ShipTypeProperties.GamePlay.MaxWeapons - universalLauncherCount;
            var       maxNormalWeaponsOnOneWing = maxNormalWeapons / 2;

            var tooManyLeft  = GetNormalWeaponCount(MySlotLocationEnum.LeftSide) >= maxNormalWeaponsOnOneWing;
            var tooManyRight = GetNormalWeaponCount(MySlotLocationEnum.RightSide) >= maxNormalWeaponsOnOneWing;

            if (tooManyLeft && tooManyRight)
            {
                weaponObjectBuilder.SetAutoMount();
                return;
            }

            if (tooManyLeft)
            {
                weaponObjectBuilder.SetAutoMountRight();
            }

            if (tooManyRight)
            {
                weaponObjectBuilder.SetAutoMountLeft();
            }
        }
Beispiel #2
0
 public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
     Vector3 position, Vector3 forwardVector, Vector3 upVector,
     MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
 {
     base.Init(hudLabelText, MyModelsEnum.Shotgun, MyMaterialType.METAL, parentObject, position,
         forwardVector, upVector, objectBuilder);
 }
        /// <summary>
        /// Adds weapon
        /// </summary>
        /// <param name="weapon">Weapon</param>
        /// <param name="weaponObjectBuilder">Weapon's object builder</param>
        /// <param name="maxWeapons"> </param>
        private void AddWeapon(MySmallShipGunBase weapon, MyMwcObjectBuilder_SmallShip_Weapon weaponObjectBuilder)
        {
            SetAutoMountIfExceededLimit(weaponObjectBuilder);

            MyWeaponSlot emptyWeaponSlot = GetEmptySlotToAdd(weaponObjectBuilder);

            if (emptyWeaponSlot != null)
            {
                switch (emptyWeaponSlot.SlotLocation)
                {
                case MySlotLocationEnum.None:
                    break;

                case MySlotLocationEnum.LeftSide:
                    weaponObjectBuilder.SetAutoMountLeft();
                    break;

                case MySlotLocationEnum.RightSide:
                    weaponObjectBuilder.SetAutoMountRight();
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                AddWeaponToSlot(emptyWeaponSlot, weapon, weaponObjectBuilder);
            }
        }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model = MyModelsEnum.ThermalDrill;
            m_movingCueEnum = MySoundCuesEnum.VehToolThermalDrillLoop3d;
            m_movingCueReleaseEnum = MySoundCuesEnum.VehToolThermalDrillRelease3d;
            m_drillCueEnum = MySoundCuesEnum.VehToolThermalDrillColliding3d;
            m_drillOtherCueEnum = MySoundCuesEnum.VehToolThermalDrillCollidingOther3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolThermalDrillCollidingOtherRelease3d;
            m_drillCueReleaseEnum = MySoundCuesEnum.VehToolThermalDrillCollidingRelease3d;
            m_idleCueEnum = MySoundCuesEnum.VehToolThermalDrillIdle3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MyThermalDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range = MyThermalDrillDeviceConstants.RANGE;
            m_radius = MyThermalDrillDeviceConstants.RADIUS;
            m_damage = MyThermalDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_maxRotatingSpeedDrilling = MyThermalDrillDeviceConstants.MAX_ROTATING_SPEED_DRILLING;
            m_maxRotatingSpeedIdle = MyThermalDrillDeviceConstants.MAX_ROTATING_SPEED_IDLE;

            // drill head:
            Matrix matrix = Matrix.Identity;
            MyModelDummy dummy;
            if (ModelLod0.Dummies.TryGetValue("head", out dummy))
                matrix = dummy.Matrix;
            else
                Debug.Assert(false, "Dummy 'head' in thermal drill model is missing.");

            m_drillHead = new MyDrillHead();
            m_drillHead.Init(matrix.Translation, this, MyModelsEnum.ThermalDrillHead);
        }
Beispiel #5
0
 public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                           Vector3 position, Vector3 forwardVector, Vector3 upVector,
                           MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
 {
     base.Init(hudLabelText, MyModelsEnum.Shotgun, MyMaterialType.METAL, parentObject, position,
               forwardVector, upVector, objectBuilder);
 }
        /// <summary>
        /// Adds weapon. First try find first empty preferred slot and then try find first empty slot
        /// </summary>
        /// <param name="weaponObjectBuilder">Weapon's object builder</param>
        public MySmallShipGunBase AddWeapon(MyMwcObjectBuilder_SmallShip_Weapon weaponObjectBuilder)
        {
            if (!MySession.Is25DSector)
            {
                if (weaponObjectBuilder.WeaponType == MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Drilling_Device_Nuclear)
                {
                    weaponObjectBuilder.WeaponType = MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Drilling_Device_Crusher;
                }
            }


            MySmallShipGunBase newWeapon = MySmallShipWeaponFactory.GenerateWeapon(weaponObjectBuilder.WeaponType);

            if (newWeapon is MyDrillBase)
            {
                AddDrill(newWeapon as MyDrillBase, weaponObjectBuilder);
            }
            else if (newWeapon is MyHarvestingDevice)
            {
                AddHarvestingDevice(newWeapon as MyHarvestingDevice, weaponObjectBuilder);
            }
            else
            {
                AddWeapon(newWeapon, weaponObjectBuilder);
            }
            var parentShip = newWeapon.Parent as MySmallShip;

            if (parentShip != null)
            {
                newWeapon.NearFlag = parentShip.IsCameraInsideMinerShip();
            }
            return(newWeapon);
        }
 /// <summary>
 /// Adds harvesting device
 /// </summary>
 /// <param name="weapon">Harvesting device</param>
 /// <param name="weaponObjectBuilder">Harvesting device's object builder</param>
 private void AddHarvestingDevice(MyHarvestingDevice harvestingDevice, MyMwcObjectBuilder_SmallShip_Weapon harsvestingDeviceObjectBuilder)
 {
     if (HarvestingDeviceSlot.IsMounted())
     {
         RemoveWeaponFromSlotAndFromShip(HarvestingDeviceSlot);
     }
     AddWeaponToSlot(HarvestingDeviceSlot, harvestingDevice, harsvestingDeviceObjectBuilder);
 }
 /// <summary>
 /// Adds drill
 /// </summary>
 /// <param name="weapon">Drill</param>
 /// <param name="weaponObjectBuilder">Drill's object builder</param>
 private void AddDrill(MyDrillBase drill, MyMwcObjectBuilder_SmallShip_Weapon drillObjectBuilder)
 {
     if (DrillSlot.IsMounted())
     {
         RemoveWeaponFromSlotAndFromShip(DrillSlot);
     }
     AddWeaponToSlot(DrillSlot, drill, drillObjectBuilder);
 }
Beispiel #9
0
        public override void Init(StringBuilder displayName, Models.MyModelsEnum?modelLod0Enum, Models.MyModelsEnum?modelLod1Enum, MyEntity parentObject, float?scale, CommonLIB.AppCode.ObjectBuilders.MyMwcObjectBuilder_Base objectBuilder, Models.MyModelsEnum?modelCollision = null, Models.MyModelsEnum?modelLod2Enum = null)
        {
            // Some fake builder
            var builder = new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Drilling_Device_Crusher);

            base.Init(displayName, modelLod0Enum, modelLod1Enum, parentObject, scale, builder, modelCollision, modelLod2Enum);
            SetModel(MyModelsEnum.MysteriousBox_matt_5m);
        }
 public override void Init(StringBuilder hudLabelText, MySmallShip parentObject, Vector3 position,
                           Vector3 forwardVector, Vector3 upVector,
                           MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
 {
     base.Init(hudLabelText, MyModelsEnum.UniversalLauncher, MyMaterialType.METAL, parentObject, position,
               forwardVector, upVector, objectBuilder);
     m_lastTimeShoot = MyConstants.FAREST_TIME_IN_PAST;
 }
Beispiel #11
0
 public virtual void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                          Vector3 position, Vector3 forwardVector, Vector3 upVector,
                          MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
 {
     WeaponType = objectBuilder.WeaponType;
     //  Don't need to check frustum, because it's checked by this gun's parent
     m_frustumCheckBeforeDrawEnabled = false;
 }
Beispiel #12
0
 protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
 {
     MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);
     if (objectBuilder == null)
     {                
         objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Drilling_Device_Saw);                
     }
     return objectBuilder;
 }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, MyModelsEnum.MissileLauncher, MyMaterialType.METAL, parentObject,
                position, forwardVector, upVector, objectBuilder);

            m_lastTimeShoot = MyConstants.FAREST_TIME_IN_PAST;
        }
Beispiel #14
0
        protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
        {
            MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);

            if (objectBuilder == null)
            {
                objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(WeaponType = MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Harvesting_Device);
            }
            return(objectBuilder);
        }
        protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
        {
            MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);

            if (objectBuilder == null)
            {
                objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(WeaponType = MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Automatic_Rifle_With_Silencer);
            }
            return(objectBuilder);
        }
Beispiel #16
0
        protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
        {
            MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);

            if (objectBuilder == null)
            {
                objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Missile_Launcher);
            }
            return(objectBuilder);
        }
        /// <summary>
        /// Adds harvesting device to harvesting device's slot
        /// </summary>
        /// <param name="harvestingDeviceObjectBuilder">Harvesting device's object builder</param>
        public void AddHarvestingDevice(MyMwcObjectBuilder_SmallShip_Weapon harvestingDeviceObjectBuilder)
        {
            MyHarvestingDevice newHarvestingDevice = MySmallShipWeaponFactory.GenerateWeapon(harvestingDeviceObjectBuilder.WeaponType) as MyHarvestingDevice;

            if (newHarvestingDevice == null)
            {
                throw new ArgumentException("Object builder is not harvesting device object builder");
            }
            AddHarvestingDevice(newHarvestingDevice, harvestingDeviceObjectBuilder);
        }
        /// <summary>
        /// Adds drill to drill's slot
        /// </summary>
        /// <param name="drillObjectBuilder">Drill's object builder</param>
        public void AddDrill(MyMwcObjectBuilder_SmallShip_Weapon drillObjectBuilder)
        {
            MyDrillBase newDrill = MySmallShipWeaponFactory.GenerateWeapon(drillObjectBuilder.WeaponType) as MyDrillBase;

            if (newDrill == null)
            {
                throw new ArgumentException("Object builder is not drill object builder");
            }
            AddDrill(newDrill, drillObjectBuilder);
        }
Beispiel #19
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, parentObject,
                      position, forwardVector, upVector,
                      objectBuilder);

            m_rotatingSpeed   = 0;
            m_ejectedDistance = 0;
        }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model = MyModelsEnum.NuclearDrill;

            //We want nuclear drills only in 2.5D
            System.Diagnostics.Debug.Assert(MySession.Is25DSector);


            /*
             * m_movingCueEnum = MySoundCuesEnum.VehToolNuclearDrillLoop3d;
             * m_movingCueReleaseEnum = MySoundCuesEnum.VehToolNuclearDrillRelease3d;
             * m_drillCueEnum = MySoundCuesEnum.VehToolNuclearDrillColliding3d;
             * m_drillOtherCueEnum = MySoundCuesEnum.VehToolNuclearDrillCollidingOther3d;
             * m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolNuclearDrillCollidingOtherRelease3d;
             * m_drillCueReleaseEnum = MySoundCuesEnum.VehToolNuclearDrillCollidingRelease3d;
             * m_idleCueEnum = MySoundCuesEnum.VehToolNuclearDrillIdle3d;
             */

            m_movingCueEnum            = MySoundCuesEnum.VehToolSawIdle3d;
            m_movingCueReleaseEnum     = MySoundCuesEnum.VehToolLaserDrillRelease3d;
            m_drillCueEnum             = MySoundCuesEnum.VehToolLaserDrillColliding3d;
            m_drillOtherCueEnum        = MySoundCuesEnum.VehToolLaserDrillColliding3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolLaserDrillCollidingRelease3d;
            m_drillCueReleaseEnum      = MySoundCuesEnum.VehToolLaserDrillCollidingRelease3d;
            m_idleCueEnum = MySoundCuesEnum.VehToolSawCut3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MyNuclearDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range  = MyNuclearDrillDeviceConstants.RANGE;
            m_radius = MyNuclearDrillDeviceConstants.RADIUS;
            m_damage = MyNuclearDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_maxRotatingSpeedDrilling = MyNuclearDrillDeviceConstants.MAX_ROTATING_SPEED_DRILLING;
            m_maxRotatingSpeedIdle     = MyNuclearDrillDeviceConstants.MAX_ROTATING_SPEED_IDLE;

            // drill head:
            Matrix       matrix = Matrix.Identity;
            MyModelDummy dummy;

            if (ModelLod0.Dummies.TryGetValue("head", out dummy))
            {
                matrix = dummy.Matrix;
            }
            else
            {
                Debug.Assert(false, "Dummy 'head' in nuclear drill model is missing.");
            }

            m_drillHead = new MyDrillHead();
            m_drillHead.Init(matrix.Translation, this, MyModelsEnum.NuclearDrillHead);
        }
Beispiel #21
0
        private void AddSmallShipWeaponsItems(MyTreeViewItem parentItem)
        {
            Vector2 itemSize = MyGuiManager.GetNormalizedSizeFromScreenSize(new Vector2(64, 64));

            foreach (MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum enumValue in MyGuiSmallShipHelpers.MyMwcObjectBuilder_SmallShip_Weapon_TypesEnumValues)
            {
                MyMwcObjectBuilder_SmallShip_Weapon weaponObjectBuilder   = new MyMwcObjectBuilder_SmallShip_Weapon(enumValue);
                MyBuildingSpecification             buildingSpecification = MyBuildingSpecifications.GetBuildingSpecification(weaponObjectBuilder);
                MyGuiSmallShipHelperWeapon          smallShipWeaponHelper = MyGuiObjectBuilderHelpers.GetGuiHelper(MyMwcObjectBuilderTypeEnum.SmallShip_Weapon, (int)enumValue) as MyGuiSmallShipHelperWeapon;
                AddTreeViewItem(parentItem, smallShipWeaponHelper.Description, smallShipWeaponHelper.Icon, itemSize, MyGuiManager.GetBlankTexture(), MyGuiManager.GetBlankTexture(), MyGuiConstants.CHECKBOX_SIZE, weaponObjectBuilder, buildingSpecification);
            }
        }
Beispiel #22
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model = MyModelsEnum.Drill_Base;
            m_movingCueEnum = MySoundCuesEnum.VehToolCrusherDrillLoop3d;
            m_movingCueReleaseEnum = MySoundCuesEnum.VehToolCrusherDrillRelease3d;
            m_drillCueEnum = MySoundCuesEnum.VehToolCrusherDrillColliding3d;
            m_drillOtherCueEnum = MySoundCuesEnum.VehToolCrusherDrillCollidingOther3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolCrusherDrillCollidingOtherRelease3d;
            m_drillCueReleaseEnum = MySoundCuesEnum.VehToolCrusherDrillCollidingRelease3d;
            m_idleCueEnum = MySoundCuesEnum.VehToolCrusherDrillIdle3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MyCrusherDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range = MyCrusherDrillDeviceConstants.RANGE;
            m_radius = MyCrusherDrillDeviceConstants.RADIUS;
            m_damage = MyCrusherDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_maxRotatingSpeedDrilling = MyCrusherDrillDeviceConstants.MAX_ROTATING_SPEED_DRILLING;
            m_maxRotatingSpeedIdle = MyCrusherDrillDeviceConstants.MAX_ROTATING_SPEED_IDLE;

            //Create Drill Bits
            m_drillBits = new MyDrillBit[DRILL_BIT_COUNT];
            for (int i = 0; i < DRILL_BIT_COUNT; i++)
            {
                m_drillBits[i] = new MyDrillBit();
            }

            //Init Drill Bits
            Vector3 gear1Offset = new Vector3(0, 0, 0.05f);
            Vector3 gear2Offset = new Vector3(0, 0, 0.15f);
            Vector3 gear3Offset = new Vector3(0, 0, 0.30f);

            const float FIRST_ROTATE_SPEED = 0.2f * MathHelper.TwoPi * MyConstants.PHYSICS_STEP_SIZE_IN_SECONDS;
            const float SECOND_ROTATE_SPEED = 0.5f * -FIRST_ROTATE_SPEED;
            const float THIRD_ROTATE_SPEED = 1.25f * FIRST_ROTATE_SPEED;

            Matrix bit01 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT01"].Matrix);
            Matrix bit02 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT02"].Matrix);
            Matrix bit03 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT03"].Matrix);

            m_drillBits[0].Init(null, bit01, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[1].Init(null, bit01, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[2].Init(null, bit01, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
            m_drillBits[3].Init(null, bit02, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[4].Init(null, bit02, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[5].Init(null, bit02, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
            m_drillBits[6].Init(null, bit03, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[7].Init(null, bit03, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[8].Init(null, bit03, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
        }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model                    = MyModelsEnum.Drill_Base;
            m_movingCueEnum            = MySoundCuesEnum.VehToolCrusherDrillLoop3d;
            m_movingCueReleaseEnum     = MySoundCuesEnum.VehToolCrusherDrillRelease3d;
            m_drillCueEnum             = MySoundCuesEnum.VehToolCrusherDrillColliding3d;
            m_drillOtherCueEnum        = MySoundCuesEnum.VehToolCrusherDrillCollidingOther3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolCrusherDrillCollidingOtherRelease3d;
            m_drillCueReleaseEnum      = MySoundCuesEnum.VehToolCrusherDrillCollidingRelease3d;
            m_idleCueEnum              = MySoundCuesEnum.VehToolCrusherDrillIdle3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MyCrusherDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range  = MyCrusherDrillDeviceConstants.RANGE;
            m_radius = MyCrusherDrillDeviceConstants.RADIUS;
            m_damage = MyCrusherDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_maxRotatingSpeedDrilling = MyCrusherDrillDeviceConstants.MAX_ROTATING_SPEED_DRILLING;
            m_maxRotatingSpeedIdle     = MyCrusherDrillDeviceConstants.MAX_ROTATING_SPEED_IDLE;

            //Create Drill Bits
            m_drillBits = new MyDrillBit[DRILL_BIT_COUNT];
            for (int i = 0; i < DRILL_BIT_COUNT; i++)
            {
                m_drillBits[i] = new MyDrillBit();
            }

            //Init Drill Bits
            Vector3 gear1Offset = new Vector3(0, 0, 0.05f);
            Vector3 gear2Offset = new Vector3(0, 0, 0.15f);
            Vector3 gear3Offset = new Vector3(0, 0, 0.30f);

            const float FIRST_ROTATE_SPEED  = 0.2f * MathHelper.TwoPi * MyConstants.PHYSICS_STEP_SIZE_IN_SECONDS;
            const float SECOND_ROTATE_SPEED = 0.5f * -FIRST_ROTATE_SPEED;
            const float THIRD_ROTATE_SPEED  = 1.25f * FIRST_ROTATE_SPEED;

            Matrix bit01 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT01"].Matrix);
            Matrix bit02 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT02"].Matrix);
            Matrix bit03 = MyMath.NormalizeMatrix(ModelLod0.Dummies["BIT03"].Matrix);

            m_drillBits[0].Init(null, bit01, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[1].Init(null, bit01, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[2].Init(null, bit01, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
            m_drillBits[3].Init(null, bit02, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[4].Init(null, bit02, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[5].Init(null, bit02, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
            m_drillBits[6].Init(null, bit03, gear1Offset, FIRST_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear1);
            m_drillBits[7].Init(null, bit03, gear2Offset, SECOND_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear2);
            m_drillBits[8].Init(null, bit03, gear3Offset, THIRD_ROTATE_SPEED, this, MyModelsEnum.Drill_Gear3);
        }
        MySlotLocationEnum GetSlotLocation(MyMwcObjectBuilder_SmallShip_Weapon weaponBuilder)
        {
            if (weaponBuilder.AutoMountLeft)
            {
                return(MySlotLocationEnum.LeftSide);
            }

            if (weaponBuilder.AutoMountRight)
            {
                return(MySlotLocationEnum.RightSide);
            }

            return(MySlotLocationEnum.None);
        }
Beispiel #25
0
        //const float HARVESTER_ROCK_THROWN_STRENGTH = 7;

        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, MyModelsEnum.HarvestingTube, MyMaterialType.METAL, parentObject,
                      position, forwardVector, upVector, objectBuilder);

            m_harvestingOreHead = new MyHarvestingHead();
            m_harvestingOreHead.Init(this);

            m_parentMinerShip = (MySmallShip)Parent;

            StartInsideShip();
        }
Beispiel #26
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            Init(hudLabelText, m_model, MyMaterialType.METAL, parentObject,
                 position, forwardVector, upVector, objectBuilder);

            m_lastTimeStarted = MyConstants.FAREST_TIME_IN_PAST;
            m_lastTimeEjected = MyConstants.FAREST_TIME_IN_PAST;

            CurrentState = MyDrillStateEnum.InsideShip;

            m_maxEjectDistance = MyDrillDeviceConstants.EJECT_DISTANCE_MULTIPLIER * ModelLod0.BoundingBoxSize.Z;
            m_ejectedDistance  = 0;
        }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model                    = MyModelsEnum.PressureDrill;
            m_movingCueEnum            = null;
            m_movingCueReleaseEnum     = null;
            m_drillCueEnum             = null;
            m_drillOtherCueEnum        = null;
            m_drillCueReleaseEnum      = null;
            m_drillOtherCueReleaseEnum = null;

            m_radius = MyPressureDrillDeviceConstants.RADIUS;
            m_damage = MyPressureDrillDeviceConstants.DAMAGE;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);
        }
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model = MyModelsEnum.PressureDrill;
            m_movingCueEnum = null;
            m_movingCueReleaseEnum = null;
            m_drillCueEnum = null;
            m_drillOtherCueEnum = null;
            m_drillCueReleaseEnum = null;
            m_drillOtherCueReleaseEnum = null;

            m_radius = MyPressureDrillDeviceConstants.RADIUS;
            m_damage = MyPressureDrillDeviceConstants.DAMAGE;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);
        }
Beispiel #29
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, MyModelsEnum.Autocannon_Base, MyMaterialType.METAL, parentObject,
                      position, forwardVector, upVector, objectBuilder);

            m_rotationAngle        = MyMwcUtils.GetRandomRadian();
            m_lastTimeShoot        = MyConstants.FAREST_TIME_IN_PAST;
            m_smokeLastTime        = MyConstants.FAREST_TIME_IN_PAST;
            m_smokesToGenerate     = 0;
            m_cannonMotorEndPlayed = true;
            m_rotationTimeout      = (float)MyAutocanonConstants.ROTATION_TIMEOUT + MyMwcUtils.GetRandomFloat(-500, +500);

            m_barrelMatrix = ModelLod0.Dummies["BARREL_POSITION"].Matrix;
            m_barrel       = new MyAutocannonBarrel();
            m_barrel.Init(null, m_barrelMatrix, this);
        }
Beispiel #30
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, MyModelsEnum.Autocannon_Base, MyMaterialType.METAL, parentObject, 
                position, forwardVector, upVector, objectBuilder);

            m_rotationAngle = MyMwcUtils.GetRandomRadian();
            m_lastTimeShoot = MyConstants.FAREST_TIME_IN_PAST;
            m_smokeLastTime = MyConstants.FAREST_TIME_IN_PAST;
            m_smokesToGenerate = 0;
            m_cannonMotorEndPlayed = true;
            m_rotationTimeout = (float)MyAutocanonConstants.ROTATION_TIMEOUT + MyMwcUtils.GetRandomFloat(-500, +500);

            m_barrelMatrix = ModelLod0.Dummies["BARREL_POSITION"].Matrix;
            m_barrel = new MyAutocannonBarrel();
            m_barrel.Init(null, m_barrelMatrix, this);
        }
Beispiel #31
0
        /// <summary>
        /// Inits weapon and mount to this slot
        /// </summary>
        /// <param name="weapon">Weapon</param>
        /// <param name="objectBuilder">Weapon's objectbuilder</param>
        /// <param name="parentShip">Parent ship</param>
        public void InitAndMount(MySmallShipGunBase weapon, MyMwcObjectBuilder_SmallShip_Weapon objectBuilder, MySmallShip parentShip)
        {
            Debug.Assert(WeaponSubObject != null);
            weapon.Init(null, parentShip, GetPosition(), GetForwardVector(), GetUpVector(), objectBuilder);
            float?yOffset = GetOffsetFromWeaponSubObject(SUB_OBJECT_Y_OFFSET_KEY);

            if (yOffset != null)
            {
                weapon.YOffset = yOffset.Value;
            }

            float?zOffset = GetOffsetFromWeaponSubObject(SUB_OBJECT_Z_OFFSET_KEY);

            if (zOffset != null)
            {
                weapon.ZOffset = zOffset.Value;
            }
            Mount(weapon);
        }
Beispiel #32
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
                                  Vector3 position, Vector3 forwardVector, Vector3 upVector,
                                  MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model                    = MyModelsEnum.LaserDrill;
            m_movingCueEnum            = MySoundCuesEnum.VehToolLaserDrillLoop3d;
            m_movingCueReleaseEnum     = MySoundCuesEnum.VehToolLaserDrillRelease3d;
            m_drillCueEnum             = MySoundCuesEnum.VehToolLaserDrillColliding3d;
            m_drillOtherCueEnum        = MySoundCuesEnum.VehToolLaserCollidingOther3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolLaserCollidingOtherRelease3d;
            m_drillCueReleaseEnum      = MySoundCuesEnum.VehToolLaserDrillCollidingRelease3d;
            m_idleCueEnum              = MySoundCuesEnum.VehToolLaserDrillIdle3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MyLaserDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range  = MyLaserDrillDeviceConstants.RANGE;
            m_radius = MyLaserDrillDeviceConstants.RADIUS;
            m_damage = MyLaserDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_directionalEffectID = MyParticleEffectsIDEnum.Drill_Laser;
        }
Beispiel #33
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            m_model = MyModelsEnum.SawDrill;
            m_movingCueEnum = MySoundCuesEnum.VehToolSawLoop3d;
            m_movingCueReleaseEnum = MySoundCuesEnum.VehToolSawRelease3d;
            m_drillCueEnum = MySoundCuesEnum.VehToolSawCut3d;
            m_drillOtherCueEnum = MySoundCuesEnum.VehToolSawCutOther3d;
            m_drillOtherCueReleaseEnum = MySoundCuesEnum.VehToolSawCutOtherRelease3d;
            m_drillCueReleaseEnum = MySoundCuesEnum.VehToolSawCutRelease3d;
            m_idleCueEnum = MySoundCuesEnum.VehToolSawIdle3d;

            base.Init(hudLabelText, parentObject, position, forwardVector, upVector, objectBuilder);

            m_minDrillingDuration = MySawDrillDeviceConstants.MIN_DRILLING_DURATION;
            m_range = MySawDrillDeviceConstants.RANGE;
            m_radius = MySawDrillDeviceConstants.RADIUS;
            m_damage = MySawDrillDeviceConstants.DAMAGE_PER_SECOND;
            m_directionalEffectID = MyParticleEffectsIDEnum.Drill_Saw;
        }
        /// <summary>
        /// Returns first empty slot by preferred position, if not founded then returns first empty slot
        /// </summary>
        /// <param name="weaponBuilder"></param>
        /// <returns></returns>
        private MyWeaponSlot GetEmptySlotToAdd(MyMwcObjectBuilder_SmallShip_Weapon weaponBuilder)
        {
            // first, try to find a slot that fits both type and location
            for (int i = 0; i < WeaponSlots.Count; i++)
            {
                if (!WeaponSlots[i].IsMounted() &&
                    WeaponSlots[i].GetPreferedWeaponType() == weaponBuilder.WeaponType &&
                    WeaponSlots[i].IsSlotEligibleForLocation(GetSlotLocation(weaponBuilder)))
                {
                    return(WeaponSlots[i]);
                }
            }

            // then, try to find a slot that fits the location
            for (int i = 0; i < WeaponSlots.Count; i++)
            {
                if (!WeaponSlots[i].IsMounted() &&
                    WeaponSlots[i].IsSlotEligibleForLocation(GetSlotLocation(weaponBuilder)))
                {
                    return(WeaponSlots[i]);
                }
            }

            /*
             * // if preffered weapon's slot not founded, then try find first empty slot
             * for (int i = 0; i < WeaponSlots.Count; i++)
             * {
             *  if (!WeaponSlots[i].IsMounted())
             *  {
             *      return WeaponSlots[i];
             *  }
             * }
             */

            return(null);
        }
 protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
 {
     MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);
     if (objectBuilder == null)
     {
         objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Missile_Launcher);
     }
     return objectBuilder;
 }
Beispiel #36
0
        public static MyMwcObjectBuilder_SmallShip_Player CreateObjectBuilderWithAllItems(MyMwcObjectBuilder_SmallShip_TypesEnum shipType, MyMwcObjectBuilder_FactionEnum faction, int maxInventoryItems)
        {
            List <MyMwcObjectBuilder_SmallShip_Weapon> weapons        = new List <MyMwcObjectBuilder_SmallShip_Weapon>();
            List <MyMwcObjectBuilder_AssignmentOfAmmo> ammoAssignment = new List <MyMwcObjectBuilder_AssignmentOfAmmo>();
            List <MyMwcObjectBuilder_InventoryItem>    inventoryItems = new List <MyMwcObjectBuilder_InventoryItem>();

            // weapons
            foreach (MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum weapon in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum)))
            {
                var weaponBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                weaponBuilder.SetAutoMount();
                weapons.Add(weaponBuilder);
                // we want have 2x autocanon
                if (weapon == MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Autocanon)
                {
                    var autocannonBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(weapon);
                    autocannonBuilder.SetAutoMount();
                    weapons.Add(autocannonBuilder);
                }
            }

            // ammo assignment
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Primary, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Secondary, MyMwcObjectBuilder_AmmoGroupEnum.Missile, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Missile_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Third, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherFront, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Basic));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fourth, MyMwcObjectBuilder_AmmoGroupEnum.UniversalLauncherBack, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Universal_Launcher_Mine_Smart));
            ammoAssignment.Add(new MyMwcObjectBuilder_AssignmentOfAmmo(MyMwcObjectBuilder_FireKeyEnum.Fifth, MyMwcObjectBuilder_AmmoGroupEnum.Bullet, MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Autocannon_Basic));

            // inventory items
            // ammo
            foreach (MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum ammo in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Ammo(ammo), 1000f));
            }

            // tools
            foreach (MyMwcObjectBuilder_SmallShip_Tool_TypesEnum tool in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Tool_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Tool(tool), 1f));
            }

            // radars
            foreach (MyMwcObjectBuilder_SmallShip_Radar_TypesEnum radar in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum)))
            {
                inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Radar(radar), 1f));
            }

            // engines
            foreach (MyMwcObjectBuilder_SmallShip_Engine_TypesEnum engine in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum)))
            {
                if (engine != MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Engine(engine), 1f));
                }
            }

            // armors
            foreach (MyMwcObjectBuilder_SmallShip_Armor_TypesEnum armor in Enum.GetValues(typeof(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum)))
            {
                if (armor != MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic)
                {
                    inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(new MyMwcObjectBuilder_SmallShip_Armor(armor), 1f));
                }
            }

            // foundation factory
            var foundationFactory = new MyMwcObjectBuilder_PrefabFoundationFactory();

            foundationFactory.PrefabHealthRatio = 1f;
            foundationFactory.PrefabMaxHealth   = null;
            inventoryItems.Add(new MyMwcObjectBuilder_InventoryItem(foundationFactory, 1f));
            inventoryItems.RemoveAll(x => MyMwcObjectBuilder_InventoryItem.IsDisabled(x));

            if (inventoryItems.Count > maxInventoryItems)
            {
                inventoryItems = inventoryItems.GetRange(0, maxInventoryItems);
            }

            MyMwcObjectBuilder_SmallShip_Player builder =
                new MyMwcObjectBuilder_SmallShip_Player(
                    shipType,
                    new MyMwcObjectBuilder_Inventory(inventoryItems, maxInventoryItems),
                    weapons,
                    new MyMwcObjectBuilder_SmallShip_Engine(MyMwcObjectBuilder_SmallShip_Engine_TypesEnum.PowerCells_1),
                    ammoAssignment,
                    new MyMwcObjectBuilder_SmallShip_Armor(MyMwcObjectBuilder_SmallShip_Armor_TypesEnum.Basic),
                    new MyMwcObjectBuilder_SmallShip_Radar(MyMwcObjectBuilder_SmallShip_Radar_TypesEnum.Radar_1),
                    null, 1f, float.MaxValue, float.MaxValue, float.MaxValue, float.MaxValue,
                    true, false, 200f, 0);

            builder.Faction = faction;

            return(builder);
        }
 /// <summary>
 /// Adds weapon to slot
 /// </summary>
 /// <param name="weaponSlot">Weapon's slot</param>
 /// <param name="weapon">Weapon</param>
 /// <param name="weaponObjectBuilder">Weapon's object builder</param>
 private void AddWeaponToSlot(MyWeaponSlot weaponSlot, MySmallShipGunBase weapon, MyMwcObjectBuilder_SmallShip_Weapon weaponObjectBuilder)
 {
     weaponSlot.InitAndMount(weapon, weaponObjectBuilder, Ship);
 }
Beispiel #38
0
 protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
 {
     MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);
     if (objectBuilder == null)
     {
         objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(WeaponType = MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Machine_Gun);
     }
     return objectBuilder;
 }
Beispiel #39
0
        private bool Read_01085002(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion)
        {
            //  Ship Type
            byte?objectBuilderID = MyMwcMessageIn.ReadByteEx(binaryReader, senderEndPoint);

            if (objectBuilderID == null)
            {
                return(NetworkError());
            }
            SetObjectBuilderId(objectBuilderID.Value);
            MyMwcLog.IfNetVerbose_AddToLog("ShipType: " + objectBuilderID.Value);

            //  Weapons And Devices
            int?countWeapons = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countWeapons == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("countWeaponsAndDevices: " + countWeapons);
            Weapons = new List <MyMwcObjectBuilder_SmallShip_Weapon>(countWeapons.Value);
            for (int i = 0; i < countWeapons; i++)
            {
                MyMwcObjectBuilder_SmallShip_Weapon newWAD =
                    MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as
                    MyMwcObjectBuilder_SmallShip_Weapon;
                if (newWAD == null)
                {
                    return(NetworkError());
                }
                if (newWAD.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                Weapons.Add(newWAD);
            }

            //  Assignment of ammo
            int?countAssignAmmo = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (countAssignAmmo == null)
            {
                return(NetworkError());
            }
            MyMwcLog.IfNetVerbose_AddToLog("countAssignAmmo: " + countAssignAmmo);
            AssignmentOfAmmo = new List <MyMwcObjectBuilder_AssignmentOfAmmo>(countAssignAmmo.Value);
            for (int i = 0; i < countAssignAmmo; i++)
            {
                MyMwcObjectBuilder_AssignmentOfAmmo newAssignAmmo =
                    MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as
                    MyMwcObjectBuilder_AssignmentOfAmmo;
                if (newAssignAmmo == null)
                {
                    return(NetworkError());
                }
                if (newAssignAmmo.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
                AssignmentOfAmmo.Add(newAssignAmmo);
            }


            //  Engine
            bool?isEngine = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (isEngine == null)
            {
                return(NetworkError());
            }
            if (isEngine.Value)
            {
                Engine =
                    MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as
                    MyMwcObjectBuilder_SmallShip_Engine;
                if (Engine == null)
                {
                    return(NetworkError());
                }
                if (Engine.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
            }
            else
            {
                Engine = null;
            }

            //  Armor
            bool?isArmor = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (isArmor == null)
            {
                return(NetworkError());
            }
            if (isArmor.Value)
            {
                Armor =
                    MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as
                    MyMwcObjectBuilder_SmallShip_Armor;
                if (Armor == null)
                {
                    return(NetworkError());
                }
                if (Armor.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
            }
            else
            {
                Armor = null;
            }

            //  Radar
            bool?isRadar = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (isRadar == null)
            {
                return(NetworkError());
            }
            if (isRadar.Value)
            {
                Radar =
                    MyMwcObjectBuilder_Base.ReadAndCreateNewObject(binaryReader, senderEndPoint) as
                    MyMwcObjectBuilder_SmallShip_Radar;
                if (Radar == null)
                {
                    return(NetworkError());
                }
                if (Radar.Read(binaryReader, senderEndPoint, gameVersion) == false)
                {
                    return(NetworkError());
                }
            }
            else
            {
                Radar = null;
            }

            bool?hasMaxHealth = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (!hasMaxHealth.HasValue)
            {
                return(NetworkError());
            }
            if (hasMaxHealth.Value)
            {
                //  Ship max health
                float?shipMaxHealth = MyMwcMessageIn.ReadFloat(binaryReader);
                if (shipMaxHealth == null)
                {
                    return(NetworkError());
                }
                ShipMaxHealth = shipMaxHealth.Value;
                MyMwcLog.IfNetVerbose_AddToLog("ShipMaxHealth: " + ShipMaxHealth.Value);

                if (float.IsNaN(ShipMaxHealth.Value) || float.IsInfinity(ShipMaxHealth.Value))
                {
                    System.Diagnostics.Debug.Fail("ShipMaxHealth is: " + ShipMaxHealth.Value);
                    ShipMaxHealth = null; // MyGameplayConstants.MAX_HEALTH_MAX;
                }
            }
            else
            {
                MyMwcLog.IfNetVerbose_AddToLog("ShipMaxHealth is: null");
                ShipMaxHealth = null;
            }

            //  Ship health ratio
            float?shipHealthRatio = MyMwcMessageIn.ReadFloat(binaryReader);

            if (shipHealthRatio == null)
            {
                return(NetworkError());
            }
            ShipHealthRatio = shipHealthRatio.Value;
            MyMwcLog.IfNetVerbose_AddToLog("ShipHealthRatio: " + ShipHealthRatio);

            //  Armor health
            float?armorHealth = MyMwcMessageIn.ReadFloat(binaryReader);

            if (armorHealth == null)
            {
                return(NetworkError());
            }
            ArmorHealth = armorHealth.Value;
            MyMwcLog.IfNetVerbose_AddToLog("ArmorHealth: " + ArmorHealth);

            //  Oxygen
            float?oxygen = MyMwcMessageIn.ReadFloat(binaryReader);

            if (oxygen == null)
            {
                return(NetworkError());
            }
            Oxygen = oxygen.Value;
            MyMwcLog.IfNetVerbose_AddToLog("Oxygen: " + Oxygen);

            //  Fuel
            float?fuel = MyMwcMessageIn.ReadFloat(binaryReader);

            if (fuel == null)
            {
                return(NetworkError());
            }
            Fuel = fuel.Value;
            MyMwcLog.IfNetVerbose_AddToLog("Fuel: " + Fuel);

            // Reflector light
            bool?reflectorLight = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (reflectorLight == null)
            {
                return(NetworkError());
            }
            ReflectorLight = reflectorLight.Value;
            MyMwcLog.IfNetVerbose_AddToLog("ReflectorLight: " + ReflectorLight);

            // Reflector long range
            bool?reflectorLongRange = MyMwcMessageIn.ReadBoolEx(binaryReader, senderEndPoint);

            if (reflectorLongRange == null)
            {
                return(NetworkError());
            }
            ReflectorLongRange = reflectorLongRange.Value;
            MyMwcLog.IfNetVerbose_AddToLog("ReflectorLongRange: " + ReflectorLongRange);

            //  ReflectorShadowDistance
            float?reflectorShadowDistance = MyMwcMessageIn.ReadFloat(binaryReader);

            if (reflectorShadowDistance == null)
            {
                return(NetworkError());
            }
            ReflectorShadowDistance = reflectorShadowDistance.Value;
            MyMwcLog.IfNetVerbose_AddToLog("ReflectorShadowDistance: " + ReflectorShadowDistance);

            // AI Priority
            int?aiPriority = MyMwcMessageIn.ReadInt32Ex(binaryReader, senderEndPoint);

            if (aiPriority == null)
            {
                return(NetworkError());
            }
            AIPriority = aiPriority.Value;
            MyMwcLog.IfNetVerbose_AddToLog("AIPriority: " + AIPriority);

            return(true);
        }
Beispiel #40
0
        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            Init(hudLabelText, m_model, MyMaterialType.METAL, parentObject,
                position, forwardVector, upVector, objectBuilder);

            m_lastTimeStarted = MyConstants.FAREST_TIME_IN_PAST;
            m_lastTimeEjected = MyConstants.FAREST_TIME_IN_PAST;

            CurrentState = MyDrillStateEnum.InsideShip;

            m_maxEjectDistance = MyDrillDeviceConstants.EJECT_DISTANCE_MULTIPLIER * ModelLod0.BoundingBoxSize.Z;
            m_ejectedDistance = 0;
        }
        //const float HARVESTER_ROCK_THROWN_STRENGTH = 7;

        public override void Init(StringBuilder hudLabelText, MySmallShip parentObject,
            Vector3 position, Vector3 forwardVector, Vector3 upVector,
            MyMwcObjectBuilder_SmallShip_Weapon objectBuilder)
        {
            base.Init(hudLabelText, MyModelsEnum.HarvestingTube, MyMaterialType.METAL, parentObject,
                position, forwardVector, upVector, objectBuilder);

            m_harvestingOreHead = new MyHarvestingHead();
            m_harvestingOreHead.Init(this);

            m_parentMinerShip = (MySmallShip)Parent;

            StartInsideShip();
        }
        protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy)
        {
            MyMwcObjectBuilder_Base objectBuilder = base.GetObjectBuilderInternal(getExactCopy);
            if (objectBuilder == null)
            {
                objectBuilder = new MyMwcObjectBuilder_SmallShip_Weapon(WeaponType = MyMwcObjectBuilder_SmallShip_Weapon_TypesEnum.Automatic_Rifle_With_Silencer);
    }
            return objectBuilder;
}