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); }); } }
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 ) ); }
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); } }
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); }
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); } }
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 ) ); }
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 ) ); }
public Ops_(IEngine engine) { Tick = engine.Op <Ops.Tick>(); Hit = engine.MultiOp <Ops.Hit>(); EndHit = engine.MultiOp <Ops.EndHit>(); }
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); } } ); }
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); } } ); }