예제 #1
0
        /// <summary>
        /// Updates the time of timing by delta time.
        /// </summary>
        /// <param name="deltaTime">The delta time.</param>
        public void Tick(float deltaTime)
        {
            if (TimerState != TimerState.Running)
            {
                return;
            }

            time += deltaTime;
            if (time < Interval)
            {
                return;
            }

            CurrentCount++;

            // Raise Ticking event
            Ticking?.Invoke(this, new TimerTickingEventArgs(CurrentCount));

            if (RepeatCount != 0 && CurrentCount >= RepeatCount)
            {
                Reset();

                OnCompleted?.Invoke(this, EventArgs.Empty);
            }

            time -= Interval;
        }
예제 #2
0
파일: Timer.cs 프로젝트: Hengle/UniSharper
        /// <summary>
        /// Updates the time of timing by delta time.
        /// </summary>
        /// <param name="deltaTime">The delta time.</param>
        public void Tick(float deltaTime)
        {
            if (TimerState != TimerState.Running)
            {
                return;
            }

            time += deltaTime;

            if (time >= Interval)
            {
                CurrentCount++;

                // Raise Ticking event
                if (Ticking != null)
                {
                    Ticking.Invoke(this, new TimerTickingEventArgs(CurrentCount));
                }

                if (RepeatCount != 0 && CurrentCount >= RepeatCount)
                {
                    Reset();

                    if (Completed != null)
                    {
                        Completed.Invoke(this, EventArgs.Empty);
                    }
                }

                time = time - Interval;
            }
        }
예제 #3
0
        public InventoryTests()
        {
            InitScript.Init();

            {
                entityFactory = new EntityFactory();

                // AddComponents
                var transform    = Transform.AddTo(entityFactory, Layers.REAL, TransformFlags.Default);
                var stats        = Stats.AddTo(entityFactory, Registry.Global.Stats._map);
                var acting       = Acting.AddTo(entityFactory, null, Algos.SimpleAlgo, Order.Player);
                var moving       = Moving.AddTo(entityFactory);
                var displaceable = Displaceable.AddTo(entityFactory, Layers.BLOCK);
                var inventory    = Inventory.AddTo(entityFactory);
                var ticking      = Ticking.AddTo(entityFactory);

                // InitComponents
                acting.DefaultPreset(entityFactory);
                moving.DefaultPreset();
                displaceable.DefaultPreset();
                ticking.DefaultPreset();

                // Retouch
                Equip.OnDisplaceHandlerWrapper.HookTo(entityFactory);

                Inventory.AddInitTo(entityFactory);
            }

            {
                itemFactory = new EntityFactory();
                var transform = Transform.AddTo(itemFactory, Layers.ITEM, 0);
            }
        }
예제 #4
0
        public static void AddComponents(EntityFactory factory)
        {
            // Apply these one after the other.
            // This will only initialize the inject variables of the behavior / component.
            // So, apply will be autogenerated for the different behaviors based on their injects.
            // Or do it even smarter?
            // So, since I'd like to make components structs in the future and store them somewhere
            // central (optionally), these can actually reference a global storage for them.

            // So this just adds the behavior
            Acting.AddTo(factory, null, Algos.SimpleAlgo, Order.Player);
            Moving.AddTo(factory);
            Digging.AddTo(factory);
            Pushable.AddTo(factory);
            Attacking.AddTo(factory, Attacking.GetTargetProviderFromInventory, Layers.REAL, Faction.Enemy | Faction.Environment);
            Attackable.AddTo(factory, Attackness.ALWAYS);
            Damageable.AddTo(factory, new Health(5));
            Displaceable.AddTo(factory, Layers.BLOCK);
            Ticking.AddTo(factory);

            FactionComponent.AddTo(factory, Faction.Player);
            Transform.AddTo(factory, Layers.REAL, TransformFlags.Default);
            Inventory.AddTo(factory);
            Inventory.AddInitTo(factory);

            // TODO: pass this an action
            Controllable.AddTo(factory,
                               // The default action is the AttackDigMove action.
                               Action.Compose(Attacking.Action, Digging.Action, Moving.Action));

            // TODO: rename the namespaces
            Stats.AddTo(factory, Registry.Global.Stats._map);
        }
예제 #5
0
 public static void AddComponents(Entity subject)
 {
     Stats.AddTo(subject, Registry.Global.Stats._map);
     Transform.AddTo(subject, Layers.TRAP, 0);
     FactionComponent.AddTo(subject, Faction.Enemy);
     Acting.AddTo(subject, ctx => Bouncing.UAction.Compile(), Algos.SimpleAlgo, Order.Trap);
     Damageable.AddTo(subject, new Health(1));
     Ticking.AddTo(subject);
     Bouncing.AddTo(subject);
 }
예제 #6
0
 public static void AddComponents(Entity subject)
 {
     FactionComponent.AddTo(subject, Faction.Environment);
     Displaceable.AddTo(subject, Layers.BLOCK);
     Attackable.AddTo(subject, Attackness.ALWAYS);
     // TODO: Be able to manipulate stats in a simple way.
     Stats.AddTo(subject, Registry.Global.Stats._map);
     Pushable.AddTo(subject);
     Damageable.AddTo(subject, new Health(1));
     Transform.AddTo(subject, Layers.REAL, TransformFlags.Default);
     Ticking.AddTo(subject);
     MoreChains.AddTo(subject, Registry.Global.MoreChains._map);
 }
예제 #7
0
        public Slide_Tests()
        {
            InitScript.Init();
            entityFactory = new EntityFactory();
            Transform.AddTo(entityFactory, Layers.REAL, TransformFlags.Default);
            Stats.AddTo(entityFactory, Registry.Global.Stats._map);

            Ticking.AddTo(entityFactory).DefaultPreset();
            Displaceable.AddTo(entityFactory, Layers.BLOCK).DefaultPreset();
            Moving.AddTo(entityFactory).DefaultPreset();
            Pushable.AddTo(entityFactory).DefaultPreset();
            Acting.AddTo(entityFactory, null, Algos.SimpleAlgo, Order.Entity).DefaultPreset(entityFactory);
        }
예제 #8
0
 public static void AddComponents(Entity subject)
 {
     Stats.AddTo(subject, Registry.Global.Stats._map);
     Transform.AddTo(subject, Layers.PROJECTILE, 0);
     FactionComponent.AddTo(subject, Faction.Environment);
     Displaceable.AddTo(subject, 0);
     ProjectileComponent.AddTo(subject, Layers.REAL | Layers.WALL | Layers.PROJECTILE);
     Attackable.AddTo(subject, Attackness.CAN_BE_ATTACKED);
     Damageable.AddTo(subject, new Health(1));
     Ticking.AddTo(subject);
     Acting.AddTo(
         subject,
         entity => ProjectileComponent.Action.Compile(entity.GetTransform().orientation),
         Algos.SimpleAlgo,
         Order.Projectile);
 }
예제 #9
0
        public static void AddComponents(Entity subject, System.Action <Acting.Context> Algorithm, params Step[] sequenceSteps)
        {
            Stats.AddTo(subject, Registry.Global.Stats._map);
            Transform.AddTo(subject, Layers.REAL, TransformFlags.Default);
            FactionComponent.AddTo(subject, Faction.Enemy);

            Acting.AddTo(subject, Sequential.CalculateAction, Algorithm, Order.Entity);
            Moving.AddTo(subject);
            Ticking.AddTo(subject);
            Pushable.AddTo(subject);
            Attacking.AddTo(subject, entity => BufferedAttackTargetProvider.Simple, Layers.REAL, Faction.Player);
            Sequential.AddTo(subject, new Sequence(sequenceSteps));
            Attackable.AddTo(subject, Attackness.ALWAYS);
            Damageable.AddTo(subject, new Health(1));
            Displaceable.AddTo(subject, Layers.BLOCK);
            MoreChains.AddTo(subject, Registry.Global.MoreChains._map);
        }
예제 #10
0
        public void Start()
        {
            CancellationTokenSource cts = _cancellationTokenSource;

            foreach (var ts in _timeSpanList)
            {
                Device.StartTimer(ts, () =>
                {
                    if (cts.IsCancellationRequested)
                    {
                        return(false);
                    }
                    var result = _callback.Invoke();
                    Ticking?.Invoke(null, EventArgs.Empty);
                    return(result);
                });
            }
        }
예제 #11
0
 protected virtual void OnTicking(PlayerEventArgs e)
 {
     Ticking?.Invoke(this, e);
 }
예제 #12
0
 public void AddTicking(Ticking ticking)
 {
     _allTickings.AddMaybeWhileIterating(ticking);
 }