示例#1
0
        private void OnUpdate(EngineUpdateEventArgs args)
        {
            if (TryTransition())
            {
                return;
            }

            CurrentStrategy?.OnUpdate(args, this, CurrentState);
        }
示例#2
0
        private void OnUpdate(EngineUpdateEventArgs args)
        {
            var carEntity = Entity.Level.Instantiate(EntityTemplates.Car, Entity);

            carEntity.GetBehavior <MovableBehavior>().SetLastTarget(Entity);
            var car            = carEntity.GetBehavior <CarBehavior>();
            var passengerCount = new Random().Next(5) + 1;

            car.Slots = passengerCount;
            for (var i = 0; i < passengerCount; i++)
            {
                car.TryLoad(Entity.Level.Instantiate(EntityTemplates.Customer, carEntity));
            }
            carEntity.IsEnabled = true;
        }
示例#3
0
        private void OnUpdate(EngineUpdateEventArgs args)
        {
            var thisPosition   = Entity.GetBehavior <TransformBehavior>().Position;
            var targetPosition = Target?.GetBehavior <TransformBehavior>()?.Position ?? Vector3.Zero;

            if (Vector3.Distance(thisPosition, targetPosition) <= float.Epsilon)
            {
                lock (_lock)
                {
                    if (_hasTargetReached)
                    {
                        return;
                    }

                    _hasTargetReached = true;
                    var parentEnterResult = Entity.SetParent(Target, Reasons.TargetReached);
                    _targetReached.OnNext(new TargetReachedEngineEventArgs(Engine.Engine.Current, Target, parentEnterResult));
                }
            }
            else
            {
                if (_hasTargetReached)
                {
                    _hasTargetReached = false;
                    var location =
                        _lastTarget?.GetImplementation <IGraphNode>()?
                        .AdjacentEdges.FirstOrDefault(
                            _ =>
                            (Equals(_.GetImplementation <IGraphEdge>().Start.Entity, _lastTarget) && Equals(_.GetImplementation <IGraphEdge>().End.Entity, Target)) ||
                            (Equals(_.GetImplementation <IGraphEdge>().End.Entity, _lastTarget) && Equals(_.GetImplementation <IGraphEdge>().Start.Entity, Target)));
                    Entity.SetParent(location, Reasons.MovingStarted);
                }
                var movementVector    = Vector3.Normalize(targetPosition - thisPosition);
                var movementFactor    = Speed * (float)args.DeltaTime.TotalSeconds;
                var maxMovementFactor = Vector3.Distance(thisPosition, targetPosition);
                var newPosition       = thisPosition + Math.Min(movementFactor, maxMovementFactor) * movementVector;
                Entity.GetBehavior <TransformBehavior>().Position = newPosition;
            }
        }
示例#4
0
 public virtual void OnUpdate(EngineUpdateEventArgs args, IArtificialIntelligence ai, IArtificialIntelligenceState currentState)
 {
 }
示例#5
0
 private static MouseEnterEngineEventArgs CreateMouseEnterEventArgs(Entity entity, MouseInteractionFeature feature, EngineUpdateEventArgs args)
 {
     return(new MouseEnterEngineEventArgs(Engine.Current, feature._lastMousePosition));
 }
示例#6
0
        private static bool IsMousePointerLeavingEntity(Entity entity, MouseInteractionFeature feature, EngineUpdateEventArgs args)
        {
            var isLeaving = !IsLastMousePositionOverEntity(feature, entity) && feature._lastEntityStates[entity] == MousePointerOverEntityState.Over;

            if (isLeaving)
            {
                feature._lastEntityStates[entity] = MousePointerOverEntityState.NotOver;
            }
            return(isLeaving);
        }
示例#7
0
 private void OnUpdate(EngineUpdateEventArgs args)
 {
     HasBeenParkedAtSomeTime |= IsParked;
 }