Exemplo n.º 1
0
    static private void CreateSkillStats(StatsHolder statsHolder)
    {
        TextAsset csvText = (TextAsset)AssetDatabase.LoadAssetAtPath(DATABASE_FOLDER + "/CSV/database - skill.csv", typeof(TextAsset));
        CSVFile   csvFile = new CSVFile(csvText.text);

        AssetDatabase.CreateFolder(DATABASE_FOLDER + "/Asset", "Skill");

        int csvCount = csvFile.length;

        for (int i = 0; i < csvCount; i++)
        {
            string id = csvFile.Get <string>(i, "ID");

            if (string.IsNullOrEmpty(id))
            {
                continue;
            }

            SkillStats c_prefab = ScriptableObjectUtility.CreateAsset <SkillStats>(DATABASE_FOLDER + "/Asset/Skill/", "[SkillStat] " + id);
            EditorUtility.SetDirty(c_prefab);

            c_prefab.id    = id;
            c_prefab.label = csvFile.Get <string>(i, "Label");

            c_prefab.parameter_1 = csvFile.Get <float>(i, "Parameter 1");
            c_prefab.parameter_2 = csvFile.Get <float>(i, "Parameter 2");
            c_prefab.parameter_3 = csvFile.Get <float>(i, "Parameter 3");
            c_prefab.parameter_4 = csvFile.Get <float>(i, "Parameter 4");

            statsHolder.stpObjectHolder.Add(c_prefab);
        }
    }
Exemplo n.º 2
0
 public void AddEnemy(StatsHolder enemy)
 {
     if (this.enemies != null)
     {
         this.enemies.Add(enemy);
     }
 }
Exemplo n.º 3
0
    public static StatsHolder Minion()
    {
        StatsHolder stats = new StatsHolder("Minion", 2.0f, 0.5f, 1.0f, 0.5f, 0.5f, Color.black);

        stats.requiredKill = false;
        return(stats);
    }
Exemplo n.º 4
0
    private void Start()
    {
        stats = GetComponent <StatsHolder>();
        stats.OnZeroHealth = OnDeath;

        weapsys = GetComponent <WeaponSystem>();
    }
    private void Start()
    {
        stats = GetComponent <StatsHolder>();
        stats.OnZeroHealth = OnDeath;

        GameManager.instance.enemiesCounter++;
    }
Exemplo n.º 6
0
    public static StatsHolder RangedSpawner()
    {
        StatsHolder stats = new StatsHolder("Mad Spawner", 10.0f, 1.0f, 3.0f, 400.0f, 3.0f, Color.grey);

        stats.attackDelay = 0.6f;
        stats.projectile  = RangedCirclingMinon();
        return(stats);
    }
Exemplo n.º 7
0
    public static StatsHolder SmallBomber()
    {
        StatsHolder stats = new StatsHolder("Small Bomber", 1.5f, 7.5f, 0.1f, 0.1f, 1.0f, new Color(1.0f, 0.6f, 0.2f, 1.0f));

        stats.angularSpeed = 20f;
        stats.selfDestruct = true;
        return(stats);
    }
Exemplo n.º 8
0
    public static StatsHolder RangedCirclingMinon()
    {
        StatsHolder stats = new StatsHolder("CirclingMinion", 4.0f, 2.0f, 1.4f, 10.0f, 0.5f, Color.white);

        stats.circlingSpeed = -70f;
        stats.requiredKill  = false;
        return(stats);
    }
Exemplo n.º 9
0
    static private void CreateTowerStats(StatsHolder statsHolder)
    {
        TextAsset csvText = (TextAsset)AssetDatabase.LoadAssetAtPath(DATABASE_FOLDER + "/CSV/database - tower.csv", typeof(TextAsset));

        UnityEngine.Object[] rawSpriteSheet = AssetDatabase.LoadAllAssetsAtPath(TOWER_SPRITE_PATH);

        var sprteSheet = rawSpriteSheet.Where(q => q is Sprite).Cast <Sprite>().ToArray();


        CSVFile csvFile = new CSVFile(csvText.text);

        AssetDatabase.CreateFolder(DATABASE_FOLDER + "/Asset", "Tower");

        int csvCount = csvFile.length;

        for (int i = csvCount - 1; i >= 0; i--)
        {
            string id = csvFile.Get <string>(i, "ID");

            if (string.IsNullOrEmpty(id))
            {
                continue;
            }

            TowerStats c_prefab = ScriptableObjectUtility.CreateAsset <TowerStats>(DATABASE_FOLDER + "/Asset/Tower/", "[TowerStat] " + id);
            EditorUtility.SetDirty(c_prefab);

            c_prefab.id    = id;
            c_prefab.label = csvFile.Get <string>(i, "Label");
            c_prefab.tag   = csvFile.Get <string>(i, "Tag");

            c_prefab.hp    = csvFile.Get <float>(i, "HP");
            c_prefab.level = csvFile.Get <int>(i, "Level");
            c_prefab.atk   = csvFile.Get <float>(i, "ATK");
            c_prefab.spd   = csvFile.Get <float>(i, "SPD");
            c_prefab.range = csvFile.Get <float>(i, "RANGE");
            c_prefab.cost  = csvFile.Get <int>(i, "COST");
            c_prefab.value = c_prefab.cost;

            string upgradePath = csvFile.Get <string>(i, "Update Path");
            if (!string.IsNullOrEmpty(upgradePath))
            {
                string[] upgradePathArray = upgradePath.Split(new string[] { "," }, System.StringSplitOptions.None);
                c_prefab = UpdateTowerUpgradePath(c_prefab, statsHolder, upgradePathArray);
            }

            string rawSkills = csvFile.Get <string>(i, "Skill");
            if (!string.IsNullOrEmpty(rawSkills))
            {
                string[] skillArray = rawSkills.Split(new string[] { "," }, System.StringSplitOptions.None);
                c_prefab.skills = GetSkillFromIDs(statsHolder, skillArray);
            }

            c_prefab.sprite = UtilityMethod.LoadSpriteFromMulti(sprteSheet, csvFile.Get <string>(i, "Sprite ID"));

            statsHolder.stpObjectHolder.Add(c_prefab);
        }
    }
Exemplo n.º 10
0
    public static StatsHolder ZigZag()
    {
        StatsHolder stats = new StatsHolder("ZigZag", 0.5f, 2.5f, 1.0f, 100.0f, 1.0f, Color.white);

        stats.angularSpeed = 70f;
        stats.zigZag       = true;
        stats.zigZagAngle  = 90;
        return(stats);
    }
Exemplo n.º 11
0
    static private void CreateMonsterStats(StatsHolder statsHolder)
    {
        TextAsset csvText = (TextAsset)AssetDatabase.LoadAssetAtPath(DATABASE_FOLDER + "/CSV/database - monster.csv", typeof(TextAsset));
        CSVFile   csvFile = new CSVFile(csvText.text);

        AssetDatabase.CreateFolder(DATABASE_FOLDER + "/Asset", "Monster");

        string MonsterAnimatorPath = "Assets/Main/Animation/Monster/{0}/Animator.overrideController";

        int csvCount = csvFile.length;

        for (int i = csvCount - 1; i >= 0; i--)
        {
            string id = csvFile.Get <string>(i, "ID");

            if (string.IsNullOrEmpty(id))
            {
                continue;
            }

            MonsterStats c_prefab = ScriptableObjectUtility.CreateAsset <MonsterStats>(DATABASE_FOLDER + "/Asset/Monster/", "[MonsterStat] " + id);
            EditorUtility.SetDirty(c_prefab);

            c_prefab.id       = id;
            c_prefab.label    = csvFile.Get <string>(i, "Label");
            c_prefab.strategy = (VariableFlag.Strategy)csvFile.Get <int>(i, "Strategy");
            c_prefab.value    = csvFile.Get <float>(i, "Value");

            c_prefab.hp        = csvFile.Get <int>(i, "HP");
            c_prefab.atk       = csvFile.Get <float>(i, "ATK");
            c_prefab.spd       = csvFile.Get <float>(i, "SPD");
            c_prefab.range     = csvFile.Get <int>(i, "RANGE");
            c_prefab.moveSpeed = csvFile.Get <float>(i, "Move Speed");

            c_prefab.avgPrize  = csvFile.Get <int>(i, "Prize");
            c_prefab.sprite_id = csvFile.Get <string>(i, "Sprite ID");

            string rawSkills = csvFile.Get <string>(i, "Skill");
            if (!string.IsNullOrEmpty(rawSkills))
            {
                string[] skillArray = rawSkills.Split(new string[] { "," }, System.StringSplitOptions.None);
                c_prefab.skills = GetSkillFromIDs(statsHolder, skillArray);
            }

            RuntimeAnimatorController animator = AssetDatabase.LoadAssetAtPath(string.Format(MonsterAnimatorPath, c_prefab.sprite_id), typeof(AnimatorOverrideController)) as RuntimeAnimatorController;
            if (animator != null)
            {
                c_prefab.animator = animator;
            }

            statsHolder.stpObjectHolder.Add(c_prefab);
        }
    }
Exemplo n.º 12
0
    public static StatsHolder RangedCirclingEnemy(bool clockwise)
    {
        StatsHolder stats = new StatsHolder("Shooting Shark", 3.0f, 1.0f, 2.5f, 50.0f, 1.2f, new Color(1.0f, 0.0f, 1.0f, 1.0f));

        if (clockwise)
        {
            stats.circlingSpeed = -30f;
        }
        else
        {
            stats.circlingSpeed = 30f;
        }
        return(stats);
    }
Exemplo n.º 13
0
    public static StatsHolder Rotator(bool clockwise)
    {
        StatsHolder stats = new StatsHolder("Rotator", 0.7f, 2.5f, 1.0f, 100.0f, 0.7f, Color.blue);

        if (clockwise)
        {
            stats.angularSpeed = -50f;
        }
        else
        {
            stats.angularSpeed = 50f;
        }
        return(stats);
    }
Exemplo n.º 14
0
    public void SetStats(StatsHolder stats)
    {
        transform.name     = stats.Name;
        this.circlingSpeed = stats.circlingSpeed;
        this.selfDestruct  = stats.selfDestruct;
        this.invunerable   = stats.invunerable;
        if (invunerable)         //Don't show healthbar for invunerable units (projectiles)
        {
            Destroy(UnityUtils.RecursiveFind(transform, "HealthBar").gameObject);
        }
        MoveTo(new RadialPosition(stats.spawnRadius, stats.spawnAngle));
        MovementSpeed     = stats.MovementSpeed;
        this.angularSpeed = stats.angularSpeed;
        Damage            = stats.Damage;
        Range             = stats.Range;
        Health            = stats.Health;
        MaxHealth         = stats.Health;
        Scale             = stats.Scale;
        Transform sprite = transform.Find("Sprite");

        sprite.transform.localScale *= stats.Scale;
        if (stats.Scale > 1)
        {
            Transform canvas = transform.Find("Canvas");
            canvas.localPosition = new Vector3(canvas.localPosition.x, canvas.localPosition.y * stats.Scale * 0.8f, canvas.localPosition.z);
        }
        if (stats.projectile == null)
        {
            this.projectile = EnemyFactory.Projectile(this.Damage);
        }
        else
        {
            this.projectile = stats.projectile;
        }
        this.attackFrequency = stats.attackDelay;
        this.zigZag          = stats.zigZag;
        if (stats.angularSpeed > 0)
        {
            this.zigZagAngleLow  = stats.spawnAngle;
            this.zigZagAngleHigh = stats.spawnAngle + stats.zigZagAngle;
        }
        else
        {
            this.zigZagAngleHigh = stats.spawnAngle;
            this.zigZagAngleLow  = stats.spawnAngle - stats.zigZagAngle;
        }
        colorModifier.SetDefaultColor(stats.Color);
        colorModifier.SetSelectedColor(Parameters.ENEMY_ATTACK_COLOR);
    }
Exemplo n.º 15
0
    static private SkillStats[] GetSkillFromIDs(StatsHolder statsHolder, string[] skillArray)
    {
        SkillStats[] skillStats = new SkillStats[skillArray.Length];

        for (int k = 0; k < skillArray.Length; k++)
        {
            SkillStats findObject = statsHolder.FindObject <SkillStats>(skillArray[k]);

            if (findObject != null)
            {
                skillStats[k] = findObject;
            }
        }

        return(skillStats);
    }
Exemplo n.º 16
0
        public string GetMessage(StatsHolder stat)
        {
            List <string> possibleAnswers = new List <string>(regularMessages);

            foreach (var j in specialMessages)
            {
                for (int i = 0; i < (int)StatsHolder.Stat.LAST_STAT; ++i)
                {
                    if (i == (int)j.linkedStat)
                    {
                        possibleAnswers.Add(j.GetAnswerInRange(stat.GetStatValue(j.linkedStat)));
                    }
                }
            }

            return(possibleAnswers[Random.Range(0, possibleAnswers.Count)]);
        }
Exemplo n.º 17
0
    static private TowerStats UpdateTowerUpgradePath(TowerStats c_prefab, StatsHolder statsHolder, string[] upgradePathArray)
    {
        c_prefab.upgrade_path = new TowerStats[upgradePathArray.Length];

        for (int k = 0; k < upgradePathArray.Length; k++)
        {
            TowerStats findObject = statsHolder.FindObject <TowerStats>(upgradePathArray[k]);

            if (findObject != null)
            {
                c_prefab.upgrade_path[k] = findObject;
                findObject.AddValue(c_prefab.cost);
            }
        }

        return(c_prefab);
    }
Exemplo n.º 18
0
    public static StatsHolder Projectile(float damage)
    {
        StatsHolder stats = new StatsHolder(
            "Projectile",
            Parameters.PROJECTILE_SPEED,
            damage,
            Parameters.PROJECTILE_RANGE,
            1.0f,             //Health of projectile does not matter since they are invunerable.
            Parameters.PROJECTILE_SCALE,
            Parameters.PROJECTILE_COLOR
            );

        stats.selfDestruct = true;
        stats.invunerable  = true;
        stats.requiredKill = false;
        return(stats);
    }
Exemplo n.º 19
0
        public void SetUp(GameInputManager gameInputManager, GameUnitManager gameUnitManager, LevelDesignManager levelDesign, MapGrid mapGrid, MapBlockManager mapBlockManager,
                          STPTheme stpTheme, StatsHolder statHolder)
        {
            _gameInputManager = gameInputManager;
            _gameInputManager.OnSelectTileNode += SelectTileListener;

            _gameUnitManager    = gameUnitManager;
            _levelDesignManager = levelDesign;
            _mapGrid            = mapGrid;
            _mapBlockManager    = mapBlockManager;
            _stpTheme           = stpTheme;
            _statHolder         = statHolder;

            if (ConstructionUI != null)
            {
                ConstructionUI.TowerClickEvent += SelectTowerToBuild;
            }
        }
Exemplo n.º 20
0
 // Via deze functie kan je makkelijk de stats per character invullen.
 private static StatsHolder GetCharacterTransformStats(string character)
 {
     StatsHolder stats = new StatsHolder ();
     switch(character)
     {
         // Parrot
     case CHARACTER01:
         stats.movementSpeed = 0f;
         stats.jumpForce = 1f;
         stats.fallSpeed = 0f;
         stats.stunPower = 1f;
         stats.pushPower = 0f;
         stats.dashForce = 0f;
         break;
         // Asian Chick
     case CHARACTER02:
         stats.movementSpeed = 2f;
         stats.jumpForce = 2f;
         stats.fallSpeed = 1f;
         stats.stunPower = 0.5f;
         stats.pushPower = 0.4f;
         stats.dashForce = 3f;
         break;
     case CHARACTER03:
         stats.movementSpeed = 0f;
         stats.jumpForce = 0f;
         stats.fallSpeed = 0f;
         stats.stunPower = 0f;
         stats.pushPower = 0f;
         stats.dashForce = 0f;
         break;
     case CHARACTER04:
         stats.movementSpeed = 2f;
         stats.jumpForce = 2f;
         stats.fallSpeed = 1f;
         stats.stunPower = 0.3f;
         stats.pushPower = 0.3f;
         stats.dashForce = 2f;
         break;
     }
     return stats;
 }
Exemplo n.º 21
0
    public void StartDialog(GameObject person)
    {
        dialogWindowAlpha.Show();
        dialogAwaliable = true;

        currentStats = person.GetComponent <StatsHolder>();
        currentDI    = person.GetComponent <DialogInitializer>();

        OutputDebugInfo();

        if (!isFirstDialog)
        {
            answerText.text = welcomeMessages.GetMessage(currentStats) + '\n';
            FillQuestions();
        }
        else
        {
            FillFirstDialog();
        }
    }
Exemplo n.º 22
0
    public void InstantiateEnemyPrefab(StatsHolder stats)
    {
        GameObject initEnemy = Instantiate(preInitEnemy);

        if (!stats.predefinedPosition)
        {
            stats.spawnAngle = Random.value * 360;
        }

        initEnemy.GetComponent <Enemy> ().SetStats(
            stats
            );

        if (stats.requiredKill)
        {
            waveHandler.NofifyRequiredKillUnitSpawned();
        }

        initEnemy.name = stats.Name + numberOfEnemies;
        numberOfEnemies++;
    }
Exemplo n.º 23
0
    static private void UpdateStatsAsset()
    {
        StatsHolder statsHolder = (StatsHolder)AssetDatabase.LoadAssetAtPath(DATABASE_FOLDER + "/[Stats]Holder.asset", typeof(StatsHolder));

        if (statsHolder != null)
        {
            FileUtil.DeleteFileOrDirectory(DATABASE_FOLDER + "/Asset");
            AssetDatabase.CreateFolder(DATABASE_FOLDER, "Asset");

            statsHolder.stpObjectHolder.Clear();
            CreateSkillStats(statsHolder);
            CreateTowerStats(statsHolder);
            CreateMonsterStats(statsHolder);
        }
        else
        {
            Debug.LogError("[Stats]Holder.asset has not been created yet!");
        }

        EditorUtility.SetDirty(statsHolder);
        AssetDatabase.SaveAssets();
        AssetDatabase.Refresh();
    }
Exemplo n.º 24
0
        public void InitializeStats()
        {
            if (statsHolderPrefab == null)
            {
                return;
            }
            foreach (Stats item in Enum.GetValues(typeof(Stats)))
            {
                GameObject tmp = Instantiate(statsHolderPrefab, statsSorter.transform);
                statsSorter.items.Add(tmp.transform);
                StatsHolder holder = tmp.GetComponent <StatsHolder>();
                holder.Initialize(item, owner);
                currentStatsList.Add(tmp.GetComponent <StatsHolder>());
            }
            statsSorter.UpdateTransformPositions();

            if (currentStatsList.Count > 4)
            {
                float sizeDifference = (157.0f * currentStatsList.Count) - 700;
                AdjustScrollSize(sizeDifference);
                movementLength = sizeDifference;
            }
        }
Exemplo n.º 25
0
 private void Start()
 {
     nextFire = 0f;
     stats    = GetComponent <StatsHolder>();
 }
Exemplo n.º 26
0
 public CharDBInfo(StatsHolder transformStats)
 {
     _transformStats = transformStats;
 }
Exemplo n.º 27
0
    public static List <SubWave> GenerateWave(int numberOfEnemies)
    {
        List <SubWave> wave = new List <SubWave> ();
        SubWave        subWave;
        StatsHolder    stats;

        switch (numberOfEnemies)
        {
        case 3:
            for (int i = 0; i < 360; i += 45)
            {
                subWave                  = new SubWave(2.0f);
                stats                    = EnemyFactory.StandardEnemy();
                stats.spawnAngle         = i;
                stats.predefinedPosition = true;
                subWave.AddEnemy(stats);
                wave.Add(subWave);
            }
            break;

        case 5:
            SubWave     bigEnemySubWave = new SubWave(0.0f);
            StatsHolder bigEnemy        = EnemyFactory.SlowEnemy();
            bigEnemy.predefinedPosition = true;
            bigEnemy.spawnAngle         = 225f;
            bigEnemySubWave.AddEnemy(bigEnemy);
            wave.Add(bigEnemySubWave);
            for (int i = 0; i < 20; i++)
            {
                StatsHolder minon1 = EnemyFactory.Minion();
                minon1.spawnAngle         = 65f;
                minon1.predefinedPosition = true;
                StatsHolder minon2 = EnemyFactory.Minion();
                minon2.spawnAngle         = 45f;
                minon2.predefinedPosition = true;
                StatsHolder minon3 = EnemyFactory.Minion();
                minon3.spawnAngle         = 25f;
                minon3.predefinedPosition = true;
                SubWave sub1 = new SubWave(3.0f);
                sub1.AddEnemy(minon1);
                wave.Add(sub1);
                SubWave sub2 = new SubWave(3.0f);
                sub2.AddEnemy(minon2);
                wave.Add(sub2);
                SubWave sub3 = new SubWave(3.0f);
                sub3.AddEnemy(minon3);
                wave.Add(sub3);
            }
            break;

        case 7:
            float angle = UnityEngine.Random.value * 360;
            for (int i = 0; i < 4; i++)
            {
                subWave                  = new SubWave(0.1f);
                stats                    = EnemyFactory.Rotator(true);
                stats.spawnAngle         = angle + i * 2;
                stats.predefinedPosition = true;
                subWave.AddEnemy(stats);
                wave.Add(subWave);
            }
            subWave                  = new SubWave(2.0f);
            stats                    = EnemyFactory.Rotator(true);
            stats.spawnAngle         = angle + 8;
            stats.predefinedPosition = true;
            subWave.AddEnemy(stats);
            wave.Add(subWave);
            for (int i = 0; i < 5; i++)
            {
                subWave                  = new SubWave(0.1f);
                stats                    = EnemyFactory.Rotator(false);
                stats.spawnAngle         = (angle + 180) % 360 + i * 2;
                stats.predefinedPosition = true;
                subWave.AddEnemy(stats);
                wave.Add(subWave);
            }
            break;

        case 8:
            subWave = new SubWave(0.0f);
            for (int i = 0; i < 360; i += 45)
            {
                stats                    = EnemyFactory.Rotator(true);
                stats.spawnAngle         = i;
                stats.predefinedPosition = true;
                subWave.AddEnemy(stats);
            }
            wave.Add(subWave);
            break;

        case 11:
            subWave = new SubWave(2.0f);
            stats   = EnemyFactory.RangedSpawner();
            subWave.AddEnemy(stats);
            wave.Add(subWave);
            break;

        default:
            wave = AutoGenerateWave(numberOfEnemies);
            break;
        }

        return(wave);
    }
Exemplo n.º 28
0
        public void RiskStatisticsTest()
        {
            //    ("Testing risk measures...");

            IncrementalGaussianStatistics igs = new IncrementalGaussianStatistics();
            RiskStatistics s = new RiskStatistics();

            double[] averages = { -100.0, -1.0, 0.0, 1.0, 100.0 };
            double[] sigmas = { 0.1, 1.0, 100.0 };
            int      i, j, k, N;

            N = (int)Math.Pow(2, 16) - 1;
            double        dataMin, dataMax;
            List <double> data = new InitializedList <double>(N), weights = new InitializedList <double>(N);

            for (i = 0; i < averages.Length; i++)
            {
                for (j = 0; j < sigmas.Length; j++)
                {
                    NormalDistribution           normal     = new NormalDistribution(averages[i], sigmas[j]);
                    CumulativeNormalDistribution cumulative = new CumulativeNormalDistribution(averages[i], sigmas[j]);
                    InverseCumulativeNormal      inverseCum = new InverseCumulativeNormal(averages[i], sigmas[j]);

                    SobolRsg rng = new SobolRsg(1);
                    dataMin = double.MaxValue;
                    dataMax = double.MinValue;
                    for (k = 0; k < N; k++)
                    {
                        data[k]    = inverseCum.value(rng.nextSequence().value[0]);
                        dataMin    = Math.Min(dataMin, data[k]);
                        dataMax    = Math.Max(dataMax, data[k]);
                        weights[k] = 1.0;
                    }

                    igs.addSequence(data, weights);
                    s.addSequence(data, weights);

                    // checks
                    double calculated, expected;
                    double tolerance;

                    if (igs.samples() != N)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong number of samples\n"
                                     + "    calculated: " + igs.samples() + "\n"
                                     + "    expected:   " + N);
                    }
                    if (s.samples() != N)
                    {
                        QAssert.Fail("RiskStatistics: wrong number of samples\n"
                                     + "    calculated: " + s.samples() + "\n"
                                     + "    expected:   " + N);
                    }


                    // weightSum()
                    tolerance  = 1e-10;
                    expected   = weights.Sum();
                    calculated = igs.weightSum();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong sum of weights\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.weightSum();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong sum of weights\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // min
                    tolerance  = 1e-12;
                    expected   = dataMin;
                    calculated = igs.min();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong minimum value\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.min();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: "
                                     + "wrong minimum value\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // max
                    expected   = dataMax;
                    calculated = igs.max();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong maximum value\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.max();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: "
                                     + "wrong maximum value\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // mean
                    expected  = averages[i];
                    tolerance = (expected == 0.0 ? 1.0e-13 :
                                 Math.Abs(expected) * 1.0e-13);
                    calculated = igs.mean();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong mean value"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.mean();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong mean value"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // variance
                    expected   = sigmas[j] * sigmas[j];
                    tolerance  = expected * 1.0e-1;
                    calculated = igs.variance();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong variance"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.variance();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong variance"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // standardDeviation
                    expected   = sigmas[j];
                    tolerance  = expected * 1.0e-1;
                    calculated = igs.standardDeviation();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong standard deviation"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.standardDeviation();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong standard deviation"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // missing errorEstimate() test

                    // skewness
                    expected   = 0.0;
                    tolerance  = 1.0e-4;
                    calculated = igs.skewness();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong skewness"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.skewness();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong skewness"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // kurtosis
                    expected   = 0.0;
                    tolerance  = 1.0e-1;
                    calculated = igs.kurtosis();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong kurtosis"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.kurtosis();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong kurtosis"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // percentile
                    expected  = averages[i];
                    tolerance = (expected == 0.0 ? 1.0e-3 :
                                 Math.Abs(expected * 1.0e-3));
                    calculated = igs.gaussianPercentile(0.5);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian percentile"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianPercentile(0.5);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian percentile"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.percentile(0.5);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong percentile"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }



                    // potential upside
                    double upper_tail = averages[i] + 2.0 * sigmas[j],
                           lower_tail = averages[i] - 2.0 * sigmas[j];
                    double twoSigma   = cumulative.value(upper_tail);

                    expected  = Math.Max(upper_tail, 0.0);
                    tolerance = (expected == 0.0 ? 1.0e-3 :
                                 Math.Abs(expected * 1.0e-3));
                    calculated = igs.gaussianPotentialUpside(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian potential upside"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianPotentialUpside(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian potential upside"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.potentialUpside(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong potential upside"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // just to check that GaussianStatistics<StatsHolder> does work
                    StatsHolder h = new StatsHolder(s.mean(), s.standardDeviation());
                    GenericGaussianStatistics <StatsHolder> test = new GenericGaussianStatistics <StatsHolder>(h);
                    expected   = s.gaussianPotentialUpside(twoSigma);
                    calculated = test.gaussianPotentialUpside(twoSigma);
                    if (calculated != expected)
                    {
                        QAssert.Fail("GenericGaussianStatistics<StatsHolder> fails"
                                     + "\n  calculated: " + calculated
                                     + "\n  expected: " + expected);
                    }


                    // value-at-risk
                    expected  = -Math.Min(lower_tail, 0.0);
                    tolerance = (expected == 0.0 ? 1.0e-3 :
                                 Math.Abs(expected * 1.0e-3));
                    calculated = igs.gaussianValueAtRisk(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian value-at-risk"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianValueAtRisk(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian value-at-risk"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.valueAtRisk(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong value-at-risk"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }

                    if (averages[i] > 0.0 && sigmas[j] < averages[i])
                    {
                        // no data will miss the targets:
                        // skip the rest of this iteration
                        igs.reset();
                        s.reset();
                        continue;
                    }


                    // expected shortfall
                    expected = -Math.Min(averages[i]
                                         - sigmas[j] * sigmas[j]
                                         * normal.value(lower_tail) / (1.0 - twoSigma),
                                         0.0);
                    tolerance = (expected == 0.0 ? 1.0e-4
                                            : Math.Abs(expected) * 1.0e-2);
                    calculated = igs.gaussianExpectedShortfall(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian expected shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianExpectedShortfall(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian expected shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.expectedShortfall(twoSigma);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong expected shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // shortfall
                    expected  = 0.5;
                    tolerance = (expected == 0.0 ? 1.0e-3 :
                                 Math.Abs(expected * 1.0e-3));
                    calculated = igs.gaussianShortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianShortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.shortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // average shortfall
                    expected   = sigmas[j] / Math.Sqrt(2.0 * Const.M_PI) * 2.0;
                    tolerance  = expected * 1.0e-3;
                    calculated = igs.gaussianAverageShortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian average shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianAverageShortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong Gaussian average shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.averageShortfall(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: wrong average shortfall"
                                     + " for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // regret
                    expected   = sigmas[j] * sigmas[j];
                    tolerance  = expected * 1.0e-1;
                    calculated = igs.gaussianRegret(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian regret(" + averages[i] + ") "
                                     + "for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.gaussianRegret(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: "
                                     + "wrong Gaussian regret(" + averages[i] + ") "
                                     + "for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = s.regret(averages[i]);
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("RiskStatistics: "
                                     + "wrong regret(" + averages[i] + ") "
                                     + "for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }


                    // downsideVariance
                    expected  = s.downsideVariance();
                    tolerance = (expected == 0.0 ? 1.0e-3 :
                                 Math.Abs(expected * 1.0e-3));
                    calculated = igs.downsideVariance();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong downside variance"
                                     + "for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }
                    calculated = igs.gaussianDownsideVariance();
                    if (Math.Abs(calculated - expected) > tolerance)
                    {
                        QAssert.Fail("IncrementalGaussianStatistics: "
                                     + "wrong Gaussian downside variance"
                                     + "for N(" + averages[i] + ", "
                                     + sigmas[j] + ")\n"
                                     + "    calculated: " + calculated + "\n"
                                     + "    expected:   " + expected + "\n"
                                     + "    tolerance:  " + tolerance);
                    }

                    // downsideVariance
                    if (averages[i] == 0.0)
                    {
                        expected   = sigmas[j] * sigmas[j];
                        tolerance  = expected * 1.0e-3;
                        calculated = igs.downsideVariance();
                        if (Math.Abs(calculated - expected) > tolerance)
                        {
                            QAssert.Fail("IncrementalGaussianStatistics: "
                                         + "wrong downside variance"
                                         + "for N(" + averages[i] + ", "
                                         + sigmas[j] + ")\n"
                                         + "    calculated: " + calculated + "\n"
                                         + "    expected:   " + expected + "\n"
                                         + "    tolerance:  " + tolerance);
                        }
                        calculated = igs.gaussianDownsideVariance();
                        if (Math.Abs(calculated - expected) > tolerance)
                        {
                            QAssert.Fail("IncrementalGaussianStatistics: "
                                         + "wrong Gaussian downside variance"
                                         + "for N(" + averages[i] + ", "
                                         + sigmas[j] + ")\n"
                                         + "    calculated: " + calculated + "\n"
                                         + "    expected:   " + expected + "\n"
                                         + "    tolerance:  " + tolerance);
                        }
                        calculated = s.downsideVariance();
                        if (Math.Abs(calculated - expected) > tolerance)
                        {
                            QAssert.Fail("RiskStatistics: wrong downside variance"
                                         + "for N(" + averages[i] + ", "
                                         + sigmas[j] + ")\n"
                                         + "    calculated: " + calculated + "\n"
                                         + "    expected:   " + expected + "\n"
                                         + "    tolerance:  " + tolerance);
                        }
                        calculated = s.gaussianDownsideVariance();
                        if (Math.Abs(calculated - expected) > tolerance)
                        {
                            QAssert.Fail("RiskStatistics: wrong Gaussian downside variance"
                                         + "for N(" + averages[i] + ", "
                                         + sigmas[j] + ")\n"
                                         + "    calculated: " + calculated + "\n"
                                         + "    expected:   " + expected + "\n"
                                         + "    tolerance:  " + tolerance);
                        }
                    }

                    igs.reset();
                    s.reset();
                }
            }
        }
Exemplo n.º 29
0
 private void Start()
 {
     stats = GetComponent <StatsHolder>();
     direction.Normalize();
     direction = new Vector3(direction.x, direction.y, 0f);
 }