protected override MyMwcObjectBuilder_Base GetObjectBuilderInternal(bool getExactCopy) { MyMwcObjectBuilder_PrefabLargeWeapon objectBuilderWeapon = (MyMwcObjectBuilder_PrefabLargeWeapon)base.GetObjectBuilderInternal(getExactCopy); //This is duplicate from MyPrefab objectBuilderWeapon.PositionInContainer = MyPrefabContainer.GetRelativePositionInContainerCoords(this.LocalMatrix.Translation); float yaw, pitch, roll; Matrix rot = this.LocalMatrix; rot.Translation = Vector3.Zero; MyUtils.RotationMatrixToYawPitchRoll(ref rot, out yaw, out pitch, out roll); objectBuilderWeapon.AnglesInContainer = new Vector3(yaw, pitch, roll); //end of duplicate from MyPrefab objectBuilderWeapon.PrefabLargeWeaponType = weaponType; //objectBuilderWeapon.PrefabHealthRatio = Health; objectBuilderWeapon.UseProperties = UseProperties.GetObjectBuilder(); objectBuilderWeapon.SearchingDistance = SearchingDistance; objectBuilderWeapon.AimingDistance = 0; return(objectBuilderWeapon); }
protected override void InitPrefab(string displayName, Vector3 relativePosition, Matrix localOrientation, MyMwcObjectBuilder_PrefabBase objectBuilder, MyPrefabConfiguration prefabConfig) { prefabConfiguration = prefabConfig as MyPrefabConfigurationLargeWeapon; MyMwcObjectBuilder_PrefabLargeWeapon largeWeaponBuilder = objectBuilder as MyMwcObjectBuilder_PrefabLargeWeapon; weaponType = largeWeaponBuilder.PrefabLargeWeaponType; UseProperties = new MyUseProperties(MyUseType.FromHUB | MyUseType.Solo, MyUseType.FromHUB); if (largeWeaponBuilder.UseProperties == null) { UseProperties.Init(MyUseType.FromHUB | MyUseType.Solo, MyUseType.FromHUB, 1, 4000, false); } else { UseProperties.Init(largeWeaponBuilder.UseProperties); } // create & initialize weapon: MyLargeShipGunBase.CreateAloneWeapon(ref m_gun, displayName, Vector3.Zero, Matrix.Identity, largeWeaponBuilder, Activated); AddChild(m_gun); m_gun.PrefabParent = this; m_gun.Enabled = IsWorking(); m_gun.SetRandomRotation(); // if (largeWeaponBuilder.SearchingDistance == 2000) // largeWeaponBuilder.SearchingDistance = 1000; this.LocalMatrix = Matrix.CreateWorld(relativePosition, localOrientation.Forward, localOrientation.Up); m_searchingDistance = MathHelper.Clamp(largeWeaponBuilder.SearchingDistance, MyLargeShipWeaponsConstants.MIN_SEARCHING_DISTANCE, MyLargeShipWeaponsConstants.MAX_SEARCHING_DISTANCE); m_targetDetectorCriterias.Add(new MyEntityDetectorCriterium <MySmallShip>(1, IsPossibleTarget, true)); m_targetsDetector = new MyEntityDetector(true); m_potentialTargetsDetector = new MyEntityDetector(true); m_potentialTargetDetectorCriterias.Add(new MyEntityDetectorCriterium <MySmallShip>(1, IsPotentialTarget, true)); //m_targetsDetector.OnEntityEnter += OnTargetDetected; //m_targetsDetector.OnEntityLeave += OnTargetLost; m_targetsDetector.OnNearestEntityChange += OnNearestTargetChange; m_potentialTargetsDetector.OnNearestEntityChange += OnNearestPotentialTargetChange; //m_targetsDetector.OnEntityPositionChange += OnTargetPositionChanged; InitDetector(Activated); }