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 ); }
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(); } }
/** * 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)); }
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); }
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()); } }
// 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); }