Пример #1
0
 public bool BeginInfuse(TransmissibleType type, OnTransmissibleComplete callback)
 {
     if (m_state == State.Empty)
     {
         this.type  = type;
         m_state    = State.Infusing;
         m_callback = callback;
         return(true);
     }
     return(false);
 }
Пример #2
0
    public void DetectObjects()
    {
        if (m_target)
        {
            m_target.GetComponent <Highlightable>().highlighted = false;
        }

        Transmissible newTarget = DetectObject();

        if (m_target != newTarget)
        {
            if (m_target)
            {
                if (m_target.state == Transmissible.State.Infusing)
                {
                    m_target.EndInfuse();
                    m_tank.EndDrain();
                }
                else if (m_target.state == Transmissible.State.Draining)
                {
                    m_target.EndDrain();
                    m_tank.EndInfuse();
                }
            }
        }

        if (newTarget)
        {
            m_target = newTarget;
            m_target.GetComponent <Highlightable>().highlighted = true;

            m_source.pitch  = m_target.progress + 0.5f;
            m_source.volume = m_soundCurve.Evaluate(m_target.progress);
        }
        else
        {
            m_target = null;
        }



        if (m_input.isDrainPressed && m_target && m_currentType == null)
        {
            if (m_target.state == Transmissible.State.Full)
            {
                //m_source.clip = m_target.type.drainClip;
                m_source.Play();

                TransmissibleType type = m_target.BeginDrain((Transmissible t) =>
                {
                    m_currentType = t.type;
                });

                m_tank.BeginInfuse(m_target.type, (Transmissible t) => { });
            }
        }
        else if (!m_input.isDrainPressed && m_target && m_target.state == Transmissible.State.Draining)
        {
            m_target.EndDrain();
            m_tank.EndInfuse();
        }
        else if (m_input.isInfusePressed && m_target && m_target.state == Transmissible.State.Empty && m_currentType != null)
        {
            //m_source.clip = m_target.type.infuseClip;
            m_source.Play();

            m_target.BeginInfuse(m_currentType, (Transmissible t) =>
            {
                // TODO: update visuals
                m_currentType = null;
            });
            m_tank.BeginDrain((Transmissible t) => { });
        }
        else if (!m_input.isInfusePressed && m_target && m_target.state == Transmissible.State.Infusing)
        {
            m_target.EndInfuse();
            m_tank.EndDrain();
        }

        //m_prevObjects = objects;
    }