Inheritance: MonoBehaviour
Exemple #1
0
    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;
        }
    }
Exemple #2
0
    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();
    }
Exemple #3
0
    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;
        }
    }
Exemple #4
0
    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));
        }
    }