public void Update(Orbiter orbiter)
        {
            if (State != OrbiterState.Idle && !Continue())
            {
                return;
            }

            if (!orbiter.Target)
            {
                return;
            }

            //Proceed with firing process

            if (State == OrbiterState.Idle ||
                State == OrbiterState.Cooldown)
            {
                SetState(OrbiterState.Charging);
            }

            else if (State == OrbiterState.Charging)
            {
                SetState(OrbiterState.Firing);
            }

            else if (State == OrbiterState.Firing)
            {
                SetState(OrbiterState.Cooldown);
            }
        }
 public virtual void Start <TOrbiter>(TOrbiter orbiter)
     where TOrbiter : Orbiter
 {
     SelfOrbiter = orbiter;
     SetState(OrbiterState.Cooldown);
 }