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); }
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; }