public virtual void CheckOnLandStatus()
        {
            var ground = IsOnGround();

            if (ground)
            {
                if (!OnGround && OnLanding != null)
                {
                    OnLanding.Invoke();
                }

                if (OnStayGround != null)
                {
                    OnStayGround.Invoke();
                }
            }
            else
            {
                if (OnGround && OnTakingoff != null)
                {
                    OnTakingoff.Invoke();
                }
            }

            OnGround = ground;
        }
예제 #2
0
 private void SubscribeContextEventHandlers(FlightContext context)
 {
     // Subscribe to the events so we can propagate 'em via the factory
     context.OnTakeoff             += (sender, args) => OnTakeoff?.Invoke(sender, args);
     context.OnLaunchCompleted     += (sender, args) => OnLaunchCompleted?.Invoke(sender, args);
     context.OnLanding             += (sender, args) => OnLanding?.Invoke(sender, args);
     context.OnRadarContact        += (sender, args) => OnRadarContact?.Invoke(sender, args);
     context.OnCompletedWithErrors += (sender, args) => OnCompletedWithErrors?.Invoke(sender, args);
 }
예제 #3
0
 internal void InvokeOnLandingEvent()
 {
     try
     {
         OnLanding?.Invoke(this, new OnLandingEventArgs(Flight));
     }
     catch (Exception ex)
     {
         Trace.Write(ex);
         throw;
     }
 }
예제 #4
0
    public void SetGrounding(bool grounding)
    {
        if (isGrounded && !grounding)
        {
            currentJump++;
        }

        isGrounded = grounding;

        if (grounding)
        {
            OnLanding?.Invoke();
        }
    }
예제 #5
0
        public override void BeforeDispose()
        {
            OnLanding -= PlayerEntityManager_OnLanding;
            _energyUpdateTimer.OnTimerRaised -= energyUpdateTimer_OnTimerRaised;

            // Clean Up event Delegates
            if (OnLanding != null)
            {
                // Remove all Events associated to this Event (That haven't been unsubscribed !)
                foreach (var d in OnLanding.GetInvocationList())
                {
                    OnLanding -= (LandingGround)d;
                }
            }
        }
예제 #6
0
 private void DefaultPhysicsStep()
 {
     if (ignoreFloor)
     {
         if (Col_ceiling)
         {
             ignoreFloor = false;
             leftGround  = false;
         }
         if (Col_isGrounded)
         {
             if (leftGround)
             {
                 ignoreFloor = false;
                 leftGround  = false;
             }
             else
             {
                 leftGround = true;
             }
         }
     }
     if (Col_isGrounded)
     {
         if (!prevGrounded)
         {
             OnLanding.Invoke();
         }
         if (!Col_GroundIsOneSided)
         {
             GroundProperties groundProp = TouchingGround[0].GetComponent <GroundProperties>();
             if (groundProp != null)
             {
                 groundProp.OnStandOn(this);
             }
         }
         if (!ignoreFloor)
         {
             velocity.x = velocity.x * GroundFriction;
         }
     }
     else
     {
         velocity += Vector2.down * gravity * gravityMultiplier * Time.fixedDeltaTime;
     }
     prevGrounded = Col_isGrounded;
 }
    public void Update()
    {
        if (!isDead)
        {
            if (!grounded)
            {
                timeSinceLastJump += Time.deltaTime;
            }

            if (!grounded && groundDetector.Grounded() && timeSinceLastJump >= minLandTime)
            {
                grounded = true;
                landingParticles.SetActive(true);
                animator.Play("frog_land_anim");
                OnLanding?.Invoke();
            }
        }
    }
예제 #8
0
        private void SubscribeContextFactoryEventHandlers(FlightContextFactory factory)
        {
            // Subscribe to the events so we can propagate 'em via the factory
            factory.OnTakeoff += (sender, args) =>
            {
                var location        = GetLocation(args.Flight.DepartureLocation);
                var immatriculation = GetImmatriculation(args.Flight.Aircraft);

                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - Took off from {Location} - Flight Info: {FlightInfo}", DateTime.UtcNow, args.Flight.Aircraft, immatriculation, location, args.Flight.GetFullFlightInformation());
                //OnTakeoff?.Invoke(sender, args);
                OnTakeoff?.Invoke(this, new MovementEventArgs(args.Flight, location, immatriculation));
            };

            factory.OnLaunchCompleted += (sender, args) =>
            {
                var immatriculation = GetImmatriculation(args.Flight.Aircraft);
                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - launch completed - Flight Info: {FlightInfo}", DateTime.UtcNow, args.Flight.Aircraft, immatriculation, args.Flight.GetFullFlightInformation());
                OnLaunchCompleted?.Invoke(sender, args);
            };

            factory.OnLanding += (sender, args) =>
            {
                var location        = GetLocation(args.Flight.ArrivalLocation);
                var immatriculation = GetImmatriculation(args.Flight.Aircraft);

                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - Landed at {Location} - Flight Info: {FlightInfo}", DateTime.UtcNow, args.Flight.Aircraft, immatriculation, location, args.Flight.GetFullFlightInformation());
                //OnLanding?.Invoke(sender, args);
                OnLanding?.Invoke(this, new MovementEventArgs(args.Flight, location, immatriculation));
            };

            factory.OnRadarContact += (sender, args) =>
            {
                if (args.Flight.PositionUpdates.Any() == false)
                {
                    return;
                }

                var lastPositionUpdate = args.Flight.PositionUpdates.OrderByDescending(q => q.TimeStamp).First();
                var location           = GetLocation(lastPositionUpdate.Location);
                var immatriculation    = GetImmatriculation(args.Flight.Aircraft);

                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - Radar contact near {Location} at {LastPositionLatitude}, {LastPositionLongitude} @ {LastPositionAltitude}ft {LastPositionHeading} - Flight Info: {FlightInfo}", DateTime.UtcNow, args.Flight.Aircraft, immatriculation, location, lastPositionUpdate.Latitude, lastPositionUpdate.Longitude, lastPositionUpdate.Altitude, lastPositionUpdate.Heading.ToHeadingArrow(), args.Flight.GetFullFlightInformation());

                //OnRadarContact?.Invoke(sender, args);
                OnRadarContact?.Invoke(this, new MovementEventArgs(args.Flight, location, immatriculation));
            };

            factory.OnCompletedWithErrors += (sender, args) =>
            {
                var immatriculation = GetImmatriculation(args.Flight.Aircraft);
                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - Flight completed with errors", DateTime.UtcNow, args.Flight.Aircraft, immatriculation);
                OnCompletedWithErrors?.Invoke(sender, args);
            };

            factory.OnContextDispose += (sender, args) =>
            {
                var immatriculation = GetImmatriculation(args.Context.Flight.Aircraft);
                _logger.LogInformation("{UtcNow}: {Aircraft} {Immatriculation} - Context disposed", DateTime.UtcNow, args.Context.Flight.Aircraft, immatriculation);
                OnContextDispose?.Invoke(sender, args);
            };
        }