public void Init()
        {
            var playerTransform = Locator.GetPlayerTransform();

            _playerResources = playerTransform.GetComponent <PlayerResources>();
            _spaceSuit       = playerTransform.GetComponentInChildren <PlayerSpacesuit>(true);
            _playerSpawner   = FindObjectOfType <PlayerSpawner>();
            _fluidDetector   = Locator.GetPlayerCamera().GetComponentInChildren <FluidDetector>();

            var shipTransform = Locator.GetShipTransform();

            if (shipTransform == null)
            {
                return;
            }
            _shipComponents    = shipTransform.GetComponentsInChildren <ShipComponent>();
            _hatchController   = shipTransform.GetComponentInChildren <HatchController>();
            _cockpitController = shipTransform.GetComponentInChildren <ShipCockpitController>();
            _shipBody          = Locator.GetShipBody();
            _shipSpawnPoint    = GetSpawnPoint(true);

            // Move debug spawn point to initial ship position.
            _playerSpawnPoint = GetSpawnPoint();
            _shipSpawnPoint.transform.position = shipTransform.position;
            _shipSpawnPoint.transform.rotation = shipTransform.rotation;
        }
        private void Init()
        {
            var playerTransform = Locator.GetPlayerTransform();

            _playerResources = playerTransform.GetComponent <PlayerResources>();
            _spaceSuit       = playerTransform.GetComponentInChildren <PlayerSpacesuit>(true);
            _playerSpawner   = FindObjectOfType <PlayerSpawner>();
            _fluidDetector   = Locator.GetPlayerCamera().GetComponentInChildren <FluidDetector>();

            var shipTransform = Locator.GetShipTransform();

            if (shipTransform != null)
            {
                _shipComponents    = shipTransform.GetComponentsInChildren <ShipComponent>();
                _hatchController   = shipTransform.GetComponentInChildren <HatchController>();
                _cockpitController = shipTransform.GetComponentInChildren <ShipCockpitController>();
                _shipBody          = Locator.GetShipBody();
                _shipSpawnPoint    = GetSpawnPoint(true);

                // Move debug spawn point to initial ship position.
                _playerSpawnPoint = GetSpawnPoint();
                _shipSpawnPoint.transform.position = shipTransform.position;
                _shipSpawnPoint.transform.rotation = shipTransform.rotation;
            }

            _deathHandler = new MessageHandler <DeathMessage>();
            _deathHandler.OnServerReceiveMessage += OnServerReceiveMessage;
            _deathHandler.OnClientReceiveMessage += OnClientReceiveMessage;
        }
Example #3
0
        public void Init()
        {
            DebugLog.DebugWrite($"INIT");
            var playerTransform = Locator.GetPlayerTransform();

            _playerResources   = playerTransform.GetComponent <PlayerResources>();
            _spaceSuit         = Locator.GetPlayerSuit();
            _playerSpawner     = FindObjectOfType <PlayerSpawner>();
            _suitPickupVolumes = FindObjectsOfType <SuitPickupVolume>();
            _fluidDetector     = Locator.GetPlayerCamera().GetComponentInChildren <FluidDetector>();
            _playerSpawnPoint  = GetSpawnPoint();
        }
        public void Init()
        {
            var playerTransform = Locator.GetPlayerTransform();

            _playerResources = playerTransform.GetComponent <PlayerResources>();
            _spaceSuit       = Locator.GetPlayerSuit();
            _playerSpawner   = FindObjectOfType <PlayerSpawner>();
            _shipTractorBeam = FindObjectOfType <ShipTractorBeamSwitch>();
            _fluidDetector   = Locator.GetPlayerCamera().GetComponentInChildren <FluidDetector>();

            _playerSpawnPoint = GetSpawnPoint();
            _shipSpawnPoint   = GetSpawnPoint(true);

            var shipTransform = Locator.GetShipTransform();

            if (shipTransform == null)
            {
                DebugLog.ToConsole($"Warning - Init() ran when ship was null?", MessageType.Warning);
                return;
            }
            _shipComponents    = shipTransform.GetComponentsInChildren <ShipComponent>();
            _hatchController   = shipTransform.GetComponentInChildren <HatchController>();
            _cockpitController = shipTransform.GetComponentInChildren <ShipCockpitController>();
            _shipBody          = Locator.GetShipBody();

            if (_shipSpawnPoint == null)
            {
                DebugLog.ToConsole("Warning - _shipSpawnPoint is null in Init()!", MessageType.Warning);
                return;
            }

            // Move debug spawn point to initial ship position (so ship doesnt spawn in space!)
            var timberHearth = Locator.GetAstroObject(AstroObject.Name.TimberHearth).transform;

            _shipSpawnPoint.transform.SetParent(timberHearth);
            _shipSpawnPoint.transform.localPosition = ShipContainerOffset;
            _shipSpawnPoint.transform.localRotation = ShipContainerRotation;
        }
        private void Init()
        {
            _fluidDetector = Locator.GetPlayerCamera().GetComponentInChildren <FluidDetector>();

            var mainButton = ModHelper.Menus.PauseMenu.OptionsButton.Duplicate("TELEPORT");

            var shipSpawnMenu = ModHelper.Menus.PauseMenu.Copy("Ship Spawn Points");

            shipSpawnMenu.Buttons.ForEach(button => button.Hide());
            shipSpawnMenu.Menu.transform.localScale    *= 0.5f;
            shipSpawnMenu.Menu.transform.localPosition *= 0.5f;

            var playerSpawnMenu = ModHelper.Menus.PauseMenu.Copy("Player Spawn Points");

            playerSpawnMenu.Buttons.ForEach(button => button.Hide());
            playerSpawnMenu.Menu.transform.localScale    *= 0.5f;
            playerSpawnMenu.Menu.transform.localPosition *= 0.5f;

            var sourceButton = shipSpawnMenu.Buttons[0];

            mainButton.OnClick += ()
                                  => (PlayerState.IsInsideShip()
                    ? shipSpawnMenu
                    : playerSpawnMenu)
                                  .Open();

            var spawnPointsWithNoAO = Resources.FindObjectsOfTypeAll <SpawnPoint>().ToList();
            var astroObjects        = Resources.FindObjectsOfTypeAll <AstroObject>().ToList();
            var astroSpawnPoints    = new Dictionary <AstroObject, SpawnPoint[]>();

            foreach (var astroObject in astroObjects)
            {
                var attachedSpawnPoints = astroObject.GetComponentsInChildren <SpawnPoint>(true);
                astroSpawnPoints[astroObject] = attachedSpawnPoints;
                spawnPointsWithNoAO           = spawnPointsWithNoAO.Except(attachedSpawnPoints).ToList();
            }

            astroObjects.Sort((a, b) => astroSpawnPoints[a].Length.CompareTo(astroSpawnPoints[b].Length));

            void CloseMenu()
            {
                shipSpawnMenu.Close();
                playerSpawnMenu.Close();
                ModHelper.Menus.PauseMenu.Close();
            }

            void CreateSpawnPointButton(SpawnPoint spawnPoint, IModPopupMenu spawnMenu, string name)
            {
                var subButton = spawnMenu.AddButton(sourceButton.Copy(name));

                subButton.OnClick += () =>
                {
                    spawnMenu.Close();
                    CloseMenu();
                    SpawnAt(spawnPoint);
                    _prevSpawnPoint = spawnPoint;
                };
                subButton.Show();
            }

            void CreateSpawnPointList(List <SpawnPoint> spawnPoints, AstroObject astroObject, IModPopupMenu spawnMenu)
            {
                var subMenu = ModHelper.Menus.PauseMenu.Copy("Spawn Points");

                subMenu.Buttons.ForEach(button => button.Hide());
                subMenu.Menu.transform.localScale    *= 0.5f;
                subMenu.Menu.transform.localPosition *= 0.5f;

                var subButton = spawnMenu.AddButton(sourceButton.Copy($"{GetAstroObjectName(astroObject)}..."));

                subButton.OnClick += () => subMenu.Open();
                subButton.Show();

                for (var i = 0; i < spawnPoints.Count; i++)
                {
                    var point = spawnPoints[i];
                    CreateSpawnPointButton(point, subMenu, point.name);
                }
            }

            void CreateMiscSpawnPointList(List <SpawnPoint> spawnPoints, IModPopupMenu spawnMenu)
            {
                var subMenu = ModHelper.Menus.PauseMenu.Copy("Spawn Points");

                subMenu.Buttons.ForEach(button => button.Hide());
                subMenu.Menu.transform.localScale    *= 0.5f;
                subMenu.Menu.transform.localPosition *= 0.5f;

                var subButton = spawnMenu.AddButton(sourceButton.Copy("<No Set AstroObject>"));

                subButton.OnClick += () => subMenu.Open();
                subButton.Show();

                for (var i = 0; i < spawnPoints.Count; i++)
                {
                    var point = spawnPoints[i];
                    CreateSpawnPointButton(point, subMenu, point.name);
                }
            }

            foreach (var astroObject in astroObjects)
            {
                var allSpawnPoints = astroSpawnPoints[astroObject];
                if (allSpawnPoints.Length == 0)
                {
                    continue;
                }

                var shipSpawnPoints   = allSpawnPoints.Where(point => point.IsShipSpawn()).ToList();
                var playerSpawnPoints = allSpawnPoints.Where(point => !point.IsShipSpawn()).ToList();

                var astroName = GetAstroObjectName(astroObject);

                if (shipSpawnPoints.Count > 1)
                {
                    CreateSpawnPointList(shipSpawnPoints, astroObject, shipSpawnMenu);
                }
                else if (shipSpawnPoints.Count == 1)
                {
                    CreateSpawnPointButton(shipSpawnPoints[0], shipSpawnMenu, $"{astroName} - {shipSpawnPoints[0].name}");
                }

                if (playerSpawnPoints.Count > 1)
                {
                    CreateSpawnPointList(playerSpawnPoints, astroObject, playerSpawnMenu);
                }
                else if (playerSpawnPoints.Count == 1)
                {
                    CreateSpawnPointButton(playerSpawnPoints[0], playerSpawnMenu, $"{astroName} - {playerSpawnPoints[0].name}");
                }
            }

            var miscShipSpawns   = spawnPointsWithNoAO.Where(point => point.IsShipSpawn()).ToList();
            var miscPlayerSpawns = spawnPointsWithNoAO.Where(point => !point.IsShipSpawn()).ToList();

            if (miscShipSpawns.Count > 1)
            {
                CreateMiscSpawnPointList(miscShipSpawns, shipSpawnMenu);
            }
            else if (miscShipSpawns.Count == 1)
            {
                CreateSpawnPointButton(miscShipSpawns[0], shipSpawnMenu, miscShipSpawns[0].name);
            }

            if (miscPlayerSpawns.Count > 1)
            {
                CreateMiscSpawnPointList(miscPlayerSpawns, playerSpawnMenu);
            }
            else if (miscPlayerSpawns.Count == 1)
            {
                CreateSpawnPointButton(miscPlayerSpawns[0], playerSpawnMenu, miscPlayerSpawns[0].name);
            }

            var clearSaveButton = sourceButton.Copy("RESET INITIAL SPAWN POINT");

            clearSaveButton.OnClick += () =>
            {
                ResetInitialSpawnPoint();
                CloseMenu();
            };
            clearSaveButton.Show();
            shipSpawnMenu.AddButton(clearSaveButton);
            playerSpawnMenu.AddButton(clearSaveButton);

            var saveButton = sourceButton.Copy("SAVE LAST USED AS INITIAL");

            saveButton.OnClick += () =>
            {
                SetInitialSpawnPoint();
                CloseMenu();
            };
            saveButton.Show();
            shipSpawnMenu.AddButton(saveButton);
            playerSpawnMenu.AddButton(saveButton);
        }