00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "discrenderercomponent.h"
00020
00021 #include "graphics/meshes/discmesh.h"
00022 #include "graphics/item.h"
00023 #include "engine/gameobject.h"
00024 #include "engine/asset.h"
00025
00026 #include <QMimeData>
00027
00028 REGISTER_OBJECTTYPE( GluonEngine, DiscRendererComponent )
00029
00030 using namespace GluonEngine;
00031
00032 class DiscRendererComponent::DiscRendererComponentPrivate
00033 {
00034 public:
00035 DiscRendererComponentPrivate()
00036 {
00037 item = 0;
00038 mesh = 0;
00039 texture = 0;
00040 nbPoints = 3;
00041 radius = 5.0f;
00042 color.setRgb( 255, 255, 255 );
00043 }
00044
00045 GluonGraphics::Item* item;
00046 GluonGraphics::DiscMesh* mesh;
00047
00048 GluonEngine::Asset* texture;
00049
00050 uint nbPoints;
00051 float radius;
00052 QColor color;
00053 };
00054
00055 DiscRendererComponent::DiscRendererComponent( QObject* parent )
00056 : Component( parent )
00057 , d( new DiscRendererComponentPrivate )
00058 {
00059 }
00060
00061 DiscRendererComponent::DiscRendererComponent( const DiscRendererComponent& other )
00062 : Component( other )
00063 , d( other.d )
00064 {
00065 }
00066
00067 DiscRendererComponent::~DiscRendererComponent()
00068 {
00069 delete d;
00070 }
00071
00072 QString
00073 DiscRendererComponent::category() const
00074 {
00075 return QString( "Graphics Rendering" );
00076 }
00077
00078 void DiscRendererComponent::initialize()
00079 {
00080 if( !d->item )
00081 {
00082 d->mesh = new GluonGraphics::DiscMesh( this->gameObject()->position(), d->radius, d->nbPoints, d->color, this );
00083 d->item = new GluonGraphics::Item( d->mesh, this );
00084 d->item->setColor( d->color );
00085 }
00086
00087 if( d->texture )
00088 {
00089 if( !d->texture->isLoaded() )
00090 d->texture->load();
00091
00092 const QMimeData* data = d->texture->data();
00093 if( data->hasImage() )
00094 {
00095 d->mesh->setTexture( data->imageData().value<QImage>() );
00096 }
00097 }
00098 }
00099
00100 void DiscRendererComponent::start()
00101 {
00102 }
00103
00104 void DiscRendererComponent::draw( int timeLapse )
00105 {
00106 Q_UNUSED( timeLapse )
00107
00108 if( d->item )
00109 {
00110 d->item->setMatrix( gameObject()->transform() );
00111 }
00112 }
00113
00114 void DiscRendererComponent::cleanup()
00115 {
00116 if( d->item )
00117 {
00118 delete d->item;
00119 d->item = 0;
00120 d->mesh = 0;
00121 }
00122 }
00123
00124 float DiscRendererComponent::radius()
00125 {
00126 return d->radius;
00127 }
00128
00129 void DiscRendererComponent::setRadius( float newRadius )
00130 {
00131 d->radius = newRadius;
00132 if( gameObject() )
00133 setDisc( gameObject()->position(), d->radius, d->nbPoints, d->color );
00134 }
00135
00136 uint DiscRendererComponent::nbPoints()
00137 {
00138 return d->nbPoints;
00139 }
00140
00141 void DiscRendererComponent::setNbPoints( uint newNbPoints )
00142 {
00143 d->nbPoints = newNbPoints;
00144 if( gameObject() )
00145 setDisc( gameObject()->position(), d->radius, d->nbPoints, d->color );
00146 }
00147
00148 void DiscRendererComponent::setDisc( QVector3D position, float radius, uint nbPoints, QColor color )
00149 {
00150 if( d->mesh )
00151 d->mesh->setDisc( position, radius, nbPoints, color );
00152 }
00153
00154 void DiscRendererComponent::setColor( const QColor& color )
00155 {
00156 d->color = color;
00157 if( d->mesh )
00158 {
00159 d->mesh->setColor( color );
00160 }
00161 }
00162
00163 void DiscRendererComponent::setColor( int r, int g, int b, int a )
00164 {
00165 setColor( QColor( r, g, b, a ) );
00166 }
00167
00168 QColor DiscRendererComponent::color()
00169 {
00170 return d->color;
00171 }
00172
00173 Asset* DiscRendererComponent::texture()
00174 {
00175 return d->texture;
00176 }
00177
00178 void DiscRendererComponent::setTexture( Asset* asset )
00179 {
00180 d->texture = asset;
00181
00182 if( asset )
00183 {
00184 if( d->mesh && asset->isLoaded() )
00185 {
00186 d->mesh->setTexture( asset->data()->imageData().value<QImage>() );
00187 }
00188 }
00189 }
00190
00191 Q_EXPORT_PLUGIN2( gluon_component_discrenderer, GluonEngine::DiscRendererComponent );
00192
00193 #include "discrenderercomponent.moc"