Esempio n. 1
0
        public void Test_FalseValue()
        {
            var falseValue = Bool.False();

            var isCalled = false;

            falseValue.When(() => Abort(), () => { isCalled = true; });
            Assert.True(isCalled);

            var one = falseValue.When(() => 0, () => 1);

            Assert.Equal(1, one);

            var t = falseValue.Bind(_ => {
                Abort();
                return(Bool.False());
            });

            Assert.Throws <InvalidOperationException>(
                () => Polluter.Pollute(t)
                );

            var t2 = falseValue.Fmap(_ => {
                Abort();
                return(false);
            });

            Assert.Throws <InvalidOperationException>(
                () => Polluter.Pollute(t2)
                );
        }
Esempio n. 2
0
        public void Test_TrueValue()
        {
            var trueValue = Bool.True();

            var isCalled = false;

            trueValue.When(() => { isCalled = true; }, () => Abort());
            Assert.True(isCalled);

            var one = trueValue.When(() => 1, () => 0);

            Assert.Equal(1, one);

            var t = trueValue.Bind(_ => {
                Assert.True(_);
                return(Bool.False());
            });

            Assert.False(Polluter.Pollute(t));

            var t2 = trueValue.Fmap(_ => {
                Assert.True(_);
                return(false);
            });

            Assert.False(Polluter.Pollute(t2));
        }
Esempio n. 3
0
        public void Test_TrueFunction()
        {
            // Boolを返却する関数をしていする。
            // 関数はこのタイミングで即時に評価される。
            var trueValue = Bool.Return(() => true);

            var isCalled = false;

            trueValue.When(() => { isCalled = true; }, () => Abort());
            Assert.True(isCalled);

            var one = trueValue.When(() => 1, () => 0);

            Assert.Equal(1, one);

            var t = trueValue.Bind(_ => {
                Assert.True(_);
                return(Bool.False());
            });

            Assert.False(Polluter.Pollute(t));

            var t2 = trueValue.Fmap(_ => {
                Assert.True(_);
                return(false);
            });

            Assert.False(Polluter.Pollute(t2));
        }
Esempio n. 4
0
        public void Test_Nothhing()
        {
            var nothing = Optional.Nothing <int>();

            nothing.Bind(o => {
                Abort();
                return(Optional.Nothing <int>());
            });
            nothing.Fmap(o => {
                Abort();
                return(1);
            });
            nothing.Map(o => {
                Abort();
                return(1);
            });
            nothing.IfPresent(
                _ => Abort(),
                () => {}
                );
            nothing.IfPresent(
                _ => Abort(),
                () => {});
            Assert.Equal(1, nothing.OrElse(1));
            Assert.Throws <InvalidOperationException>(
                () => Polluter.Pollute(nothing)
                );
        }
    private void AddTimedInstance(Polluter p, float time)
    {
        NoiseSplat noiseSplat = new NoiseSplat(p, time + Time.time);

        p.SetSplat(noiseSplat);
        removeTime.Add(new Pair <float, NoiseSplat>(time + Time.time, noiseSplat));
    }
Esempio n. 6
0
        public void Test_TrueValue()
        {
            var trueValue = BoolLazy.True();

            var isCalled = false;

            // Bool.When().Else()で分岐
            trueValue.When(() => { isCalled = true; }, () => Abort());
            Assert.True(isCalled);

            // Bool.When(then:, elseThen:)で分岐。一時変数を作らない分こちらの方がパフォーマンスは良いはず。
            var one = trueValue.When(() => 1, () => 0);

            Assert.Equal(1, one);

            // Bindは別のIMonadを返却できる
            var t = trueValue.Bind(_ => {
                Assert.True(_);
                return(Bool.False());
            });

            Assert.False(Polluter.Pollute(t));

            // Fmapは別のBoolLazyを返却できる
            var t2 = trueValue.Fmap(_ => {
                Assert.True(_);
                return(false);
            });

            Assert.False(Polluter.Pollute(t2));
        }
Esempio n. 7
0
 /// <summary>
 ///
 /// </summary>
 public static Optional <T> Do <T>(this Optional <T> self, Action <T> action)
 {
     if (self.HasValue)
     {
         action(Polluter.Pollute(self));
     }
     return(self);
 }
Esempio n. 8
0
 /// <summary>
 /// left `action` right
 /// </summary>
 public static Optional <W> Apply <U, V, W>(Optional <U> left, Optional <V> right, Func <U, V, W> action)
 {
     if (!left.HasValue || !right.HasValue)
     {
         return(Optional <W> .Nothing);
     }
     return(Optional <W> .Just(action(Polluter.Pollute(left), Polluter.Pollute(right))));
 }
Esempio n. 9
0
        public void Test_Awaitor1()
        {
            // 単一Task
            var state  = MaybeTask.From(DummyTask(10));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result));
        }
Esempio n. 10
0
 private bool CanRemove(Polluter polluter)
 {
     if (polluter.GetOwnerID() == stateManager.GetCurrentPlayerID() &&
         polluter.GetAttrib().economicAttrib.removalCost <= stateManager.GetCurrentPlayerState().GetMoney())
     {
         return(true);
     }
     return(false);
 }
 public void PlayTimedOnceOff(Vector2 pos, int dB, int radius, string name, GameObject go, float time = 1f)
 {
     if (dB > 0 && radius > 0 && time > 0f)
     {
         Polluter polluter = GetPolluter(radius);
         polluter.SetAttributes(pos, dB, go, name);
         AddTimedInstance(polluter, time);
     }
 }
 private void FreePolluter(Polluter pol)
 {
     if (pol != null)
     {
         pol.Clear();
         Debug.Assert(inusePool[pol.radius].Contains(pol));
         inusePool[pol.radius].Remove(pol);
         freePool[pol.radius].Add(pol);
     }
 }
    public NoiseSplat CreateNoiseSplat(Vector2 pos, int dB, int radius, string name, GameObject go)
    {
        Polluter polluter = GetPolluter(radius);

        polluter.SetAttributes(pos, dB, go, name);
        NoiseSplat noiseSplat = new NoiseSplat(polluter, 0f);

        polluter.SetSplat(noiseSplat);
        return(noiseSplat);
    }
Esempio n. 14
0
    private bool CheckPolluter(GameObject targetGameObject)
    {
        bool hasFoundData = false;

        Polluter polluter = targetGameObject.GetComponentInChildren <Polluter>();

        if (polluter != null)
        {
            hasFoundData = true;
            PolluterAttrib attrib = polluter.GetAttrib();

            polluterContent.textTitle.text = attrib.title;

            polluterContent.textDetails.text = "Price: " + attrib.economicAttrib.price + " Income: " + attrib.economicAttrib.profitPerTurn + "\nRemoval cost: " + attrib.economicAttrib.removalCost;

            VulnerabilityAttrib vulnerabilityAttrib = attrib.vulnerabilityAttrib;
            if (vulnerabilityAttrib.vulnerabilities != null)
            {
                string vulnerabilityString = "Vulnerable to ";
                foreach (VulnerabilityAttrib.Vulnerability v in vulnerabilityAttrib.vulnerabilities)
                {
                    vulnerabilityString += v.disasterName + ":" + v.factor + " ";
                }
                polluterContent.textVulnerabilities.text = vulnerabilityString;
            }
            else
            {
                polluterContent.textVulnerabilities.text = "";
            }

            PollutionMap map = new PollutionMap(attrib.pollutionAttrib.emissions);

            if (polluter is Filter)
            {
                map = Util.MultiplyMap(map, (-1));
            }

            VisualAttrib visualAttrib = attrib.visualAttrib;
            if (visualAttrib.imageName != "")
            {
                worldWindow.imageLoader.LoadImage(visualAttrib.imageName);
                imageToShow = true;
            }
            else
            {
                imageToShow = false;
            }

            imageIsDisaster = !polluter.IsAlive();

            SetPieChart(polluterContent.pieChart, map);
        }

        return(hasFoundData);
    }
Esempio n. 15
0
        public void Test_Awaitor2()
        {
            // 2つのTaskを直列化
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(DummyTask(15));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
        }
Esempio n. 16
0
    public void AddPolluter(Polluter polluter)
    {
        Debug.Assert(!HasPolluter(polluter));
        polluters.Add(polluter);
        var mapChangeEvent = polluter.GetPollutionMapChangeEvent();

        mapChangeEvent.AddListener(() =>
        {
            stateChangeEventMap[PollutionMapType.PRODUCED].Invoke();
            stateChangeEventMap[PollutionMapType.FILTERED].Invoke();
        });
    }
    void Start()
    {
        attribLoader     = UIManager.Instance.attribLoader;
        playerController = UIManager.Instance.playerController;
        var data = attribLoader.LoadLazy();

        ShowFactories();

        var factoryAttribs = purchasables[0].polluterAttribs;

        foreach (var factoryAttrib in data.factoryList)
        {
            factoryAttribs.Add(factoryAttrib);
        }
        var filterAttribs = purchasables[1].polluterAttribs;

        foreach (var filterAttrib in data.filterList)
        {
            filterAttribs.Add(filterAttrib);
        }


        foreach (var pur in purchasables)
        {
            for (int i = 0; i < pur.polluterAttribs.Count; i++)
            {
                PurchasableIcon purchasableIcon = null;
                Polluter        polluter        = pur.purchasableIcon.GetPolluterIcon().GetPolluter();

                if (polluter is Factory)
                {
                    purchasableIcon = Instantiate(pur.purchasableIcon, factoriesMenu);
                    purchasableIcon.SetSpace(spaceFactories);
                }

                if (polluter is Filter)
                {
                    purchasableIcon = Instantiate(pur.purchasableIcon, filtersMenu);
                    purchasableIcon.SetSpace(spaceFilters);
                }

                purchasableIcon.SetPolluterAttributes(pur.polluterAttribs[i]);
                purchasableIcon.playerController = playerController;

                purchasableIcon.shopTransform = transform;

                purchasableIcon.polluterId = (i + 1);
                purchasableIcon.SetText(purchasableIcon.polluterId.ToString());
            }
        }
    }
    public GameObject InstantiatePolluter()
    {
        GameObject g = Instantiate(targetPolluter.gameObject, spaceForPolluter.transform);

        Polluter p = g.GetComponentInChildren <Polluter>();

        p.SetAttrib(polluterAttrib);
        p.polluterId = polluterId;

        polluterDragged   = p;
        gameObjectDragged = g;

        return(g);
    }
Esempio n. 19
0
        public void Test_Fmap()
        {
            var maybe1 = Optional.Just(1);
            var maybe2 = maybe1.Fmap(o => o + 1);

            Assert.Equal(2, Polluter.Pollute(maybe2));

            var m2o = (Optional <int>)maybe2;

            m2o.IfPresent(o => Assert.Equal(2, o), () => Abort());

            var maybeString = maybe1.Fmap(_ => "text");

            Assert.Equal("text", Polluter.Pollute(maybeString));
        }
Esempio n. 20
0
        public void Test_Awaitor3_Flat()
        {
            // 3つのTaskを直列化
            // 結果は自身で定義する。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(async prev => (await DummyTask(15)).Map(next => (prev, next)))
                        .Map(async prev => (await DummyTask(20)).Map(next => (prev.Item1, prev.Item2, next)));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item3);
        }
Esempio n. 21
0
        public void Test_Awaitor3()
        {
            // 3つのTaskを直列化。
            // 結果はTuple<Tuple<1, 2>, 3>
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(DummyTask(15))
                        .Map(DummyTask(20));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1.Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item1.Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item2);
        }
Esempio n. 22
0
        public void Test_Awaitor3_Flat2()
        {
            // 3つのTaskを直列化
            // 結果は自身で定義する。
            // Maybe a -> (a -> Task<Maybe (a b)>) -> Maybe (a b)は実装がわかりにくいので自動化
            // Maybe a -> (a -> Task<(a Maybe b)>) -> (a Maybe b)とならないように。
            var state = MaybeTask
                        .From(DummyTask(10))
                        .Map(prev => DummyTask(15), (prev, next) => Optional.Just((prev, next)))
                        .Map(prev => DummyTask(20), (prev, next) => Optional.Just((prev.Item1, prev.Item2, next)));
            var result = state.Awaitor.Result;

            Assert.True(result.HasValue);
            Assert.Equal(10, Polluter.Pollute(result).Item1);
            Assert.Equal(15, Polluter.Pollute(result).Item2);
            Assert.Equal(20, Polluter.Pollute(result).Item3);
        }
Esempio n. 23
0
        public void Test_TrueFunction()
        {
            var once = true;
            // boolを返却する関数を元に生成する。
            // 関数の評価は次のWhenなどまで遅延される。
            var trueValue = BoolLazy.Return(() => {
                if (!once)
                {
                    Abort();
                }
                once = false;
                return(true);
            });

            var isCalled = false;

            trueValue.When(() => { isCalled = true; }, () => Abort());
            Assert.True(isCalled);

            var one = trueValue.When(() => 1, () => 0);

            Assert.Equal(1, one);

            var t = trueValue.Bind(_ => {
                Assert.True(_);
                return(Bool.False());
            });

            Assert.False(Polluter.Pollute(t));

            var t2 = trueValue.Fmap(_ => {
                Assert.True(_);
                return(false);
            });

            Assert.False(Polluter.Pollute(t2));
        }
    private Polluter GetPolluter(int radius)
    {
        Polluter polluter = null;

        if (!freePool.ContainsKey(radius))
        {
            freePool.Add(radius, new List <Polluter>());
        }
        if (freePool[radius].Count > 0)
        {
            polluter = freePool[radius][0];
            freePool[radius].RemoveAt(0);
        }
        else
        {
            polluter = new Polluter(radius);
        }
        if (!inusePool.ContainsKey(radius))
        {
            inusePool.Add(radius, new List <Polluter>());
        }
        inusePool[radius].Add(polluter);
        return(polluter);
    }
Esempio n. 25
0
 public void RemovePolluter(Polluter polluter)
 {
     polluters.Remove(polluter);
     stateChangeEventMap[PollutionMapType.PRODUCED].Invoke();
     stateChangeEventMap[PollutionMapType.FILTERED].Invoke();
 }
Esempio n. 26
0
        public void Test_Right()
        {
            var right = Either <bool, int> .Right(1);

            var isCalled = false;

            right.IfRight(_ =>
            {
                Assert.Equal(1, _);
                isCalled = true;
            },
                          _ => Abort());
            Assert.True(isCalled);

            isCalled = false;
            right.IfLeft(
                _ => Abort(),
                _ =>
            {
                Assert.Equal(1, _);
                isCalled = true;
            });
            Assert.True(isCalled);

            isCalled = false;
            right.IfRight(_ =>
            {
                Assert.Equal(1, _);
                isCalled = true;
            }, _ => Abort());
            Assert.True(isCalled);

            isCalled = false;
            right.IfLeft(_ => Abort(),
                         _ =>
            {
                Assert.Equal(1, _);
                isCalled = true;
            });
            Assert.True(isCalled);

            var o = right.IfRight(_ =>
            {
                Assert.Equal(1, _);
                return(1);
            }
                                  , _ => 0);

            Assert.Equal(1, o);

            o = right.IfLeft(
                _ => 0,
                _ =>
            {
                Assert.Equal(1, _);
                return(1);
            });
            Assert.Equal(1, o);

            o = right.IfRight(_ =>
            {
                Assert.Equal(1, _);
                return(1);
            }, _ => 0);
            Assert.Equal(1, o);

            o = right.IfLeft(_ => 0,
                             _ =>
            {
                Assert.Equal(1, _);
                return(1);
            });
            Assert.Equal(1, o);

            var z = right.Bind(_ => { return(Either <float, int> .Right(0)); });

            Assert.Equal(0, Polluter.Pollute(z));

            var o2 = right.Fmap(_ => { return(1); });

            Assert.Equal(1, Polluter.Pollute(o2));

            var o3 = right.Map(_ => { return(1); });

            Assert.Equal(1, Polluter.Pollute(o3).PolluteRight());
        }
Esempio n. 27
0
 public bool HasPolluter(Polluter polluter)
 {
     return(polluters.Contains(polluter));
 }
Esempio n. 28
0
 /// <summary>
 /// Maybeのリストから値を持つもののリストへ変換
 /// </summary>
 /// <typeparam name="U"></typeparam>
 /// <param name="list"></param>
 /// <returns></returns>
 public static IEnumerable <U> MapPollute <U>(IEnumerable <Optional <U> > list)
 => (from x in list where x.HasValue select Polluter.Pollute(x));
Esempio n. 29
0
 public Polluter CopyAssign(Polluter rhs)
 {
     polluterAttrib = rhs.polluterAttrib;
     ownerID        = rhs.ownerID;
     return(this);
 }
Esempio n. 30
0
 public void SetPolluter(Polluter polluter)
 {
     this.polluter = polluter;
     OperatePolluter();
 }