public IEnumerator Begin()
    {
        var applied   = false;
        var target    = new MockSheet();
        var skill     = new GameObject("item").AddComponent <MockSkillMB>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        skill.Sheet      = new MockSheet();
        skill.targeting  = targeting;
        targeting.select = (_, targets, __) => targets.Add(target);

        IEnumerator <WaitForFixedUpdate> applyCast(MockSheet _)
        {
            applied = true;
            yield break;
        }

        skill.cast.apply = applyCast;

        yield return(new WaitForEndOfFrame());

        skill.Begin();

        Assert.True(applied);
    }
Exemple #2
0
    public IEnumerator GetSheet()
    {
        var sheet = new MockSheet();
        var item  = new GameObject("item").AddComponent <MockItem>();

        yield return(new WaitForFixedUpdate());

        item.Sheet = sheet;

        Assert.AreSame(sheet, item.Sheet);
    }
Exemple #3
0
    public void ProjectileSpawnPosition()
    {
        var spawn  = new GameObject("spawn");
        var target = new MockSheet();
        var cast   = new MockCastProjectile {
            projectileSpawn = spawn.transform
        };

        spawn.transform.position = Vector3.back;

        cast.Apply(target).MoveNext();

        Assert.AreEqual(Vector3.back, cast.magazine.Projectile.transform.position);
    }
    public void RunDoSelect()
    {
        var called    = (default(MockSheet), default(List <MockSheet>), 0);
        var source    = new MockSheet();
        var list      = new List <MockSheet>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        targeting.doSelect = (s, t, c) => {
            called = (s, t, c);
            return(Enumerable.Empty <WaitForEndOfFrame>().GetEnumerator());
        };
        targeting.Select(source, list, 42).MoveNext();

        Assert.AreEqual((source, list, 42), called);
    }
Exemple #5
0
    public void DisposeProjectileWhenRoutineDone()
    {
        var disposed = null as GameObject;
        var spawn    = new GameObject("spawn");
        var target   = new MockSheet();
        var cast     = new MockCastProjectile {
            projectileSpawn = spawn.transform
        };

        cast.magazine.onDispose = o => disposed = o;

        cast.Apply(target).MoveNext();

        Assert.AreSame(cast.magazine.Projectile, disposed);
    }
Exemple #6
0
    public IEnumerator SetSkillSheet()
    {
        var sheet  = new MockSheet();
        var item   = new GameObject("item").AddComponent <MockItem>();
        var skills = new MockSkillMB[] {
            item.gameObject.AddComponent <MockSkillMB>(),
            item.gameObject.AddComponent <MockSkillMB>(),
            item.gameObject.AddComponent <MockSkillMB>(),
        };

        yield return(new WaitForEndOfFrame());

        item.Sheet = sheet;

        CollectionAssert.AreEqual(
            new MockSheet[] { sheet, sheet, sheet },
            skills.Select(s => s.Sheet)
            );
    }
    public IEnumerator ApplyEffect()
    {
        var got       = (default(MockSheet), default(MockSheet));
        var target    = new MockSheet();
        var skill     = new GameObject("item").AddComponent <MockSkillMB>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        skill.Sheet      = new MockSheet();
        skill.targeting  = targeting;
        targeting.select = (_, targets, __) => targets.Add(target);

        skill.effectCollection.apply = (s, t) => got = (s, t);

        yield return(new WaitForEndOfFrame());

        skill.Begin();

        Assert.AreEqual((skill.Sheet, target), got);
    }
    public IEnumerator TargetingFromSource()
    {
        var source    = default(object);
        var target    = new MockSheet();
        var skill     = new GameObject("item").AddComponent <MockSkillMB>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        skill.Sheet      = new MockSheet();
        skill.targeting  = targeting;
        targeting.select = (s, targets, __) => {
            source = s;
            targets.Add(target);
        };

        yield return(new WaitForEndOfFrame());

        skill.Begin();

        Assert.AreSame(skill.Sheet, source);
    }
    public IEnumerator TargetingWithMaxCount()
    {
        var called    = 0;
        var target    = new MockSheet();
        var skill     = new GameObject("item").AddComponent <MockSkillMB>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        skill.Sheet          = new MockSheet();
        skill.maxTargetCount = 42;
        skill.targeting      = targeting;
        targeting.select     = (_, targets, mC) => {
            called = mC;
            targets.Add(target);
        };

        yield return(new WaitForEndOfFrame());

        skill.Begin();

        Assert.AreEqual(42, called);
    }
Exemple #10
0
    public void DontDisposeProjectileWhenRoutineNotDone()
    {
        var disposed = false;
        var spawn    = new GameObject("spawn");
        var target   = new MockSheet();
        var cast     = new MockCastProjectile {
            projectileSpawn = spawn.transform
        };

        cast.magazine.onDispose = _ => disposed = true;

        IEnumerator <WaitForFixedUpdate> approach(Transform _, MockSheet __, float ___)
        {
            yield return(new WaitForFixedUpdate());
        }

        cast.approach.apply = approach;

        cast.Apply(target).MoveNext();

        Assert.False(disposed);
    }
Exemple #11
0
    public void ApproachArgs()
    {
        var called = default((Transform, MockSheet, float));
        var spawn  = new GameObject("spawn");
        var target = new MockSheet();
        var cast   = new MockCastProjectile {
            projectileSpawn = spawn.transform
        };

        cast.projectileSpeed = 1;

        IEnumerator <WaitForFixedUpdate> approach(Transform projectile, MockSheet target, float speed)
        {
            called = (projectile, target, speed);
            yield break;
        }

        cast.approach.apply = approach;

        cast.Apply(target).MoveNext();

        Assert.AreEqual((cast.magazine.Projectile.transform, target, 1f), called);
    }
    public IEnumerator ApplyEffectPerTarget()
    {
        var got       = new List <(MockSheet, MockSheet)>();
        var targetA   = new MockSheet();
        var targetB   = new MockSheet();
        var skill     = new GameObject("item").AddComponent <MockSkillMB>();
        var targeting = ScriptableObject.CreateInstance <MockTargetingSO>();

        skill.Sheet      = new MockSheet();
        skill.targeting  = targeting;
        targeting.select = (_, targets, __) => {
            targets.Add(targetA);
            targets.Add(targetB);
        };

        skill.effectCollection.apply = (s, t) => got.Add((s, t));

        yield return(new WaitForEndOfFrame());

        skill.Begin();

        CollectionAssert.AreEqual(
            new (MockSheet, MockSheet)[] {