Inheritance: MonoBehaviour
Beispiel #1
0
 public void EndShoot(MyShootActionEnum action)
 {
     MyAnalyticsHelper.ReportActivityEnd(this.Owner, "Drilling");
     m_drillBase.StopDrill();
     m_tryingToDrill = false;
     SinkComp.Update();
 }
        private void UpdatePower()
        {
            bool shouldBePowered = ShouldBePowered();

            if (shouldBePowered != m_wasPowered)
            {
                m_wasPowered = shouldBePowered;
                SinkComp.Update();
            }
        }
 public virtual void EndShoot(MyShootActionEnum action)
 {
     if (action == MyShootActionEnum.PrimaryAction)
     {
         CurrentEffect = 0;
         StopLoopSound();
         ShakeAmount     = 0.0f;
         m_tryingToShoot = false;
         SinkComp.Update();
         m_activated         = false;
         m_shootFrameCounter = 0;
     }
 }
Beispiel #4
0
        public void OnControlReleased()
        {
            m_drillBase.IgnoredEntities.Remove(m_owner);
            m_drillBase.StopDrill();
            m_tryingToDrill = false;
            SinkComp.Update();
            m_drillBase.OutputInventory = null;

            if (m_owner.ControllerInfo.IsLocallyControlled())
            {
                m_oreDetectorBase.Clear();
            }

            m_owner = null;
        }
Beispiel #5
0
        private bool DoDrillAction(bool collectOre)
        {
            m_tryingToDrill = true;
            SinkComp.Update();

            if (!SinkComp.IsPowered)
            {
                return(false);
            }

            m_lastTimeDrilled = MySandboxGame.TotalGamePlayTimeInMilliseconds;
            m_drillBase.Drill(collectOre);
            m_spikeLastUpdateTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;

            return(true);
        }
        private bool DoDrillAction(bool collectOre)
        {
            m_tryingToDrill = true;
            SinkComp.Update();

            if (!SinkComp.IsPoweredByType(MyResourceDistributorComponent.ElectricityId))
            {
                return(false);
            }

            m_lastTimeDrilled = MySandboxGame.TotalGamePlayTimeInMilliseconds;
            m_drillBase.Drill(collectOre, assignDamagedMaterial: true, speedMultiplier: m_speedMultiplier);
            m_spikeLastUpdateTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;

            return(true);
        }
        public override void UpdateAfterSimulation()
        {
            base.UpdateAfterSimulation();

            //MyRenderProxy.DebugDrawSphere(m_gunBase.PositionMuzzleWorld, 0.2f, new Vector3(1, 0, 0), 1.0f, true);


            if (Owner == null)
            {
                return;
            }

            Vector3  weaponLocalPosition = Owner.GetLocalWeaponPosition();
            Vector3D localDummyPosition  = m_gunBase.GetMuzzleLocalPosition();
            MatrixD  weaponWorld         = WorldMatrix;
            Vector3D localDummyPositionRotated;

            Vector3D.Rotate(ref localDummyPosition, ref weaponWorld, out localDummyPositionRotated);
            m_raycastComponent.SetPointOfReference(Owner.PositionComp.GetPosition() + weaponLocalPosition + localDummyPositionRotated);

            SinkComp.Update();

            if (IsShooting && !SinkComp.IsPowered)
            {
                EndShoot(MyShootActionEnum.PrimaryAction);
            }

            UpdateEffect();
            CheckEffectType();

            if (Owner != null && Owner.ControllerInfo.IsLocallyHumanControlled())
            {
                if (MySession.Static.SurvivalMode && (MySession.Static.GetCameraControllerEnum() != MyCameraControllerEnum.Spectator || MyFinalBuildConstants.IS_OFFICIAL))
                {
                    var character = ((MyCharacter)this.CharacterInventory.Owner);
                    MyCubeBuilder.Static.MaxGridDistanceFrom = character.PositionComp.GetPosition() + character.WorldMatrix.Up * 1.8f;
                }
                else
                {
                    MyCubeBuilder.Static.MaxGridDistanceFrom = null;
                }
            }

            //MyTrace.Watch("MyEngineerToolBase.RequiredPowerInput", RequiredPowerInput);
        }
        public virtual void Shoot(MyShootActionEnum action, Vector3 direction, string gunAction)
        {
            if (action != MyShootActionEnum.PrimaryAction)
            {
                return;
            }

            m_lastTimeShoot = MySandboxGame.TotalGamePlayTimeInMilliseconds;

            m_shootFrameCounter++;
            m_tryingToShoot = true;
            SinkComp.Update();
            if (!SinkComp.IsPowered)
            {
                CurrentEffect = 0;
                return;
            }

            m_activated = true;

            var targetBlock = GetTargetBlock();

            if (targetBlock == null)
            {
                CurrentEffect = 2;
                ShakeAmount   = m_handItemDef.ShakeAmountNoTarget;
            }

            int currentTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;

            if (targetBlock != null)
            {
                ShakeAmount   = m_handItemDef.ShakeAmountTarget;
                CurrentEffect = 1;
            }
            return;
        }
Beispiel #9
0
 protected override void OnEnabledChanged()
 {
     base.OnEnabledChanged();
     SinkComp.Update();
 }
Beispiel #10
0
 void ComponentStack_IsFunctionalChanged()
 {
     SinkComp.Update();
 }
Beispiel #11
0
 public void EndShoot(MyShootActionEnum action)
 {
     m_drillBase.StopDrill();
     m_tryingToDrill = false;
     SinkComp.Update();
 }
 protected float CalculateRequiredPower()
 {
     return(ShouldBePowered() ? SinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId) : 0.0f);
 }
Beispiel #13
0
        public override void UpdateAfterSimulation()
        {
            base.UpdateAfterSimulation();

            //MyRenderProxy.DebugDrawSphere(m_gunBase.PositionMuzzleWorld, 0.2f, new Vector3(1, 0, 0), 1.0f, true);

            m_targetGrid           = null;
            m_targetDestroyable    = null;
            m_targetFloatingObject = null;
            m_targetCharacter      = null;

            if (Owner == null)
            {
                return;
            }

            var   entitiesInRange    = m_sensor.EntitiesInRange;
            int   closestEntityIndex = 0;
            float closestDistance    = float.MaxValue;

            if (entitiesInRange != null && entitiesInRange.Count > 0)
            {
                int i = 0;
                foreach (var entity in entitiesInRange.Values)
                {
                    var targetGrid = entity.Entity as MyCubeGrid;
                    var distanceSq = (float)Vector3D.DistanceSquared(entity.DetectionPoint, m_gunBase.GetMuzzleWorldPosition());
                    if (entity.Entity.Physics != null && entity.Entity.Physics.Enabled)
                    {
                        if (distanceSq < closestDistance)
                        {
                            m_targetGrid           = targetGrid;
                            m_targetDistanceSq     = (float)distanceSq;
                            m_targetDestroyable    = entity.Entity as IMyDestroyableObject;
                            m_targetFloatingObject = entity.Entity as MyFloatingObject;
                            m_targetCharacter      = entity.Entity as MyCharacter;
                            closestDistance        = m_targetDistanceSq;
                            closestEntityIndex     = i;
                        }
                    }
                    ++i;
                }
            }

            if (m_targetGrid != null)
            {
                m_targetPosition = entitiesInRange.Values.ElementAt(closestEntityIndex).DetectionPoint;
                var invWorld     = m_targetGrid.PositionComp.GetWorldMatrixNormalizedInv();
                var gridLocalPos = Vector3D.Transform(m_targetPosition, invWorld);
                var gridSpacePos = Vector3I.Round(gridLocalPos / m_targetGrid.GridSize);
                m_targetGrid.FixTargetCube(out m_targetCube, gridLocalPos / m_targetGrid.GridSize);

                var head        = PositionComp.WorldMatrix;
                var aimToMuzzle = Vector3D.Normalize(m_targetPosition - m_gunBase.GetMuzzleWorldPosition());
                if (Vector3.Dot(aimToMuzzle, head.Forward) > 0)
                {
                    m_targetDistanceSq = 0;
                }
                else
                {
                    m_targetDistanceSq = (float)Vector3D.DistanceSquared(m_targetPosition, m_gunBase.GetMuzzleWorldPosition());
                }
            }
            SinkComp.Update();

            if (IsShooting && !SinkComp.IsPowered)
            {
                EndShoot(MyShootActionEnum.PrimaryAction);
            }

            UpdateEffect();
            CheckEffectType();

            if (Owner != null && Owner.ControllerInfo.IsLocallyHumanControlled())
            {
                if (MySession.Static.SurvivalMode && (MySession.GetCameraControllerEnum() != MyCameraControllerEnum.Spectator || MyFinalBuildConstants.IS_OFFICIAL))
                {
                    var character = ((MyCharacter)this.CharacterInventory.Owner);
                    MyCubeBuilder.Static.MaxGridDistanceFrom = character.PositionComp.GetPosition() + character.WorldMatrix.Up * 1.8f;
                }
                else
                {
                    MyCubeBuilder.Static.MaxGridDistanceFrom = null;
                }
            }

            //MyTrace.Watch("MyEngineerToolBase.RequiredPowerInput", RequiredPowerInput);
        }
 protected override bool CheckIsWorking()
 {
     return(SinkComp.IsPoweredByType(MyResourceDistributorComponent.ElectricityId) && base.CheckIsWorking());
 }
        public override void Init(MyObjectBuilder_EntityBase objectBuilder)
        {
            m_physicalItemId = new MyDefinitionId(typeof(MyObjectBuilder_PhysicalGunObject), "HandDrillItem");
            if (objectBuilder.SubtypeName != null && objectBuilder.SubtypeName.Length > 0)
            {
                m_physicalItemId = new MyDefinitionId(typeof(MyObjectBuilder_PhysicalGunObject), objectBuilder.SubtypeName + "Item");
            }
            PhysicalObject = (MyObjectBuilder_PhysicalGunObject)MyObjectBuilderSerializer.CreateNewObject(m_physicalItemId);

            (PositionComp as MyPositionComponent).WorldPositionChanged = WorldPositionChanged;

            m_handItemDefId = objectBuilder.GetId();

            var definition = MyDefinitionManager.Static.TryGetHandItemDefinition(ref m_handItemDefId);

            m_speedMultiplier = 1f / (definition as MyHandDrillDefinition).SpeedMultiplier;
            m_drillBase       = new MyDrillBase(this,
                                                MyDrillConstants.DRILL_HAND_DUST_EFFECT,
                                                MyDrillConstants.DRILL_HAND_DUST_STONES_EFFECT,
                                                MyDrillConstants.DRILL_HAND_SPARKS_EFFECT,
                                                new MyDrillSensorRayCast(-0.5f, 2.15f),
                                                new MyDrillCutOut(1.0f, 0.35f * (definition as MyHandDrillDefinition).DistanceMultiplier),
                                                SPIKE_SLOWDOWN_TIME_IN_SECONDS,
                                                floatingObjectSpawnOffset: -0.25f,
                                                floatingObjectSpawnRadius: 1.4f * 0.25f
                                                );
            m_drillBase.VoxelHarvestRatio = MyDrillConstants.VOXEL_HARVEST_RATIO * (definition as MyHandDrillDefinition).HarvestRatioMultiplier;
            AddDebugRenderComponent(new Components.MyDebugRenderCompomentDrawDrillBase(m_drillBase));
            base.Init(objectBuilder);

            m_physItemDef = MyDefinitionManager.Static.GetPhysicalItemDefinition(m_physicalItemId);
            Init(null, m_physItemDef.Model, null, null, null);
            Render.CastShadows            = true;
            Render.NeedsResolveCastShadow = false;

            m_spike        = Subparts["Spike"];
            m_spikeBasePos = m_spike.PositionComp.LocalMatrix.Translation;

            m_drillBase.IgnoredEntities.Add(this);
            m_drillBase.OnWorldPositionChanged(PositionComp.WorldMatrix);

            PhysicalObject.GunEntity          = (MyObjectBuilder_EntityBase)objectBuilder.Clone();
            PhysicalObject.GunEntity.EntityId = this.EntityId;

            NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME;
            m_oreDetectorBase.DetectionRadius = 20;
            m_oreDetectorBase.OnCheckControl  = OnCheckControl;

            var sinkComp = new MyResourceSinkComponent();

            sinkComp.Init(
                MyStringHash.GetOrCompute("Utility"),
                MyEnergyConstants.REQUIRED_INPUT_HAND_DRILL,
                () => m_tryingToDrill ? SinkComp.MaxRequiredInputByType(MyResourceDistributorComponent.ElectricityId) : 0f);
            SinkComp = sinkComp;

            foreach (ToolSound toolSound in definition.ToolSounds)
            {
                if (toolSound.type == null || toolSound.subtype == null || toolSound.sound == null)
                {
                    continue;
                }
                if (toolSound.type.Equals("Main"))
                {
                    if (toolSound.subtype.Equals("Idle"))
                    {
                        m_drillBase.m_idleSoundLoop = new MySoundPair(toolSound.sound);
                    }
                    if (toolSound.subtype.Equals("Soundset"))
                    {
                        m_drillBase.m_drillMaterial = MyStringHash.GetOrCompute(toolSound.sound);
                    }
                }
            }
        }