Exemplo n.º 1
0
        private void DrawHelper()
        {
            if (_age < 1800)
            {
                return;
            }

            if (Vector3D.DistanceSquared(MyAPIGateway.Session.Player.Character.PositionComp.WorldAABB.Center, Emitter.PositionComp.WorldAABB.Center) < 2250000)
            {
                var controller = ShieldComp.DefenseShields;

                var needsUpdate = controller.GridIsMobile && (ShieldComp.GridIsMoving || _updateLosState);

                var blockCam = controller.ShieldEnt.PositionComp.WorldVolume;
                if (MyAPIGateway.Session.Camera.IsInFrustum(ref blockCam))
                {
                    if (_lCount % 2 == 1)
                    {
                        if (_count == 59 && needsUpdate)
                        {
                            UpdateLosState(_updateLosState);
                            _updateLosState = false;
                        }
                        else if (needsUpdate)
                        {
                            UpdateUnitSphere();
                        }
                    }
                    else
                    {
                        if (needsUpdate)
                        {
                            UpdateUnitSphere();
                        }
                        foreach (var blocking in _blocksLos.Keys)
                        {
                            var blockedPos = LosScaledCloud[blocking];
                            DsDebugDraw.DrawLosBlocked(blockedPos, MyGrid.PositionComp.LocalMatrix, blockCam.Radius / 25);
                        }
                    }

                    foreach (var clear in _vertsSighted)
                    {
                        var blockedPos = LosScaledCloud[clear];
                        DsDebugDraw.DrawLosClear(blockedPos, MyGrid.PositionComp.LocalMatrix, blockCam.Radius / 25);
                    }

                    var blocked = _blocksLos.Count;
                    var needed  = -300 + _vertsSighted.Count;
                    if (_count == 0)
                    {
                        BroadCastLosMessage(blocked, needed, controller);
                    }
                }
            }
        }