Esempio n. 1
0
    public void GenerateRoad()
    {
        controller.spline.InsertPointAt(
            controller.spline.GetPointCount(),
            controller.spline.GetPosition(controller.spline.GetPointCount() - 1) +
            new Vector3(10f, Random.Range(minHeigthHills, maxHeigthHills), 0));

        controller.spline.SetTangentMode(controller.spline.GetPointCount() - 1, ShapeTangentMode.Continuous);

        controller.spline.SetRightTangent(
            controller.spline.GetPointCount() - 1,
            controller.spline.GetRightTangent(controller.spline.GetPointCount() - 1) + (Random.Range(minSmoothHill, maxSmoothHill) * Vector3.right)
            );

        controller.spline.SetLeftTangent(
            controller.spline.GetPointCount() - 1,
            controller.spline.GetLeftTangent(controller.spline.GetPointCount() - 1) + (Random.Range(minSmoothHill, maxSmoothHill) * Vector3.left)
            );

        Instantiate(
            Enviroments[Random.Range(0, Enviroments.Length - 1)],
            GroundCollider.ClosestPoint(Player.transform.position + new Vector3(Random.Range(40f, 100f), 0)),
            Quaternion.identity
            );
    }
Esempio n. 2
0
    void Update()
    {
        if (isAlive)
        {
            distanceFromGround = Vector2.Distance(transform.position, floorCollider.ClosestPoint(transform.position));
        }
        if (landed)
        {
            landedTime += Time.deltaTime;
        }

        if (shipFuel > 0 && !landed)
        {
            var output = GetNNOutput().Select(e => (float)System.Math.Round(e, 2)).ToArray();
            rigidBody.AddForce(transform.up * speed * output[0]);
            shipFuel -= (.1f * output[0]);
            var angleMult   = output[1] - .5f;
            var newRotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, inclinationAngle * angleMult);
            transform.rotation = Quaternion.RotateTowards(this.transform.rotation, newRotation, Time.deltaTime * rotationSpeed);
            if (rigidBody.velocity.magnitude > maxSpeed)
            {
                rigidBody.velocity = rigidBody.velocity.normalized * maxSpeed;
            }
        }
        if (!IsInBounds())
        {
            outOfBounds = true;
            Die();
        }
    }
Esempio n. 3
0
    /**
     * Old version with mesh
     *
     * private static Vector2[] Vec3ToVec2(IReadOnlyList<Vector3> tab)
     * {
     *  Vector2[] result = new Vector2[tab.Count];
     *  for (int i = 0; i < tab.Count; i++)
     *  {
     *      result[i] = tab[i];
     *  }
     *
     *  return result;
     * }
     *
     * private static List<int> CreateTriangles(ICollection vertex)
     * {
     *  int originPoint = vertex.Count - 1;
     *  List<int> result = new List<int>(6*originPoint);
     *  for (int i = 0; i < originPoint; i++)
     *  {
     *      result.Add((i+1) % originPoint );
     *      result.Add(i);
     *      result.Add(originPoint);
     *
     *      result.Add((i+1) % originPoint );
     *      result.Add(originPoint);
     *      result.Add(i);
     *  }
     *  return result;
     * }
     *
     * private static Vector2 AvgVector(IReadOnlyCollection<Vector3> vertex)
     * {
     *  Vector2 avg = Vector2.zero;
     *  foreach (Vector3 v in vertex)
     *  {
     *      avg.x += v.x;
     *      avg.y += v.y;
     *  }
     *
     *  avg.x /= vertex.Count;
     *  avg.y /= vertex.Count;
     *  return avg;
     * }
     **/

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (playerCollider2D != other)
        {
            return;
        }
        Vector3 pos = _edgeCollider2D.ClosestPoint(other.transform.position);

        CloseHole(pos, new List <Vector3>(vertexPos));
    }
Esempio n. 4
0
    private int FindBreakPoint(Vector2 playerPosition, EdgeCollider2D collider)
    {
        int     splitPoint = 999;
        float   distance   = Mathf.Infinity;
        Vector2 breakPoint = collider.ClosestPoint(playerPosition);

        for (int i = 0; i < collider.points.Length; i++)
        {
            float tempdistance = Vector2.Distance(collider.points[i], breakPoint);
            if (tempdistance < distance)
            {
                distance   = tempdistance;
                splitPoint = (i);
            }
        }
        Debug.Log("Found breakpoint " + splitPoint + " out of " + collider.pointCount);
        return(splitPoint);
    }
    bool isPlayerBound(Vector3 playerPosition, string keyPressed)
    {
        // Find the closet boundry point nearest the player
        // and determine if the player can move toward it or not
        // depending on the location the player is moving

        // We know the player is nearing a point above it if the
        // distance of the closets boundry point is positive
        // on the y axis.
        Vector3 closestBoundryPoint   = boundryCollider.ClosestPoint(playerPosition);
        Vector2 closestBoundryPoint2D = new Vector2(closestBoundryPoint.x, closestBoundryPoint.y);

        Vector3 closestPlayerPointToBoundry   = meshRenderer.bounds.ClosestPoint(closestBoundryPoint2D);
        Vector2 closestPlayerPointToBoundry2D = new Vector2(closestPlayerPointToBoundry.x, closestPlayerPointToBoundry.y);

        float   distanceFromClosestBountryPoint = Vector2.Distance(closestBoundryPoint2D, closestPlayerPointToBoundry2D);
        Vector2 distanceFromCenter = new Vector2(0f, 0f) - closestBoundryPoint2D;

        if (distanceFromClosestBountryPoint >= 0f && distanceFromClosestBountryPoint < boundryPadding)
        {
            if (keyPressed == up && distanceFromCenter.y < 0f)
            {
                return(true);
            }
            if (keyPressed == down && distanceFromCenter.y > 0f)
            {
                return(true);
            }
            if (keyPressed == left && distanceFromCenter.x < 0f)
            {
                return(true);
            }
            if (keyPressed == right && distanceFromCenter.x > 0f)
            {
                return(true);
            }
        }
        return(false);
    }
Esempio n. 6
0
    private void Update()
    {
        mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (StateManager.currentState == StateManager.GameState.Writing)
        {
            if (Application.isEditor)
            {
                if (Input.GetMouseButton(0))
                {
                    if (Vector2.Distance(mousePos, word.ClosestPoint(mousePos)) <= goodDistance)
                    {
                        if (!close && current != null)
                        {
                            current = Instantiate(good, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            index = 0;
                        }
                        close = true;
                    }
                    else
                    {
                        if (close && current != null)
                        {
                            current = Instantiate(bad, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            index = 0;
                        }
                        close = false;
                    }

                    if (current == null)
                    {
                        switch (close)
                        {
                        case true:
                            current = Instantiate(good, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            break;

                        case false:
                            current = Instantiate(bad, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            break;
                        }
                    }

                    if (current != null)
                    {
                        current.positionCount = index + 1;
                        current.SetPosition(index, mousePos);
                        index++;
                    }
                }
                if (Input.GetMouseButtonUp(0))
                {
                    current = null;
                    index   = 0;
                }
            }
            else
            {
                if (Input.touchCount > 0)
                {
                    Touch touch = Input.GetTouch(0);

                    if (touch.phase == TouchPhase.Began)
                    {
                        if (Vector2.Distance(touch.position, word.ClosestPoint(touch.position)) <= goodDistance)
                        {
                            current = Instantiate(good, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            close = true;
                        }
                        else
                        {
                            current = Instantiate(bad, transform).GetComponent <LineRenderer>();
                            drawn.Add(current);
                            close = false;
                        }
                    }

                    if (touch.phase == TouchPhase.Moved || touch.phase == TouchPhase.Stationary)
                    {
                        if (Vector2.Distance(touch.position, word.ClosestPoint(touch.position)) <= goodDistance)
                        {
                            if (!close && current != null)
                            {
                                current = Instantiate(good, transform).GetComponent <LineRenderer>();
                                drawn.Add(current);
                                index = 0;
                            }
                            close = true;
                        }
                        else
                        {
                            if (close && current != null)
                            {
                                current = Instantiate(bad, transform).GetComponent <LineRenderer>();
                                drawn.Add(current);
                                index = 0;
                            }
                            close = false;
                        }
                        current.positionCount = index + 1;
                        current.SetPosition(index, mousePos);
                        index++;
                    }

                    if (touch.phase == TouchPhase.Ended)
                    {
                        current = null;
                        index   = 0;
                    }
                }
            }
        }
        else if (StateManager.currentState == StateManager.GameState.WordFill)
        {
            StartCoroutine(fillWord());
        }
    }
Esempio n. 7
0
 // returns -1 or 1 depending on if this ladder goes up or down from a given ground position.  i.e.,
 // if the player is standing at pos and encounters this ladder, does it go up or down?
 public int GetDirection(Vector2 pos)
 {
     return((transitionFloor.ClosestPoint(pos).y > pos.y) ? 1 : -1);
 }