text: //@COPYRIGHT@//
  //
  // Copyright (c) 2011, Tomoto S. Washio
  // All rights reserved.
  //
  // Redistribution and use in source and binary forms, with or without
  // modification, are permitted provided that the following conditions are met:
  //   * Redistributions of source code must retain the above copyright
  //     notice, this list of conditions and the following disclaimer.
  //   * Redistributions in binary form must reproduce the above copyright
  //     notice, this list of conditions and the following disclaimer in the
  //     documentation and/or other materials provided with the distribution.
  //   * Neither the name of the Tomoto S. Washio nor the names of his
  //     contributors may be used to endorse or promote products derived from
  //     this software without specific prior written permission.
  // 
  // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  // DISCLAIMED. IN NO EVENT SHALL TOMOTO S. WASHIO BE LIABLE FOR ANY
  // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  //
  //@COPYRIGHT@//
  
  #ifndef _KAMEHAMEHA_RENDERER_H_
  #define _KAMEHAMEHA_RENDERER_H_
  
  #include "common.h"
  #include "vec.h"
  #include "AbstractOpenGLRenderer.h"
  #include "KamehamehaStatus.h"
  #include "TimeTicker.h"
  #include "RandomGenerator.h"
  
  class KamehamehaRenderer : public AbstractOpenGLRenderer
  {
  private:
  	KamehamehaStatus* m_kkhStatus;
  	TimeTicker m_ticker;
  
  	RandomGenerator m_rng;
  	bool m_active;
  	XV3 m_origin;
  	XV3 m_forward;
  	float m_intensity;
  	float m_lifeTime;
  
  public:
  	KamehamehaRenderer(RenderingContext* rctx, KamehamehaStatus* kkhStatus);
  	virtual ~KamehamehaRenderer();
  
  	bool isActive() { return m_active; }
  
  	float getCurrentIntensity();
  
  	void draw();
  
  	void shoot(const XV3& origin, const XV3& forward, float intensity);
  	void adjust(const XV3& origin, const XV3& forward);
  
  private:
  	void drawBeam(float radius, float length);
  	void drawIntensityText();
  	float getCurrentRadius();
  	float getCurrentLength();
  };
  
  #endif
  