예제 #1
0
    private void Update()
    {
        if (!isStarted)
        {
            return;
        }

        if (Time.time - _startTime < 1.2)
        {
            return;
        }

        if (!_fire.activeSelf)
        {
            _fire.SetActive(true);
        }

        _rigidbody2D.velocity = new Vector2(_rigidbody2D.velocity.x, _verticalSpeed);

        if (!_isAlive)
        {
            _rigidbody2D.velocity = new Vector2(0, 0);

            return;
        }

        if (isFinished)
        {
            return;
        }

        if (Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.A))
        {
            _rigidbody2D.AddForce(new Vector2(-1 * _horizontalSpeed * Time.deltaTime, 0));
        }
        else if (Input.GetKey(KeyCode.RightArrow) || Input.GetKey(KeyCode.D))
        {
            _rigidbody2D.AddForce(new Vector2(_horizontalSpeed * Time.deltaTime, 0));
        }

        Vector2 currentPosition = _transform.position;

        if (currentPosition.x > _bounds)
        {
            _logger.Log("Stuck right side");
            _rigidbody2D.velocity = new Vector2(0, _rigidbody2D.velocity.y);
            transform.position    = new Vector2(_bounds, currentPosition.y);
        }
        else if (currentPosition.x < (-1 * _bounds))
        {
            _logger.Log("Stuck left side");
            _rigidbody2D.velocity = new Vector2(0, _rigidbody2D.velocity.y);
            transform.position    = new Vector2((-1 * _bounds), currentPosition.y);
        }
    }
예제 #2
0
 private void OnTriggerEnter2D(Collider2D collision)
 {
     if (collision.tag == "Player")
     {
         _logger.Log("Player entered goal");
         _messenger.Publish(new PlayerEnteredGoalMessage(this));
     }
 }
    private void Start()
    {
        _logger    = Game.Container?.Resolve <Core.Loggers.ILoggerFactory>()?.Create(this);
        _messenger = Game.Container?.Resolve <Core.Mediators.IMessenger>();

        _landerEnteredLandingAreaMessageToken = _messenger.Subscribe((LanderEnteredLandingAreaMessage LanderEnteredLandingAreaMessage) =>
        {
            _logger?.Log("LanderEnteredLandingAreaMessage");
            CheckVictoryConditions();
        });

        _landerExitedLandingAreaMessageToken = _messenger.Subscribe((LanderExitedLandingAreaMessage LanderEnteredLandingAreaMessage) =>
        {
            _logger?.Log("LanderExitedLandingAreaMessage");
        });

        _landerCrashedMessageToken = _messenger.Subscribe((LanderCrashedMessage landerCrashedMessage) =>
        {
            if (!_hasLanded)
            {
                ShowMenu(_crashedMenu);
                _logger?.Log("LanderCrashedMessage");
            }
        });

        _landerLeftBoundsMessageToken = _messenger.Subscribe((LanderLeftBoundsMessage landerLeftBoundsMessage) =>
        {
            if (!_hasLanded)
            {
                ShowMenu(_outOfBoundsMenu);
                _logger?.Log("LanderLeftBoundsMessage");
            }
        });

        StartCoroutine(StartIntroTextFadeOut());
    }
예제 #4
0
    // Use this for initialization
    private void Start()
    {
        _pipeTiles = new List <PipeTileScript>();

        _logger    = Game.Container?.Resolve <Core.Loggers.ILoggerFactory>()?.Create(this);
        _messenger = Game.Container?.Resolve <Core.Mediators.IMessenger>();

        _pipeTiles.AddRange(GetComponentsInChildren <PipeTileScript>());
        _pipeTiles = _pipeTiles.OrderBy(pt => pt.GetPosition().y).ThenBy(pt => pt.GetPosition().x).ToList();


        StringBuilder sb = new StringBuilder();

        sb.AppendLine($"Found {_pipeTiles.Count} tiles");

        _startTile = _pipeTiles.First();
        _endTile   = _pipeTiles.Last();

        sb.AppendLine("    Start tile " + _startTile.ToString());
        sb.AppendLine("    End tile " + _endTile.ToString());
        sb.AppendLine("");

        foreach (PipeTileScript pipeTileScript in _pipeTiles)
        {
            sb.AppendLine("    " + pipeTileScript.ToString());
        }

        _logger?.Log(sb.ToString());
        _pipeTileRotatedMessageToken = _messenger?.Subscribe((PipeTileRotatedMessage pipeTileRotatedMessage) =>
        {
            _logger?.Log("Rotated " + pipeTileRotatedMessage.PipeTile.ToString());
            CheckForGameCompletion();
        });

        CheckForGameCompletion();
    }
    private void CheckVictoryConditions()
    {
        float landingSpeed = _player.velocity.magnitude;

        _logger?.Log("Landing Speed " + landingSpeed);

        if (landingSpeed > 1)
        {
            ShowMenu(_landedToHardMenu);
        }
        else
        {
            _messenger?.Publish(new LanderLandedSuccessfullyMessage(this));
            _hasLanded = true;

            StartCoroutine(ToNextSceenAfterDelay());
        }
    }
예제 #6
0
    private void CheckForGameCompletion()
    {
        _logger?.Log("CheckForGameCompletion");

        bool isConnected = false;

        foreach (PipeTileScript pipeTileScript in _pipeTiles)
        {
            pipeTileScript.SetIsConnected(false);
        }

        PipeTileScript currentPipeTile = _startTile;

        while (currentPipeTile != null)
        {
            currentPipeTile.SetIsConnected(true);

            PipeTileScript connectedPipeTile = null;

            PipeTileShape    shape    = currentPipeTile.GetShape();
            PipeTileRotation rotation = currentPipeTile.GetRotation();

            //Find Connected Pipe
            if (shape == PipeTileShape.Line)
            {
                if (rotation == PipeTileRotation.Degrees0 || rotation == PipeTileRotation.Degrees180)
                {
                    PipeTileScript westTile = GetPipeTileToTheDirection(currentPipeTile, Direction.W);
                    PipeTileScript eastTile = GetPipeTileToTheDirection(currentPipeTile, Direction.E);

                    //Check West
                    if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }

                    //Check East
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees90 || rotation == PipeTileRotation.Degrees270)
                {
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);
                    PipeTileScript soutTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.S);

                    //Check North
                    if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }

                    //Check South
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Line && (soutTile.GetRotation() == PipeTileRotation.Degrees90 || soutTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = soutTile;
                    }
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Corner && soutTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = soutTile;
                    }
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Corner && soutTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = soutTile;
                    }
                }
            }
            else if (shape == PipeTileShape.Corner)
            {
                if (rotation == PipeTileRotation.Degrees0)
                {
                    PipeTileScript westTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.W);
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);

                    //Check westTile
                    if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }

                    //Check northTile
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees90)
                {
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);
                    PipeTileScript eastTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.E);

                    //Check northTile
                    if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }

                    //Check westTile
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees180)
                {
                    PipeTileScript eastTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.E);
                    PipeTileScript southTile = GetPipeTileToTheDirection(currentPipeTile, Direction.S);

                    //Check eastTile
                    if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }

                    //Check southTile
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Line && (southTile.GetRotation() == PipeTileRotation.Degrees90 || southTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = southTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees270)
                {
                    PipeTileScript southTile = GetPipeTileToTheDirection(currentPipeTile, Direction.S);
                    PipeTileScript westTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.W);

                    //Check southTile
                    if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Line && (southTile.GetRotation() == PipeTileRotation.Degrees90 || southTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = southTile;
                    }

                    //Check westTile
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }
                }
            }

            //CHECK VICTORY CONDITION
            if (connectedPipeTile == _endTile)
            {
                isConnected = true;
            }

            //Continue
            currentPipeTile = connectedPipeTile;
        }

        if (isConnected)
        {
            SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
        }
    }