void Awake() { var camGO = GameObject.Find("MainCamera"); if (camGO) { transform.rotation = camGO.transform.rotation; } Walker = GetComponent <RoadWalker>(); sprite = GetComponent <tk2dAnimatedSprite>(); Walker.RoadToWalk = GameUtils.FindAssociatedLevel(transform).transform.Find("Road").GetComponent <Spline>(); Walker.Step(); lastPosition = transform.position; Walker.Step(); UpdateDirection(); transform.Find("RotatedCollider").gameObject.layer = LayerMask.NameToLayer("Player"); if (MainGameView.Instance) { Walker.Stop(); MainGameView.Instance.m_OnSceneReadyCallback += Walker.Resume; } }
void Start() { transform.localRotation = Quaternion.identity; sprite = GetComponent<tk2dAnimatedSprite>(); parent = transform.parent.GetComponent<Malisse>(); Walker = GetComponent<RoadWalker>(); Walker.RoadToWalk = GameUtils.FindAssociatedLevel(transform).transform.Find("Road").GetComponent<Spline>(); Walker.Stop(); }
void Awake() { var camGO = GameObject.Find("MainCamera"); if (camGO) transform.rotation = camGO.transform.rotation; Walker = GetComponent<RoadWalker>(); sprite = GetComponent<tk2dAnimatedSprite>(); Walker.RoadToWalk = GameUtils.FindAssociatedLevel(transform).transform.Find("Road").GetComponent<Spline>(); Walker.Step(); lastPosition = transform.position; Walker.Step(); UpdateDirection(); transform.Find("RotatedCollider").gameObject.layer = LayerMask.NameToLayer("Player"); if (MainGameView.Instance) { Walker.Stop(); MainGameView.Instance.m_OnSceneReadyCallback += Walker.Resume; } }
private async void GeneratePoints() { Terrain terrain = Terrain.instance; for (int i = 0; i < numPoints; i++) { float t = (float)i / (numPoints); float a = t * Mathf.Pi * 2f; Vector2 p = Vector2.Right.Rotated(a) * initialRadius; Vector3 p3D = new Vector3(p.x, 0f, p.y); Vector3 normal = terrain.GetNormal(p3D); p3D.y = terrain.GetHeight(p3D); Curve.AddPoint(p3D); SpatialDebugger.instance.AddLine(p3D, p3D + normal * 16f, Colors.Blue); //viewPoints[i] = AddPoint(p3D); } for (int j = 0; j < iterations; j++) { bool moved = false; for (int i = 0; i < numPoints; i++) { float t = (float)i / (numPoints - 1); Vector3 p = Curve.GetPointPosition(i); Vector3 normal = terrain.GetNormal(p); Vector3 terrainNormal = normal; normal.y = 0f; normal = normal.Normalized(); float desiredHeight = SampleNoise1D( elevationNoise, t * elevationFrequency, elevationFrequency ) * .5f + .5f; desiredHeight = Mathf.Lerp(elevationRange.x, elevationRange.y, desiredHeight); float diff = desiredHeight - p.y; float diffT = 1f - (j % 100) / 100f; diffT = Mathf.Pow(diffT, .25f); diff *= diffT; if (diff <= elevationDiffThreshold) { continue; } p.x -= normal.x * diff * elevationCorrection; p.z -= normal.z * diff * elevationCorrection; if ((j + 1) % 100 == 0) { float angle = (float)rng.NextDouble() * Mathf.Pi * 4f; Vector2 dir = Vector2.Right.Rotated(angle); p.x += dir.x * 256f; p.z += dir.y * 256f; } p.y = terrain.GetHeight(p); Curve.SetPointPosition(i, p); SpatialDebugger.instance.UpdateLine( i, p, p + terrainNormal * 16f, Colors.Blue ); /*Transform tr = viewPoints[i].GlobalTransform; * tr.origin = p; * tr.basis = LookAtBasis(terrainNormal); * viewPoints[i].GlobalTransform = tr;*/ moved = true; if (j % 50 == 0) { await ToSignal(GetTree(), "idle_frame"); } } if (!moved) { continue; } else { System.Console.WriteLine("Next iteration"); } } System.Console.WriteLine("Ended basic"); walker = new RoadWalker(); walker.origin = Curve.GetPointPosition(0); Vector3 targetPoint = Curve.GetPointPosition(1); walker.direction = new Vector2( targetPoint.x - walker.origin.x, targetPoint.z - walker.origin.z ).Angle(); for (int i = 0; i < numPoints; i++) { int nxt = (i + 1) % numPoints; await PathFind(Curve.GetPointPosition(nxt)); } }