Ejemplo n.º 1
0
        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);
                }
            });
        }
Ejemplo n.º 2
0
    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;
     }
 }