Exemple #1
0
        public void setSmoke()
        {
            if (this.count <= 5)
            {
                this.count = 5;
            }
            this._listPS  = new List <ParticleSystem>();
            this._listPos = new List <Vector3>();
            for (int i = 0; i < this.count; i++)
            {
                this._listPS.Add(this.Instantiate());
            }
            Vector3 position = base.get_transform().get_position();
            float   fMin     = this.randMinPos.x + (this.randMaxPos.x - this.randMinPos.x) * 0.8f;
            float   fMin2    = this.randMinPos.x + (this.randMaxPos.x - this.randMinPos.x) * 0.5f;
            float   fMin3    = this.randMinPos.y + (this.randMaxPos.y - this.randMinPos.y) * 0.8f;
            float   fMin4    = this.randMinPos.y + (this.randMaxPos.y - this.randMinPos.y) * 0.5f;

            this._listPos.Add(new Vector3(position.x, position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z + this.randMaxPos.z));
            this._listPos.Add(new Vector3(position.x + XorRandom.GetFLim(fMin, this.randMaxPos.x), position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z + XorRandom.GetFLim(fMin4, this.randMaxPos.y)));
            this._listPos.Add(new Vector3(position.x - XorRandom.GetFLim(fMin, this.randMaxPos.x), position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z + XorRandom.GetFLim(fMin4, this.randMaxPos.y)));
            this._listPos.Add(new Vector3(position.x + XorRandom.GetFLim(fMin2, this.randMaxPos.x), position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z - XorRandom.GetFLim(fMin3, this.randMaxPos.y)));
            this._listPos.Add(new Vector3(position.x - XorRandom.GetFLim(fMin2, this.randMaxPos.x), position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z - XorRandom.GetFLim(fMin3, this.randMaxPos.y)));
            float[] array  = new float[2];
            float[] array2 = new float[2];
            for (int j = 0; j < this.count - 5; j++)
            {
                array[0]  = XorRandom.GetFLim(this.randMinPos.x, this.randMaxPos.x);
                array[1]  = XorRandom.GetFLim(this.randMaxPos.x * -1f, this.randMinPos.x * -1f);
                array2[0] = XorRandom.GetFLim(this.randMinPos.z, this.randMaxPos.z);
                array2[1] = XorRandom.GetFLim(this.randMaxPos.z * -1f, this.randMinPos.z * -1f);
                this._listPos.Add(new Vector3(position.x + array[XorRandom.GetILim(0, 1)], position.y + XorRandom.GetFLim(this.randMinPos.y, this.randMaxPos.y), position.z + array2[XorRandom.GetILim(0, 1)]));
            }
        }
Exemple #2
0
        public void setSmoke()
        {
            if (count <= 5)
            {
                count = 5;
            }
            _listPS  = new List <ParticleSystem>();
            _listPos = new List <Vector3>();
            for (int i = 0; i < count; i++)
            {
                _listPS.Add(Instantiate());
            }
            Vector3 position = base.transform.position;
            float   fMin     = randMinPos.x + (randMaxPos.x - randMinPos.x) * 0.8f;
            float   fMin2    = randMinPos.x + (randMaxPos.x - randMinPos.x) * 0.5f;
            float   fMin3    = randMinPos.y + (randMaxPos.y - randMinPos.y) * 0.8f;
            float   fMin4    = randMinPos.y + (randMaxPos.y - randMinPos.y) * 0.5f;

            _listPos.Add(new Vector3(position.x, position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z + randMaxPos.z));
            _listPos.Add(new Vector3(position.x + XorRandom.GetFLim(fMin, randMaxPos.x), position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z + XorRandom.GetFLim(fMin4, randMaxPos.y)));
            _listPos.Add(new Vector3(position.x - XorRandom.GetFLim(fMin, randMaxPos.x), position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z + XorRandom.GetFLim(fMin4, randMaxPos.y)));
            _listPos.Add(new Vector3(position.x + XorRandom.GetFLim(fMin2, randMaxPos.x), position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z - XorRandom.GetFLim(fMin3, randMaxPos.y)));
            _listPos.Add(new Vector3(position.x - XorRandom.GetFLim(fMin2, randMaxPos.x), position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z - XorRandom.GetFLim(fMin3, randMaxPos.y)));
            float[] array  = new float[2];
            float[] array2 = new float[2];
            for (int j = 0; j < count - 5; j++)
            {
                array[0]  = XorRandom.GetFLim(randMinPos.x, randMaxPos.x);
                array[1]  = XorRandom.GetFLim(randMaxPos.x * -1f, randMinPos.x * -1f);
                array2[0] = XorRandom.GetFLim(randMinPos.z, randMaxPos.z);
                array2[1] = XorRandom.GetFLim(randMaxPos.z * -1f, randMinPos.z * -1f);
                _listPos.Add(new Vector3(position.x + array[XorRandom.GetILim(0, 1)], position.y + XorRandom.GetFLim(randMinPos.y, randMaxPos.y), position.z + array2[XorRandom.GetILim(0, 1)]));
            }
        }
Exemple #3
0
 private void FixedUpdate()
 {
     if (this._isShake)
     {
         if (this._fShakeIntensity > 0f)
         {
             if (this._isShakePos)
             {
                 base.get_transform().set_position(this._vOriginPosition + XorRandom.GetInsideUnitSphere(this._fShakeIntensity));
             }
             if (this._isShakeRot)
             {
                 base.get_transform().set_rotation(new Quaternion(this._quaOriginRotation.x + XorRandom.GetFLim(-this._fShakeIntensity, this._fShakeIntensity) * 2f, this._quaOriginRotation.y + XorRandom.GetFLim(-this._fShakeIntensity, this._fShakeIntensity) * 2f, this._quaOriginRotation.z + XorRandom.GetFLim(-this._fShakeIntensity, this._fShakeIntensity) * 2f, this._quaOriginRotation.w + XorRandom.GetFLim(-this._fShakeIntensity, this._fShakeIntensity) * 2f));
             }
             this._fShakeIntensity -= this._fShakeDecay;
         }
         else
         {
             Observable.TimerFrame(2, FrameCountType.EndOfFrame).Subscribe(delegate(long _)
             {
                 this._isShake = false;
                 if (this._actCallback != null)
                 {
                     this._actCallback.Invoke();
                 }
             });
         }
     }
 }
    public static float GetF01()
    {
        sbyte sB = XorRandom.GetSB();
        float a  = (float)sB / 127f;

        return(Mathe.MinMax2F01(a));
    }
 public void Play()
 {
     _disAnimation = Observable.Interval(TimeSpan.FromSeconds(0.10000000149011612)).Subscribe(delegate
     {
         base.transform.LTRotateLocal(Vector3.forward * XorRandom.GetFLim(0.45f, 3.3f), 0.1f);
     });
 }
 public bool Reset()
 {
     this._isEyeOpen           = true;
     this._fEyeInterval        = XorRandom.GetFLim(1f, 3f);
     this._uiSprite.spriteName = "mini_08_a_01";
     return(true);
 }
 public void Play()
 {
     this._disAnimation = Observable.Interval(TimeSpan.FromSeconds(0.10000000149011612)).Subscribe(delegate(long x)
     {
         base.get_transform().LTRotateLocal(Vector3.get_forward() * XorRandom.GetFLim(0.45f, 3.3f), 0.1f);
     });
 }
Exemple #8
0
 private void FixedUpdate()
 {
     if (!_isShake)
     {
         return;
     }
     if (_fShakeIntensity > 0f)
     {
         if (_isShakePos)
         {
             base.transform.position = _vOriginPosition + XorRandom.GetInsideUnitSphere(_fShakeIntensity);
         }
         if (_isShakeRot)
         {
             base.transform.rotation = new Quaternion(_quaOriginRotation.x + XorRandom.GetFLim(0f - _fShakeIntensity, _fShakeIntensity) * 2f, _quaOriginRotation.y + XorRandom.GetFLim(0f - _fShakeIntensity, _fShakeIntensity) * 2f, _quaOriginRotation.z + XorRandom.GetFLim(0f - _fShakeIntensity, _fShakeIntensity) * 2f, _quaOriginRotation.w + XorRandom.GetFLim(0f - _fShakeIntensity, _fShakeIntensity) * 2f);
         }
         _fShakeIntensity -= _fShakeDecay;
     }
     else
     {
         Observable.TimerFrame(2, FrameCountType.EndOfFrame).Subscribe(delegate
         {
             _isShake = false;
             if (_actCallback != null)
             {
                 _actCallback();
             }
         });
     }
 }
    public static float GetF11()
    {
        float num = XorRandom.GetF01();

        num *= 2f;
        num -= 1f;
        return(Mathe.MinMax2F11(num));
    }
Exemple #10
0
        private ShipModel GetTargetShip(DeckModel model)
        {
            List <ShipModel> list = (from x in model.GetShips()
                                     where !x.IsEscaped()
                                     select x).ToList();

            return(list[XorRandom.GetILim(0, list.Count - 1)]);
        }
Exemple #11
0
 private void CalcOneAttackDamage()
 {
     for (int i = 0; i < oneAttackDamage.Length - 1; i++)
     {
         oneAttackDamage[i] = XorRandom.GetILim(0, (int)((float)_nHPDifFmNow2End * 0.5f));
         _nHPDifFmNow2End  -= oneAttackDamage[i];
     }
     oneAttackDamage[oneAttackDamage.Length - 1] = _nHPDifFmNow2End;
 }
Exemple #12
0
 private void CalcOneAttackDamage()
 {
     for (int i = 0; i < this.oneAttackDamage.Length - 1; i++)
     {
         this.oneAttackDamage[i] = XorRandom.GetILim(0, (int)((float)this._nHPDifFmNow2End * 0.5f));
         this._nHPDifFmNow2End  -= this.oneAttackDamage[i];
     }
     this.oneAttackDamage[this.oneAttackDamage.Length - 1] = this._nHPDifFmNow2End;
 }
Exemple #13
0
 private void OnPartnerShipSelectFinished(ShipModelMst partnerShip)
 {
     XorRandom.Init(0u);
     StartupTaskManager.GetData().PartnerShipID = partnerShip.MstId;
     Observable.TimerFrame(10, FrameCountType.EndOfFrame).Subscribe(delegate
     {
         _ctrlPartnerSelect.Hide();
         StartupTaskManager.ReqMode(StartupTaskManager.StartupTaskManagerMode.PictureStoryShow);
     });
 }
Exemple #14
0
        protected void ProcessEachIconConsumingAnimation(GameObject iconObj)
        {
            Animation component = iconObj.GetComponent <Animation>();

            component.Play("SupplyIconEnd");
            UISprite component2 = ((Component)iconObj.transform.FindChild("IconObject/Icon")).GetComponent <UISprite>();

            GameObjectExtensionMethods.RotatoTo(rot: (new Vector3[2]
            {
                new Vector3(0f, 0f, XorRandom.GetILim(180, 270)),
                new Vector3(0f, 0f, XorRandom.GetILim(-270, -180))
            })[XorRandom.GetILim(0, 1)], obj: component2.transform.gameObject, time: 1f, callback: null);
        }
 public static bool Init(uint _seed = 0u)
 {
     if (_seed != 0u)
     {
         XorRandom.xor = _seed;
     }
     else
     {
         XorRandom.xor = XorRandom.SeedFromDate();
     }
     XorRandom.SetSeed();
     return(true);
 }
        protected void ProcessEachIconConsumingAnimation(GameObject iconObj)
        {
            Animation component = iconObj.GetComponent <Animation>();

            component.Play("SupplyIconEnd");
            UISprite component2 = iconObj.get_transform().FindChild("IconObject/Icon").GetComponent <UISprite>();

            Vector3[] array = new Vector3[]
            {
                new Vector3(0f, 0f, (float)XorRandom.GetILim(180, 270)),
                new Vector3(0f, 0f, (float)XorRandom.GetILim(-270, -180))
            };
            component2.get_transform().get_gameObject().RotatoTo(array[XorRandom.GetILim(0, 1)], 1f, null);
        }
        private void compWaitAnimation()
        {
            int iLim = XorRandom.GetILim(1, 100);

            _anim.Stop();
            if (iLim >= 75)
            {
                _anim.Play("miniCharacter_wait1");
            }
            else
            {
                _anim.Play("miniCharacter_wait2");
            }
        }
Exemple #18
0
        private void compWaitAnimation()
        {
            int iLim = XorRandom.GetILim(1, 100);

            _anim.Stop();
            if (iLim >= 75)
            {
                _anim.Play("AlbumChara_Wait3");
            }
            else
            {
                _anim.Play("AlbumChara_Wait2");
            }
        }
Exemple #19
0
        private void animationFinished()
        {
            _anim.Stop();
            int iLim = XorRandom.GetILim(1, 2);

            if (iLim == 1)
            {
                _anim.Play("AlbumChara_In1");
            }
            else
            {
                _anim.Play("AlbumChara_In2");
            }
        }
 public Fairy(Transform parent, string objName)
 {
     this._isEyeOpen    = true;
     this._fEyeInterval = XorRandom.GetFLim(1f, 3f);
     Util.FindParentToChild <UISprite>(ref this._uiSprite, parent, objName);
     this._uiSprite.type          = UIBasicSprite.Type.Filled;
     this._uiSprite.flip          = UIBasicSprite.Flip.Nothing;
     this._uiSprite.fillDirection = UIBasicSprite.FillDirection.Vertical;
     this._uiSprite.fillAmount    = 0.55f;
     this._uiSprite.invert        = true;
     this._uiSprite.spriteName    = "mini_08_a_01";
     this._dicFairyPos            = new Dictionary <bool, Vector3>();
     this._dicFairyPos.Add(false, Vector3.get_down() * 20f);
     this._dicFairyPos.Add(true, Vector3.get_up() * 40f);
 }
Exemple #21
0
        private void Shake()
        {
            int     count     = 15;
            Vector3 originPos = _uiCompassGirl.transform.localPosition;

            Observable.IntervalFrame(1).Take(count).Subscribe((Action <long>) delegate(long x)
            {
                float num = Mathe.Rate(0f, 15f, x);
                _uiCompassGirl.transform.localPosition = new Vector3(originPos.x + XorRandom.GetF11() * 5f * num, originPos.y + XorRandom.GetF11() * 5f * num, 0f);
            }, (Action) delegate
            {
                _uiCompassGirl.transform.localPosition = originPos;
            })
            .AddTo(base.gameObject);
        }
Exemple #22
0
 public Fairy(Transform parent, string objName)
 {
     _isEyeOpen    = true;
     _fEyeInterval = XorRandom.GetFLim(1f, 3f);
     Util.FindParentToChild(ref _uiSprite, parent, objName);
     _uiSprite.type          = UIBasicSprite.Type.Filled;
     _uiSprite.flip          = UIBasicSprite.Flip.Nothing;
     _uiSprite.fillDirection = UIBasicSprite.FillDirection.Vertical;
     _uiSprite.fillAmount    = 0.55f;
     _uiSprite.invert        = true;
     _uiSprite.spriteName    = "mini_08_a_01";
     _dicFairyPos            = new Dictionary <bool, Vector3>();
     _dicFairyPos.Add(key: false, Vector3.down * 20f);
     _dicFairyPos.Add(key: true, Vector3.up * 40f);
 }
        private void _createExplosion()
        {
            _listBombCritical = new List <bool>();
            _listExplosion    = new List <ParticleSystem>();
            _listMiss         = new List <ParticleSystem>();
            Vector3 position5 = default(Vector3);

            for (int i = 0; i < _defenders.Count; i++)
            {
                DamageModel attackDamage = _clsShelling.GetAttackDamage(_defenders[i].TmpId);
                int         key          = (!attackDamage.GetProtectEffect()) ? _defenders[i].Index : _defenders[i].Index;
                if (attackDamage.GetHitState() != 0)
                {
                    _isAttack = true;
                    ParticleSystem val = (!((UnityEngine.Object)BattleTaskManager.GetParticleFile().explosionAerial == null)) ? UnityEngine.Object.Instantiate <ParticleSystem>(BattleTaskManager.GetParticleFile().explosionAerial) : BattleTaskManager.GetParticleFile().explosionAerial;
                    ((Component)val).SetActive(isActive: true);
                    ((Component)val).transform.parent = BattleTaskManager.GetBattleField().transform;
                    Transform transform = ((Component)val).transform;
                    Vector3   position  = _eBattleship[key].transform.position;
                    float     x         = position.x;
                    Vector3   position2 = _eBattleship[key].transform.position;
                    transform.position = new Vector3(x, 3f, position2.z);
                    _listExplosion.Add(val);
                    _listBombCritical.Add((attackDamage.GetHitState() == BattleHitStatus.Clitical) ? true : false);
                }
                else
                {
                    int       iLim  = XorRandom.GetILim(0, 2);
                    Vector3[] array = new Vector3[3]
                    {
                        new Vector3(5f, 0f, -5f),
                        new Vector3(-3f, 0f, 5f),
                        new Vector3(4f, 0f, -7f)
                    };
                    Vector3 position3 = _eBattleship[key].transform.position;
                    float   x2        = position3.x + array[iLim].x;
                    Vector3 position4 = _eBattleship[key].transform.position;
                    position5 = new Vector3(x2, 0f, position4.z + array[iLim].z);
                    ParticleSystem val2 = (!((UnityEngine.Object)BattleTaskManager.GetParticleFile().splashMiss == null)) ? UnityEngine.Object.Instantiate <ParticleSystem>(BattleTaskManager.GetParticleFile().splashMiss) : BattleTaskManager.GetParticleFile().splashMiss;
                    ((Component)val2).SetActive(isActive: true);
                    ((Component)val2).transform.parent   = BattleTaskManager.GetBattleField().transform;
                    ((Component)val2).transform.position = position5;
                    val2.Stop();
                    _listMiss.Add(val2);
                }
            }
        }
 public void Update(bool isDecide)
 {
     if (isDecide && this._fEyeInterval >= 0f && (this._uiSprite.spriteName == "mini_08_a_01" || this._uiSprite.spriteName == "mini_08_a_02"))
     {
         this._uiSprite.spriteName = ((!this._isEyeOpen) ? "mini_08_a_04" : "mini_08_a_03");
     }
     this._fEyeInterval -= Time.get_deltaTime();
     if (this._fEyeInterval <= 0f)
     {
         this._isEyeOpen = !this._isEyeOpen;
         if (isDecide)
         {
             this._uiSprite.spriteName = ((!this._isEyeOpen) ? "mini_08_a_04" : "mini_08_a_03");
         }
         else
         {
             this._uiSprite.spriteName = ((!this._isEyeOpen) ? "mini_08_a_02" : "mini_08_a_01");
         }
         this._fEyeInterval = ((!this._isEyeOpen) ? XorRandom.GetFLim(0.1f, 0.5f) : XorRandom.GetFLim(0.5f, 1.5f));
     }
 }
Exemple #25
0
 public void Update(bool isDecide)
 {
     if (isDecide && _fEyeInterval >= 0f && (_uiSprite.spriteName == "mini_08_a_01" || _uiSprite.spriteName == "mini_08_a_02"))
     {
         _uiSprite.spriteName = ((!_isEyeOpen) ? "mini_08_a_04" : "mini_08_a_03");
     }
     _fEyeInterval -= Time.deltaTime;
     if (_fEyeInterval <= 0f)
     {
         _isEyeOpen = !_isEyeOpen;
         if (isDecide)
         {
             _uiSprite.spriteName = ((!_isEyeOpen) ? "mini_08_a_04" : "mini_08_a_03");
         }
         else
         {
             _uiSprite.spriteName = ((!_isEyeOpen) ? "mini_08_a_02" : "mini_08_a_01");
         }
         _fEyeInterval = ((!_isEyeOpen) ? XorRandom.GetFLim(0.1f, 0.5f) : XorRandom.GetFLim(0.5f, 1.5f));
     }
 }
Exemple #26
0
 public static bool CreateSaveDataNInitialize(string admiralName, int partnerShipId, DifficultKind iType, bool isInherit)
 {
     if (_clsTitleManager == null)
     {
         _clsTitleManager = new TitleManager();
     }
     if (!isInherit)
     {
         new Api_req_Member().PurgeUserData();
         _clsTitleManager.CreateSaveData(admiralName, partnerShipId, iType);
     }
     else
     {
         _clsTitleManager.CreateSaveDataPlus(admiralName, partnerShipId, iType);
     }
     XorRandom.Init(0u);
     TimeScale(1f);
     AppInitializeManager.IsInitialize = true;
     _clsTitleManager = null;
     return(true);
 }
Exemple #27
0
        private void onMiniCharacterEL()
        {
            if (!this.isControl)
            {
                return;
            }
            this.isControl = false;
            this._anim.Stop();
            int iLim = XorRandom.GetILim(1, 100);

            if (iLim >= 85)
            {
                int iLim2 = XorRandom.GetILim(1, 5);
                if (iLim >= 3)
                {
                    this._anim.Play("AlbumChara_Up1");
                }
                else
                {
                    this._anim.Play("AlbumChara_Up2");
                }
            }
            else
            {
                int iLim3 = XorRandom.GetILim(1, 100);
                if (iLim >= 50)
                {
                    this._anim.Play("AlbumChara_Normal1");
                }
                else if (iLim >= 20)
                {
                    this._anim.Play("AlbumChara_Normal2");
                }
                else
                {
                    this._anim.Play("AlbumChara_Normal3");
                }
            }
        }
 private void _createExplosion()
 {
     this._listBombCritical = new List <bool>();
     this._listExplosion    = new List <ParticleSystem>();
     this._listMiss         = new List <ParticleSystem>();
     for (int i = 0; i < this._defenders.get_Count(); i++)
     {
         DamageModel attackDamage = this._clsShelling.GetAttackDamage(this._defenders.get_Item(i).TmpId);
         int         num          = (!attackDamage.GetProtectEffect()) ? this._defenders.get_Item(i).Index : this._defenders.get_Item(i).Index;
         if (attackDamage.GetHitState() != BattleHitStatus.Miss)
         {
             this._isAttack = true;
             ParticleSystem particleSystem = (!(BattleTaskManager.GetParticleFile().explosionAerial == null)) ? Object.Instantiate <ParticleSystem>(BattleTaskManager.GetParticleFile().explosionAerial) : BattleTaskManager.GetParticleFile().explosionAerial;
             particleSystem.SetActive(true);
             particleSystem.get_transform().set_parent(BattleTaskManager.GetBattleField().get_transform());
             particleSystem.get_transform().set_position(new Vector3(this._eBattleship.get_Item(num).get_transform().get_position().x, 3f, this._eBattleship.get_Item(num).get_transform().get_position().z));
             this._listExplosion.Add(particleSystem);
             this._listBombCritical.Add(attackDamage.GetHitState() == BattleHitStatus.Clitical);
         }
         else
         {
             int       iLim  = XorRandom.GetILim(0, 2);
             Vector3[] array = new Vector3[]
             {
                 new Vector3(5f, 0f, -5f),
                 new Vector3(-3f, 0f, 5f),
                 new Vector3(4f, 0f, -7f)
             };
             Vector3        position        = new Vector3(this._eBattleship.get_Item(num).get_transform().get_position().x + array[iLim].x, 0f, this._eBattleship.get_Item(num).get_transform().get_position().z + array[iLim].z);
             ParticleSystem particleSystem2 = (!(BattleTaskManager.GetParticleFile().splashMiss == null)) ? Object.Instantiate <ParticleSystem>(BattleTaskManager.GetParticleFile().splashMiss) : BattleTaskManager.GetParticleFile().splashMiss;
             particleSystem2.SetActive(true);
             particleSystem2.get_transform().set_parent(BattleTaskManager.GetBattleField().get_transform());
             particleSystem2.get_transform().set_position(position);
             particleSystem2.Stop();
             this._listMiss.Add(particleSystem2);
         }
     }
 }
Exemple #29
0
 public static bool InitSystems()
 {
     XorRandom.Init(0u);
     TimeScale(1f);
     return(true);
 }
Exemple #30
0
        public async Task <Dictionary <string, PlotlyData> > Read(SwitchReader reader, int sampleRate = 1, bool disableNormalization = false,
                                                                  DateTime?minimumDate = null, double?minimumFitness = null, IActivityLogger activityLogger = null)
        {
            minimumDate     = minimumDate ?? DateTime.MinValue;
            _activityLogger = activityLogger;

            var    data = new Dictionary <string, PlotlyData>();
            var    rand = new XorRandom();
            string line;
            int    counter = 0;

            //todo: chart bind progress
            //_activityLogger?.Add($"Processing: ", counter);
            //_activityLogger?.ShowMessageAlways();

            while ((line = await reader.ReadLineAsync()) != null)
            {
                if (sampleRate > 1 && rand.Next(1, sampleRate) != 1)
                {
                    continue;
                }

                try
                {
                    var split = line.Split(',').Select(s => s.Trim()).ToArray();
                    var time  = DateTime.Parse(split[0].Substring(0, 24));

                    if (time < minimumDate)
                    {
                        continue;
                    }

                    for (int i = 1; i < split.Length; i++)
                    {
                        var item = split[i];

                        if (item.Contains(": ") && !item.StartsWith("Start:") && !item.StartsWith("End:"))
                        {
                            var pair = item.Split(new[] { ": " }, StringSplitOptions.RemoveEmptyEntries);
                            if (!double.TryParse(pair[1], out var parsed))
                            {
                                continue;
                            }
                            if (!data.ContainsKey(pair[0]))
                            {
                                data.Add(pair[0], new PlotlyData {
                                    Name = pair[0]
                                });
                            }
                            data[pair[0]].X.Add(time.ToString("yyyy-MM-dd HH:mm:ss.ffff"));
                            data[pair[0]].Y.Add(double.Parse(pair[1]));
                            data[pair[0]].Text.Add(pair[1]);
                        }
                    }
                    //counter++;
                    //if (counter % 1000 == 0)
                    //{
                    //_activityLogger?.Add($"Processing: ", counter);
                    //_activityLogger?.ShowMessageAlways();
                    //}
                }
                catch (Exception)
                {
                    //todo: feedback bad data but do not fail
                    Console.WriteLine("Failed to parse:" + line);
                }
            }

            if (minimumFitness.HasValue)
            {
                var fitness = data.Last().Value;

                var removing = new List <int>();
                for (int i = 0; i < fitness.Y.Count(); i++)
                {
                    if (fitness.Y[i] < minimumFitness)
                    {
                        removing.Add(i);
                    }
                }
                foreach (var index in removing.OrderByDescending(o => o))
                {
                    foreach (var item in data.Where(d => d.Value.Y.Any()))
                    {
                        item.Value.Y.RemoveAt(index);
                        item.Value.X.RemoveAt(index);
                        item.Value.Text.RemoveAt(index);
                    }
                }
            }

            if (!disableNormalization)
            {
                var fitness  = data.Last().Value;
                var nonEmpty = data.Take(data.Count() - 1).Where(d => d.Value.Y.Any());

                var max = fitness.Y.Max();
                var min = fitness.Y.Min();

                var normalizer = new SharpLearning.FeatureTransformations.Normalization.LinearNormalizer();

                foreach (var list in nonEmpty)
                {
                    var oldMax = list.Value.Y.Max();
                    var oldMin = list.Value.Y.Min();
                    for (int i = 0; i < list.Value.Y.Count(); i++)
                    {
                        list.Value.Y[i] = normalizer.Normalize(min, max, oldMin, oldMax, list.Value.Y[i]);
                    }
                }

                data = nonEmpty.Concat(new[] { data.Last() }).ToDictionary(k => k.Key, v => v.Value);
            }

            return(data);
        }