Esempio n. 1
0
        public static void Items(
            ILi <ITodoItem> target,
            IEl <int> nextId,
            IMultiOp <string> newItem_,
            IOp <Empty> deleteCompletedItems_,
            IMultiOp <string> deleteItem_,
            ITodoItemFactory factory)
        {
            var   newItem = newItem_.Read();
            Empty tmp;
            bool  deleteCompletedItems = deleteCompletedItems_.TryRead(out tmp);
            var   deleteItem           = deleteItem_.Read();

            if (newItem.Count <= 0 &&
                !deleteCompletedItems &&
                deleteItem.Count <= 0)
            {
                return;
            }

            var items = target.AsWrite();

            if (newItem.Count > 0)
            {
                for (int i = 0, n = newItem.Count; i < n; ++i)
                {
                    items.Add(factory.Create((nextId.Read() + i).ToString(), newItem[i]));
                }
                nextId.Write(nextId.Read() + newItem.Count);
            }

            if (deleteCompletedItems)
            {
                items.RemoveAll(it =>
                {
                    if (it.IsCompleted.Read())
                    {
                        factory.Dispose(it);
                        return(true);
                    }
                    return(false);
                });
            }

            if (deleteItem.Count > 0)
            {
                items.RemoveAll(it =>
                {
                    if (deleteItem.Contains(it.Id))
                    {
                        factory.Dispose(it);
                        return(true);
                    }
                    return(false);
                });
            }
        }
Esempio n. 2
0
        public State(CompositeDisposable cd, IEngine engine)
        {
            NextId               = engine.El(1);
            CreateNewItem        = engine.MultiOp <string>();
            Items                = engine.Li(new List <ITodoItem>());
            ToggleItemComplete   = engine.MultiOp <string>();
            UncompletedCount     = engine.El(0);
            DeleteCompletedItems = engine.Op <Empty>();
            DeleteItem           = engine.MultiOp <string>();
            EditItem             = engine.Op <string>();
            EditingItemId        = engine.El <string>(null);
            FinishEditItem       = engine.Op <string>();
            ItemFactory          = new TodoItem.Factory(cd, engine,
                                                        ToggleItemComplete, EditingItemId, FinishEditItem);

            engine.Computer(cd,
                            new object[] {
                Items,
                ToggleItemComplete,
            },
                            () => Computers.UncompletedCount(
                                UncompletedCount,
                                Items
                                )
                            );

            engine.Computer(cd,
                            new object[]
            {
                CreateNewItem,
                DeleteCompletedItems,
                DeleteItem
            },
                            () => Computers.Items(
                                Items,
                                NextId,
                                CreateNewItem,
                                DeleteCompletedItems,
                                DeleteItem,
                                ItemFactory
                                )
                            );

            engine.Computer(cd,
                            new object[]
            {
                EditItem,
                FinishEditItem
            },
                            () => Computers.EditingItemId(
                                EditingItemId,
                                EditItem,
                                FinishEditItem
                                )
                            );
        }
Esempio n. 3
0
        public static void Value(
            IEl <int> target,
            IMultiOp <Empty> inc,
            IMultiOp <Empty> dec
            )
        {
            int delta = inc.Read().Count - dec.Read().Count;

            if (delta != 0)
            {
                target.Write(target.Read() + delta);
            }
        }
Esempio n. 4
0
            public Factory(
                CompositeDisposable cd,
                IEngine engine,
                IMultiOp <string> toggleComplete,
                IEl <string> editingItemId,
                IOp <string> finishEdit
                )
            {
                this.engine         = engine;
                this.toggleComplete = toggleComplete;
                this.editingItemId  = editingItemId;
                this.finishEdit     = finishEdit;

                cd.Add(this);
            }
Esempio n. 5
0
            public static void IsCompleted(IEl <bool> target, IMultiOp <string> toggle_, string myId)
            {
                var toggle = toggle_.Read();

                var isCompleted = target.Read();

                for (int i = 0, n = toggle.Count; i < n; ++i)
                {
                    if (toggle[i] == myId)
                    {
                        isCompleted = !isCompleted;
                    }
                }
                if (isCompleted != target.Read())
                {
                    target.Write(isCompleted);
                }
            }
Esempio n. 6
0
        public State(CompositeDisposable cd, IEngine engine)
        {
            Value    = engine.El(0);
            Increase = engine.MultiOp <Empty>();
            Decrease = engine.MultiOp <Empty>();

            engine.Computer(cd,
                            new object[] {
                Increase,
                Decrease
            },
                            () => Computers.Value(
                                Value,
                                Increase,
                                Decrease
                                )
                            );
        }
Esempio n. 7
0
        public TodoItem(
            CompositeDisposable cd,
            IEngine engine,
            IMultiOp <string> toggleComplete,
            IEl <string> editingItemId,
            IOp <string> finishEdit,
            string id,
            string content)
        {
            this.id      = id;
            this.content = engine.El(content);
            isCompleted  = engine.El(false);

            cd = new CompositeDisposable();

            engine.Computer(cd,
                            new object[] {
                toggleComplete
            },
                            () => Computers.TodoItem.IsCompleted(
                                isCompleted,
                                toggleComplete,
                                this.id
                                )
                            );

            engine.Computer(cd,
                            new object[] {
                editingItemId,
                finishEdit
            },
                            () => Computers.TodoItem.Content(
                                this.content,
                                editingItemId,
                                finishEdit,
                                this.id
                                )
                            );
        }
Esempio n. 8
0
 public Ops_(IEngine engine)
 {
     Tick   = engine.Op <Ops.Tick>();
     Hit    = engine.MultiOp <Ops.Hit>();
     EndHit = engine.MultiOp <Ops.EndHit>();
 }
Esempio n. 9
0
            public State(IEngine engine)
            {
                Ids  = engine.Li(new List <string>());
                Xs   = engine.Li(new List <int>());
                Ys   = engine.Li(new List <int>());
                Vxs  = engine.Li(new List <int>());
                Vys  = engine.Li(new List <int>());
                Tick = engine.MultiOp <int>();
                Add  = engine.MultiOp <Rigidbody>();

                engine.Computer(cd,
                                new object[] { Tick, Add },
                                () =>
                {
                    var tick = Tick.Read();
                    var add  = Add.Read();

                    if (tick.Count <= 0 && add.Count <= 0)
                    {
                        return;
                    }

                    var xs = Xs.AsWrite();
                    var ys = Ys.AsWrite();

                    {
                        var vxs = Vxs.Read();
                        var vys = Vys.Read();

                        for (int t = 0, c = tick.Count; t < c; ++t)
                        {
                            var dt = tick[t];

                            for (int i = 0, n = Ids.Read().Count; i < n; ++i)
                            {
                                xs[i] += vxs[i] * dt;
                                ys[i] += vys[i] * dt;
                            }
                        }
                    }

                    if (add.Count > 0)
                    {
                        for (int i = 0, n = add.Count; i < n; ++i)
                        {
                            var r = add[i];
                            xs.Add(r.X);
                            ys.Add(r.Y);
                        }
                    }
                }
                                );

                engine.Computer(cd,
                                new object[] { Add },
                                () =>
                {
                    var add = Add.Read();

                    if (add.Count <= 0)
                    {
                        return;
                    }

                    var ids = Ids.AsWrite();
                    var vxs = Vxs.AsWrite();
                    var vys = Vys.AsWrite();

                    for (int i = 0, n = add.Count; i < n; ++i)
                    {
                        var r = add[i];
                        ids.Add(r.Id);
                        vxs.Add(r.Vx);
                        vys.Add(r.Vy);
                    }
                }
                                );
            }
Esempio n. 10
0
            public State(IEngine engine)
            {
                Ids    = engine.Li(new List <string>());
                Sheets = engine.Li(new List <object>());
                CurrentFrameIndexes = engine.Li(new List <int>());
                TotalFrames         = engine.Li(new List <int>());
                Speeds = engine.Li(new List <int>());
                Tick   = engine.MultiOp <int>();
                Add    = engine.MultiOp <Sprite>();

                engine.Computer(cd,
                                new object[] { Tick, Add },
                                () =>
                {
                    var tick = Tick.Read();
                    var add  = Add.Read();

                    if (tick.Count <= 0 && add.Count <= 0)
                    {
                        return;
                    }

                    var currentFrameIndexes = CurrentFrameIndexes.AsWrite();

                    {
                        var totalFrames = TotalFrames.Read();
                        var speeds      = Speeds.Read();

                        for (int t = 0, c = tick.Count; t < c; ++t)
                        {
                            var dt = tick[t];

                            for (int i = 0, n = Ids.Read().Count; i < n; ++i)
                            {
                                var current            = currentFrameIndexes[i];
                                current                = (current + dt * speeds[i]) % totalFrames[i];
                                currentFrameIndexes[i] = current;
                            }
                        }
                    }

                    if (add.Count > 0)
                    {
                        for (int i = 0, n = add.Count; i < n; ++i)
                        {
                            var s = add[i];
                            currentFrameIndexes.Add(s.CurrentFrameIndex);
                        }
                    }
                }
                                );

                engine.Computer(cd,
                                new object[] { Add },
                                () =>
                {
                    var add = Add.Read();

                    if (add.Count <= 0)
                    {
                        return;
                    }

                    var ids         = Ids.AsWrite();
                    var sheets      = Sheets.AsWrite();
                    var totalFrames = TotalFrames.AsWrite();
                    var speeds      = Speeds.AsWrite();

                    for (int i = 0, n = add.Count; i < n; ++i)
                    {
                        var s = add[i];
                        ids.Add(s.Id);
                        sheets.Add(s.Sheet);
                        totalFrames.Add(s.TotalFrame);
                        speeds.Add(s.Speed);
                    }
                }
                                );
            }