コード例 #1
0
        public void Update()
        {
            bool DoSpawn = false;

            if (!_SpawnTimer.IsRunning)
            {
                _SpawnTimer.Start();
                _NextSpawnTime = 0f;
                DoSpawn        = true;
            }

            if (_SpawnTimer.ElapsedMilliseconds / 1000f > _NextSpawnTime && _NextSpawnTime >= 0f)
            {
                DoSpawn = true;
                _SpawnTimer.Reset();
                _SpawnTimer.Start();
            }

            while (_Stars.Count < _MaxNumber && DoSpawn)
            {
                float size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                float lifetime = 0f;
                float vx       = 0f;
                float vy       = 0f;
                float vr       = 0f;
                float vsize    = 0f;
                _NextSpawnTime = 0f;

                switch (_Type)
                {
                case EParticeType.Twinkle:
                    size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                    lifetime = CGame.Rand.Next(500) / 1000f + 0.5f;
                    vx       = -CGame.Rand.Next(10000) / 50f + 100f;
                    vy       = -CGame.Rand.Next(10000) / 50f + 100f;
                    vr       = -CGame.Rand.Next(500) / 100f + 2.5f;
                    vsize    = lifetime * 2f;
                    break;

                case EParticeType.Star:
                    size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                    lifetime = CGame.Rand.Next(1000) / 500f + 0.2f;
                    vx       = -CGame.Rand.Next(1000) / 50f + 10f;
                    vy       = -CGame.Rand.Next(1000) / 50f + 10f;
                    vr       = -CGame.Rand.Next(500) / 100f + 2.5f;
                    vsize    = lifetime * 2f;
                    break;

                case EParticeType.Snow:
                    size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                    lifetime = CGame.Rand.Next(5000) / 50f + 10f;
                    vx       = -CGame.Rand.Next(1000) / 50f + 10f;
                    vy       = CGame.Rand.Next(1000) / 50f + Math.Abs(vx) + 10f;
                    vr       = -CGame.Rand.Next(200) / 50f + 2f;
                    vsize    = lifetime * 2f;

                    _NextSpawnTime = lifetime / _MaxNumber;
                    DoSpawn        = false;
                    break;

                case EParticeType.Flare:
                    size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                    lifetime = CGame.Rand.Next(500) / 1000f + 0.1f;
                    vx       = -CGame.Rand.Next(2000) / 50f;
                    vy       = -CGame.Rand.Next(2000) / 50f + 20f;
                    vr       = -CGame.Rand.Next(2000) / 50f + 20f;
                    vsize    = lifetime * 2f;
                    break;

                case EParticeType.PerfNoteStar:
                    size     = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                    lifetime = CGame.Rand.Next(1000) / 500f + 1.2f;
                    vx       = 0f;
                    vy       = 0f;
                    vr       = CGame.Rand.Next(500) / 50f + 10f;
                    vsize    = lifetime * 2f;
                    break;

                default:
                    break;
                }

                int w = (int)(_Area.W - size / 4f);
                int h = (int)(_Area.H - size / 4f);

                if (w < 0)
                {
                    w = 0;
                }

                if (h < 0)
                {
                    h = 0;
                }

                CParticle star;
                if (_TextureName != String.Empty)
                {
                    star = new CParticle(_TextureName, _Color,
                                         CGame.Rand.Next(w) + _Area.X - size / 4f,
                                         CGame.Rand.Next(h) + _Area.Y - size / 4f,
                                         size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
                }
                else
                {
                    star = new CParticle(_Texture, _Color,
                                         CGame.Rand.Next(w) + _Area.X - size / 4f,
                                         CGame.Rand.Next(h) + _Area.Y - size / 4f,
                                         size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
                }

                _Stars.Add(star);
            }

            if (_Type == EParticeType.Flare || _Type == EParticeType.PerfNoteStar || _Type == EParticeType.Twinkle)
            {
                _NextSpawnTime = -1f;
            }

            int i = 0;

            while (i < _Stars.Count)
            {
                _Stars[i].Update();
                if (!_Stars[i].IsAlive)
                {
                    _Stars.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }
        }
コード例 #2
0
ファイル: CDraw.cs プロジェクト: zhaozw/Vocaluxe
        public void Update()
        {
            bool DoSpawn = false;
            if (!_SpawnTimer.IsRunning)
            {
                _SpawnTimer.Start();
                _NextSpawnTime = 0f;
                DoSpawn = true;
            }

            if (_SpawnTimer.ElapsedMilliseconds / 1000f > _NextSpawnTime && _NextSpawnTime >= 0f)
            {
                DoSpawn = true;
                _SpawnTimer.Reset();
                _SpawnTimer.Start();
            }

            while (_Stars.Count < _MaxNumber && DoSpawn)
            {
                float size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                float lifetime = 0f;
                float vx = 0f;
                float vy = 0f;
                float vr = 0f;
                float vsize = 0f;
                _NextSpawnTime = 0f;

                switch (_Type)
                {
                    case EParticeType.Twinkle:
                        size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                        lifetime = CGame.Rand.Next(500) / 1000f + 0.5f;
                        vx = -CGame.Rand.Next(10000) / 50f + 100f;
                        vy = -CGame.Rand.Next(10000) / 50f + 100f;
                        vr = -CGame.Rand.Next(500) / 100f + 2.5f;
                        vsize = lifetime * 2f;
                        break;

                    case EParticeType.Star:
                        size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                        lifetime = CGame.Rand.Next(1000) / 500f + 0.2f;
                        vx = -CGame.Rand.Next(1000) / 50f + 10f;
                        vy = -CGame.Rand.Next(1000) / 50f + 10f;
                        vr = -CGame.Rand.Next(500) / 100f + 2.5f;
                        vsize = lifetime * 2f;
                        break;

                    case EParticeType.Snow:
                        size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                        lifetime = CGame.Rand.Next(5000) / 50f + 10f;
                        vx = -CGame.Rand.Next(1000) / 50f + 10f;
                        vy = CGame.Rand.Next(1000) / 50f + Math.Abs(vx) + 10f;
                        vr = -CGame.Rand.Next(200) / 50f + 2f;
                        vsize = lifetime * 2f;

                        _NextSpawnTime = lifetime / _MaxNumber;
                        DoSpawn = false;
                        break;

                    case EParticeType.Flare:
                        size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                        lifetime = CGame.Rand.Next(500) / 1000f + 0.1f;
                        vx = -CGame.Rand.Next(2000) / 50f;
                        vy = -CGame.Rand.Next(2000) / 50f + 20f;
                        vr = -CGame.Rand.Next(2000) / 50f + 20f;
                        vsize = lifetime * 2f;
                        break;

                    case EParticeType.PerfNoteStar:
                        size = CGame.Rand.Next((int)_Size / 2) + _Size / 2;
                        lifetime = CGame.Rand.Next(1000) / 500f + 1.2f;
                        vx = 0f;
                        vy = 0f;
                        vr = CGame.Rand.Next(500) / 50f + 10f;
                        vsize = lifetime * 2f;
                        break;

                    default:
                        break;
                }

                int w = (int)(_Area.W - size / 4f);
                int h = (int)(_Area.H - size / 4f);

                if (w < 0)
                    w = 0;

                if (h < 0)
                    h = 0;

                CParticle star;
                if (_TextureName != String.Empty)
                {
                    star = new CParticle(_TextureName, _Color,
                        CGame.Rand.Next(w) + _Area.X - size / 4f,
                        CGame.Rand.Next(h) + _Area.Y - size / 4f,
                        size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
                }
                else
                {
                    star = new CParticle(_Texture, _Color,
                        CGame.Rand.Next(w) + _Area.X - size / 4f,
                        CGame.Rand.Next(h) + _Area.Y - size / 4f,
                        size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
                }

                _Stars.Add(star);
            }

            if (_Type == EParticeType.Flare || _Type == EParticeType.PerfNoteStar || _Type == EParticeType.Twinkle)
                _NextSpawnTime = -1f;

            int i = 0;
            while (i < _Stars.Count)
            {
                _Stars[i].Update();
                if (!_Stars[i].IsAlive)
                {
                    _Stars.RemoveAt(i);
                }
                else
                    i++;
            }
        }