Exemplo n.º 1
0
    void Cylinder()
    {
        var random = new Random();
        var n      = 0.0f;

        _r = (float)Math.PI * 2 / Roxik.Models.Count;
        var d = _r * Math.Floor(random.NextDouble() * 40 + 1);

        for (var i = 0; i < Roxik.Models.Count; i++)
        {
            GameObject       m = Roxik.Models[i];
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.speed        = 0;
            p.acceleration = (float)random.NextDouble() * 0.05f + 0.022f;
            p.animate      = false;
            p.dest         = new Vector3();

            if (i < Roxik.Models.Count - 50)
            {
                p.dest.x = (float)Math.Cos(n) * 4;
                p.dest.y = i * 0.008f - (Roxik.Models.Count - 50) * 0.004f;
                p.dest.z = (float)Math.Sin(n) * 4;
            }
            else
            {
                p.dest.x = (float)random.NextDouble() * 14 - 7;
                p.dest.y = (float)random.NextDouble() * 14 - 7;
                p.dest.z = (float)random.NextDouble() * 14 - 7;
            }

            n = (float)(n + d);
        }
    }
    void Wave()
    {
        _motionType = MotionType.Wave;
        var        random = new Random();
        var        a      = random.NextDouble() * 0.05f + 0.022f;
        var        l      = Math.Floor(Math.Sqrt(Roxik.Models.Count));
        var        d      = -(l - 1) * 0.55f * 0.5f;
        var        t      = random.NextDouble() * 0.3f + 0.05f;
        var        s      = random.NextDouble() + 1;
        var        n      = 0;
        GameObject m;

        _r  = 0;
        _r0 = 0;
        _rl = (float)random.NextDouble() + 1;
        _rp = (float)random.NextDouble() * 0.3f + 0.1f;

        for (var i = 0; i < l; i++)
        {
            var ty = Math.Cos(_r) * s;
            _r += (float)t;

            for (var j = 0; j < l; j++)
            {
                n += 1;
                m  = Roxik.Models[n - 1];
                MotionProperties p = m.GetComponent <MotionProperties>();
                p.speed        = 0;
                p.acceleration = (float)a;
                p.animate      = false;
                p.destination  = new Vector3();
                p.direction    = new Vector3();

                p.direction.x   = p.direction.y = p.direction.z = 0;
                p.destination.x = (float)(i * 0.55f + d);
                p.destination.y = (float)ty;
                p.destination.z = (float)(j * 0.55f + d);
            }
        }

        while (n < Roxik.Models.Count)
        {
            m = Roxik.Models[n];
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.speed        = 0;
            p.acceleration = (float)a;
            p.animate      = false;
            p.destination  = new Vector3
            {
                x = (float)random.NextDouble() * 14 - 7,
                y = (float)random.NextDouble() * 14 - 7,
                z = (float)random.NextDouble() * 14 - 7
            };

            n++;
        }
    }
Exemplo n.º 3
0
    void Gravity()
    {
        var random = new Random();

        _sceneLimit = 60;

        for (var i = 0; i < Roxik.Models.Count; i++)
        {
            var m = Roxik.Models[i];
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.dir          = new Vector3();
            p.speed        = 0;
            p.acceleration = 0.5f;
            p.animate      = false;
            p.dir.y        = (float)random.NextDouble() * -0.2f;
        }
    }
Exemplo n.º 4
0
    void Antigravity()
    {
        var random = new Random();

        for (var i = 0; i < Roxik.Models.Count; i++)
        {
            var m = Roxik.Models[i];
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.speed        = 0;
            p.acceleration = 0.5f;
            p.animate      = false;
            p.dir          = new Vector3
            {
                x = (float)random.NextDouble() * 0.25f - 0.125f,
                y = (float)random.NextDouble() * 0.25f - 0.125f,
                z = (float)random.NextDouble() * 0.25f - 0.125f
            };
        }
    }
    void Cube()
    {
        _motionType = MotionType.Cube;
        var random = new Random();
        var a      = random.NextDouble() * 0.05f + 0.022f;
        var n      = 0;
        var l      = 1;

        // TODO: Update to `Math.Cbrt()` when .NET Standard 2.1 supported
        while (true)
        {
            if (l * l * l > Roxik.Models.Count)
            {
                l--;
                break;
            }

            l++;
        }

        for (var i = 0; i < l; i++)
        {
            for (var j = 0; j < l; j++)
            {
                for (var k = 0; k < l; k++)
                {
                    var m = Roxik.Models[n++];
                    MotionProperties p = m.GetComponent <MotionProperties>();
                    p.speed        = 0;
                    p.acceleration = (float)a;
                    p.animate      = false;
                    p.destination  = new Vector3
                    {
                        x = i * 0.8f + -(l - 1) * 0.8f * 0.5f,
                        y = j * 0.8f + -(l - 1) * 0.8f * 0.5f,
                        z = k * 0.8f + -(l - 1) * 0.8f * 0.5f
                    };
                }
            }
        }
    }
Exemplo n.º 6
0
    void Cube()
    {
        var random = new Random();
        var a      = random.NextDouble() * 0.05f + 0.022f;
        var n      = 0;
        var l      = 1;

        while (true)
        {
            if (l * l * l > Roxik.Models.Count)
            {
                l--;
                break;
            }

            l++;
        }

        for (var i = 0; i < l; i++)
        {
            for (var j = 0; j < l; j++)
            {
                for (var k = 0; k < l; k++)
                {
                    var m = Roxik.Models[n++];
                    MotionProperties p = m.GetComponent <MotionProperties>();
                    p.speed        = 0;
                    p.acceleration = (float)a;
                    p.animate      = false;
                    p.dest         = new Vector3
                    {
                        x = i * 0.8f + -(l - 1) * 0.8f * 0.5f,
                        y = j * 0.8f + -(l - 1) * 0.8f * 0.5f,
                        z = k * 0.8f + -(l - 1) * 0.8f * 0.5f
                    };
                }
            }
        }
    }
    void Sphere()
    {
        _motionType = MotionType.Sphere;
        var random = new Random();
        var s      = 0.0f;
        var c      = 0.0f;
        var r      = Math.PI * 2 / Roxik.Models.Count;

        var d  = r * random.Next(1, 40);
        var d2 = random.Next(3, 8);

        foreach (var m in Roxik.Models)
        {
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.speed        = 0;
            p.acceleration = (float)random.NextDouble() * 0.05f + 0.022f;
            p.animate      = false;
            p.destination  = new Vector3();

            var d1 = (float)(Math.Cos(s) * d2);

            if ((float)random.NextDouble() > 0.06f)
            {
                p.destination.x = (float)Math.Cos(c) * d1;
                p.destination.y = (float)Math.Sin(s) * d2;
                p.destination.z = (float)Math.Sin(c) * d1;
            }
            else
            {
                p.destination.x = (float)random.NextDouble() * 7 - 7;
                p.destination.z = (float)random.NextDouble() * 7 - 7;
                p.destination.y = (float)random.NextDouble() * 7 - 7;
            }

            s += (float)r;
            c += (float)d;
        }
    }
    void Tube()
    {
        _motionType = MotionType.Tube;
        var random = new Random();
        var a      = random.NextDouble() * 0.05f + 0.022f;
        var v      = random.NextDouble() * 0.025f + 0.02f;
        var dx     = -v * Roxik.Models.Count * 0.44f;
        var d      = random.NextDouble() + 1.2f;

        for (var i = 0; i < Roxik.Models.Count; i++)
        {
            var m = Roxik.Models[i];
            MotionProperties p = m.GetComponent <MotionProperties>();
            p.speed        = 0;
            p.acceleration = (float)a;
            p.animate      = false;

            if (random.NextDouble() > 0.05f)
            {
                p.destination = new Vector3
                {
                    x = (float)(i * v + dx),
                    y = (float)(random.NextDouble() * d - d * 0.5f),
                    z = (float)(random.NextDouble() * d - d * 0.5f)
                };
            }
            else
            {
                p.destination = new Vector3
                {
                    x = (float)(random.NextDouble() * 14 - 7),
                    y = (float)(random.NextDouble() * 14 - 7),
                    z = (float)(random.NextDouble() * 14 - 7)
                };
            }
        }
    }
Exemplo n.º 9
0
    // Update is called once per frame
    void Update()
    {
        Random random = new Random();
        float  maxp;

        switch (_motionType)
        {
        case MotionType.Cylinder:
        case MotionType.Sphere:
        case MotionType.Cube:
        case MotionType.Tube:
            for (int i = 0; i < _cutoff; i++)
            {
                GameObject       m = Roxik.Models[i];
                MotionProperties p = m.GetComponent <MotionProperties>();

                if (!p.animate)
                {
                    if (p.speed < 0.8)
                    {
                        p.speed += p.acceleration;
                    }

                    Vector3 modelPosition = m.transform.position;
                    float   c0            = p.dest.x - modelPosition.x;
                    float   c1            = p.dest.y - modelPosition.y;
                    float   c2            = p.dest.z - modelPosition.z;

                    m.transform.position = new Vector3(
                        modelPosition.x + c0 * p.speed,
                        modelPosition.y + c1 * p.speed,
                        modelPosition.z + c2 * p.speed
                        );
                    if (Math.Abs(c0) < 0.05 && Math.Abs(c1) < 0.05 && Math.Abs(c2) < 0.05)
                    {
                        p.animate            = true;
                        m.transform.position = new Vector3(
                            p.dest.x,
                            p.dest.y,
                            p.dest.z
                            );
                    }
                }
            }

            maxp     = (float)Math.Floor(Roxik.Models.Count / 40.0f);
            _cutoff += maxp;
            if (_cutoff > Roxik.Models.Count)
            {
                _cutoff = Roxik.Models.Count;
            }

            break;

        case MotionType.Wave:
            var max = Math.Floor(Math.Sqrt(Roxik.Models.Count));
            var cc  = 0;

            for (var i = 0; i < max; i++)
            {
                var cos = Math.Cos(_r) * _rl;
                _r += _rp;
                for (var j = 0; j < max; j++)
                {
                    GameObject       m = Roxik.Models[cc++];
                    MotionProperties p = m.GetComponent <MotionProperties>();
                    p.dest.y = (float)cos;
                }
            }

            _r0 += 0.11f;
            _r   = _r0;

            for (var i = 0; i < _cutoff; i++)
            {
                GameObject       m = Roxik.Models[i];
                MotionProperties p = m.GetComponent <MotionProperties>();
                if (p.speed < 0.5)
                {
                    p.speed += p.acceleration;
                }

                Vector3 modelPosition = m.transform.position;
                m.transform.position = new Vector3 {
                    x = modelPosition.x + (p.dest.x - modelPosition.x) * p.speed,
                    y = modelPosition.y + (p.dest.y - modelPosition.y) * p.speed,
                    z = modelPosition.z + (p.dest.z - modelPosition.z) * p.speed
                };
            }

            maxp     = (float)Math.Floor(Roxik.Models.Count / 40.0f);
            _cutoff += maxp;
            if (_cutoff > Roxik.Models.Count)
            {
                _cutoff = Roxik.Models.Count;
            }

            break;

        case MotionType.Gravity:
            for (var i = 0; i < Roxik.Models.Count; i++)
            {
                GameObject       m = Roxik.Models[i];
                MotionProperties p = m.GetComponent <MotionProperties>();
                var y = m.transform.position.y + p.dir.y;
                p.dir.y -= 0.06f;

                if (y < -9)
                {
                    y               = -9;
                    p.dir.y        *= -p.acceleration;
                    p.acceleration *= 0.9f;
                }

                m.transform.position = new Vector3 {
                    x = m.transform.position.x, y = y, z = m.transform.position.z
                };
            }

            break;

        case MotionType.Antigravity:
            for (var i = 0; i < _cutoff; i++)
            {
                GameObject       m             = Roxik.Models[i];
                MotionProperties p             = m.GetComponent <MotionProperties>();
                Vector3          modelPosition = m.transform.position;

                m.transform.position = new Vector3
                {
                    x = modelPosition.x + p.dir.x,
                    y = modelPosition.y + p.dir.y,
                    z = modelPosition.z + p.dir.z
                };
            }

            _cutoff += 30;
            if (_cutoff > Roxik.Models.Count)
            {
                _cutoff = Roxik.Models.Count;
            }

            break;

        default:
            throw new ArgumentOutOfRangeException();
        }

        if (++_frame > _sceneLimit)
        {
            ChangeScene((MotionType)Enum.GetValues(typeof(MotionType)).GetValue(random.Next(0, 7)));
        }
    }