Exemple #1
0
        private void CheckShieldLineOfSight()
        {
            if (!_compact && SubpartRotor.Closed)
            {
                BlockReset(false);
            }
            TookControl = false;

            ShieldComp.DefenseShields.ResetShape(false);
            if (EmitterMode == EmitterType.Station || ShieldComp.SkipLos)
            {
                EmiState.State.Los       = true;
                ShieldComp.CheckEmitters = false;
            }
            else
            {
                UpdateLosState();
                EmiState.State.Los = _blocksLos.Count <= 1700;

                if (!EmiState.State.Los)
                {
                    ShieldComp.EmitterEvent = true;
                }
                else
                {
                    LosScaledCloud.Clear();
                }

                ShieldComp.CheckEmitters = false;
            }
            if (Session.Enforced.Debug >= 3 && !EmiState.State.Los)
            {
                Log.Line($"LOS: Mode: {EmitterMode} - blocked verts {_blocksLos.Count.ToString()} - visable verts: {_vertsSighted.Count.ToString()} - LoS: {EmiState.State.Los.ToString()} - EmitterId [{Emitter.EntityId}]");
            }
        }
Exemple #2
0
        private void UpdateUnitSphere()
        {
            var losPointSphere = Session.Instance.LosPointSphere;

            LosScaledCloud.Clear();
            UtilsStatic.UnitSphereTranslateScaleList(_unitSpherePoints, ref losPointSphere, ref LosScaledCloud, ShieldComp.DefenseShields.ShieldEnt, false, MyGrid);
        }
        private bool ClientEmitterReady()
        {
            if (ShieldComp?.DefenseShields == null)
            {
                return(false);
            }

            if (!_compact)
            {
                if (!MyCube.IsWorking)
                {
                    Entity.TryGetSubpart("Rotor", out SubpartRotor);
                }
                if (SubpartRotor == null)
                {
                    return(false);
                }
            }

            if (!EmiState.State.Los)
            {
                LosLogic();
            }

            if (EmiState.State.Los && !_wasLosState)
            {
                _wasLosState    = EmiState.State.Los;
                _updateLosState = false;
                LosScaledCloud.Clear();
            }
            return(EmiState.State.Link);
        }
        private void UpdateUnitSphere()
        {
            var losPointSphere = Session.Instance.LosPointSphere;

            LosScaledCloud.Clear();
            var checkSphere = new BoundingSphereD(ShieldComp.DefenseShields.MyGridCenter, ShieldComp.DefenseShields.DsState.State.GridHalfExtents.Length() + 20);

            UtilsStatic.UnitSphereTranslateScaleList(_unitSpherePoints, ref losPointSphere, ref LosScaledCloud, ref checkSphere, ShieldComp.DefenseShields.ShieldEnt, false, MyGrid);
        }