public void Setup(CompositeDisposable cd, IEngine engine, State state) { Scene.Setup(cd, engine, state.SceneStack); engine.Worker(cd, Dep.On(Scene.Open, state.Inventory.Items), () => { Item openItem; if (Scene.Open.TryRead(out openItem)) { Item.Write(openItem); } else { var item = Item.Read(); var items = state.Inventory.Items.Read(); if (item != null && !items.Contains(item)) { Item.Write(null); } } }); engine.Worker(cd, Dep.On(Scene.State, Item), () => { if (Scene.State == SceneState.Opened && Item.Read() == null) { Scene.Close.Fire(Empty.Instance); } }); }
private void OnEnable() { G.Engine.Computer(cd, new object[] { G.Tick, G.Restart }, () => { var r = rotation.Read(); if (G.Restart) { r = Quaternion.identity; } if (G.Tick) { r *= Quaternion.Euler(new Vector3(0, 0, 45) * G.Tick.Reduced); } // Can write directly to transform, // just need to to use register listener. // But use computer here to demonstrate how to delegate // heavy computation to compute thread rotation.Write(r); }); G.Engine.Reader(cd, new object[] { rotation }, () => { transform.rotation = rotation; }); }
private void FixedUpdate() { if (G.IsGameRunning) { rb2d.AddForce(movement.Read() * speed); } else { rb2d.velocity = Vector2.zero; rb2d.angularVelocity = 0; } }