private int CreateBeam(Position location, BeamState beamState, int duration, double bulletTime, int visibility)
        {
            var delay    = 0;
            var beamType = GetBeamType();

            if (beamType <= 0)
            {
                return(delay);
            }

            delay = BeamHelper.GetBeamDelay(beamType);

            if (duration == 0)
            {
                duration = (int)CycleTime.TotalMilliseconds;
            }

            Debug.Assert(ParentComponent != null, "ParentComponent != null");
            var slot = ParentComponent.Type == RobotComponentType.Chassis ? Slot : 0xff; // -1

            var builder = Beam.NewBuilder().WithType(beamType)
                          .WithSlot(slot)
                          .WithSource(ParentRobot)
                          .WithState(beamState)
                          .WithBulletTime(bulletTime)
                          .WithDuration(duration)
                          .WithTargetPosition(location)
                          .WithVisibility(visibility);

            Zone.CreateBeam(builder);
            return(delay);
        }
예제 #2
0
    private void ChargeUpStart()
    {
        currentBeamState = BeamState.ChargeUp;

        // Start playing Charge up sound
        SetAudioClip(chargeUpClip, false);
    }
예제 #3
0
    /// <summary>
    /// A trigger collider can take the beam from the base state to the touched state and can
    /// also cancel current vibration. Touching the beam also plays the assigned note and sends
    /// the configured MIDI output for the "height" interaction type.
    /// </summary>
    /// <param name="cd">The collider that is entering the beam</param>
    void OnTriggerEnter(Collider cd)
    {
        if (!InputManager.IsUserInput(cd))
        {
            return;
        }

        if (m_notouchframes > 0)
        {
            return;
        }

        if (m_vibrating)
        {
            m_vibrating = false;
            m_jointVel  = new Vector3(0, 0, 0);
            m_jointPos  = new Vector3(0, 0, 0);
            GenerateMesh();
        }

        if (m_state == BeamState.Base || m_state == BeamState.Touched)
        {
            m_state             = BeamState.Touched;
            m_renderer.material = touch;
            SetContactPoint(cd);

            SendInteractionOutput(m_heightInteractionType, (m_jointPos.y * m_heightInteractionSensitivity) + 0.5f);

            m_midiout.PlayNote();
            CheckGrab(cd);
        }
    }
예제 #4
0
    private void BeamRegressStart()
    {
        currentBeamState           = BeamState.Regressing;
        beamPseudoCollider.enabled = false;

        SetAudioClip(beamRegressingClip, false);
    }
예제 #5
0
    public override void Tick()
    {
        if (CurrentBeamState == BeamState.Beaming)
        {
            float maxTime = TimePerTick * BeamTicks;
            StatusPercent = 1.0f - (CompletedTime / maxTime);

            TickProgress  += Time.deltaTime;
            CompletedTime += Time.deltaTime;

            while (TickProgress > TimePerTick)
            {
                CompletedTicks++;
                TickProgress -= TimePerTick;
                OnBeamEffect();

                if (CompletedTicks >= BeamTicks)
                {
                    CurrentBeamState = BeamState.Passive;
                    StatusString     = null;
                    break;
                }
            }
        }
        else
        {
            base.Tick();
        }
    }
예제 #6
0
        // Set the beam state
        protected virtual void SetBeamState(BeamState newBeamState)
        {
            switch (newBeamState)
            {
            case BeamState.FadingIn:

                currentBeamState   = BeamState.FadingIn;
                beamStateStartTime = Time.time - beamLevel * beamFadeInTime;        // Assume linear fade in/out
                break;

            case BeamState.FadingOut:

                currentBeamState   = BeamState.FadingOut;
                beamStateStartTime = Time.time - (1 - beamLevel) * beamFadeOutTime;         // Assume linear fade in/out
                break;

            case BeamState.Sustaining:

                currentBeamState   = BeamState.Sustaining;
                beamStateStartTime = Time.time;
                break;

            case BeamState.Off:

                currentBeamState   = BeamState.Off;
                beamStateStartTime = Time.time;
                break;
            }

            onBeamStateChanged.Invoke(newBeamState);
        }
예제 #7
0
 protected override void OnWarmupComplete()
 {
     CurrentBeamState = BeamState.Beaming;
     CompletedTicks   = 0;
     TickProgress     = 0.0f;
     CompletedTime    = 0.0f;
     StatusString     = "Channeling";
 }
예제 #8
0
 /// <summary>
 /// Begin grabbing / dragging the beam.
 /// </summary>
 /// <param name="cd">The collider that is initiating a grab on the beam</param>
 void BeginGrab(Collider cd)
 {
     m_grabber           = cd;
     m_state             = BeamState.Grabbed;
     m_vibrating         = false;
     m_renderer.material = grab;
     m_midiout.PlayNote();
     SetContactPoint(cd);
 }
예제 #9
0
 /// <summary>
 /// Play audio when beam state changes.
 /// </summary>
 /// <param name="newBeamState">The new beam state.</param>
 public virtual void OnBeamStateChanged(BeamState newBeamState)
 {
     if (newBeamState == BeamState.FadingIn)
     {
         if (beamStartedAudio != null)
         {
             beamStartedAudio.Play();
         }
     }
 }
예제 #10
0
 /// <summary>
 /// End the grabbed state, enter the vibrating phase
 /// </summary>
 void EndGrab()
 {
     m_multigrab.RegisterRelease(m_grabber);
     m_notouchframes     = 10;
     m_grabber           = null;
     m_state             = BeamState.Base;
     m_vibrating         = true;
     m_renderer.material = notouch;
     m_midiout.StopNote();
 }
예제 #11
0
 public override void Interupt()
 {
     base.Interupt();
     if (CurrentBeamState == BeamState.Beaming)
     {
         CurrentBeamState = BeamState.Passive;
         StatusString     = null;
         StatusPercent    = 0.0f;
     }
 }
예제 #12
0
    private void BeamGrowStart()
    {
        currentBeamState           = BeamState.Firing;
        beamPseudoCollider.enabled = true;

        // Start checking for Damagable Entities
        StartBeamCollisionCheck();

        // Start playing Beam Loop sound
        SetAudioClip(beamFiringClip, true);
    }
예제 #13
0
    /// <summary>
    /// Called when a trigger collider is leaving the beam. Transitions the beam from the "touched"
    /// state to the "base" state and stops any current note.
    /// </summary>
    /// <param name="cd">The collider that is leaving the beam</param>
    void OnTriggerExit(Collider cd)
    {
        if (!InputManager.IsUserInput(cd))
        {
            return;
        }

        if (m_state == BeamState.Touched)
        {
            m_state             = BeamState.Base;
            m_renderer.material = notouch;
            m_midiout.StopNote();
        }
    }
예제 #14
0
    public void StopBeam()
    {
        if (beamChargePercentage < beamParticleDeactivationPercentage && beamChargeUpPS.isPlaying)
        {
            beamChargeUpPS.Stop();
        }

        SetFakeLightAlpha(0f);
        SetBeamSize(0f, 0f, 0f, 0f);
        SetTimer(0f);

        StopBeamCollisionCheck();

        currentBeamState = BeamState.Inactive;

        if (beamChargeUpCoroutine != null)
        {
            StopCoroutine(beamChargeUpCoroutine);

            beamChargeUpCoroutine = null;
        }
    }
예제 #15
0
 public virtual void OnInteractableTarget(SpaceCaster caster)
 {
     State = BeamState.OnInteractableTarget;
 }
 protected void CreateBeam(Unit target, BeamState beamState)
 {
     CreateBeam(target, beamState, 0, 0, 0);
 }
예제 #17
0
 public BeamCandidate(BeamState <T> state)
 {
     State = state.State; Action = null; Score = state.Score;
 }
 protected int CreateBeam(Unit target, BeamState beamState, int duration, double bulletTime)
 {
     return(CreateBeam(target, beamState, duration, bulletTime, 0));
 }
 protected void CreateBeam(Position location, BeamState beamState)
 {
     CreateBeam(location, beamState, 0, 0, 0);
 }
 protected int CreateBeam(Position location, BeamState beamState, int duration, double bulletTime)
 {
     return(CreateBeam(location, beamState, duration, bulletTime, 0));
 }
예제 #21
0
 public virtual void Off(SpaceCaster caster)
 {
     State = BeamState.Off;
 }
 public BeamBuilder WithState(BeamState beamState)
 {
     _state = beamState;
     return(this);
 }
예제 #23
0
 public virtual void OnTarget(SpaceCaster caster)
 {
     State = BeamState.OnTarget;
 }
예제 #24
0
 public virtual void NearTarget(SpaceCaster caster)
 {
     State = BeamState.NearTarget;
 }
예제 #25
0
 public virtual void Default(SpaceCaster caster)
 {
     State = BeamState.Default;
 }