2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "bubble-renderer.h"
36 BubbleRenderer::BubbleRenderer()
41 mIndexGravity( Property::INVALID_INDEX ),
42 mIndexDynamicScale( Property::INVALID_INDEX ),
43 mIndexInvertedMovementArea( Property::INVALID_INDEX )
47 void BubbleRenderer::Initialize( unsigned int numberOfBubble, const Vector2& movementArea, Geometry geometry, TextureSet textureSet, Shader shader )
51 // This function is supposed to be called once
55 mRenderer = Renderer::New( geometry, shader );
56 mRenderer.SetTextures( textureSet );
59 mIndexGravity = mRenderer.RegisterProperty( "uGravity", 50.f );
60 mIndexDynamicScale = mRenderer.RegisterProperty( "uDynamicScale", 1.f );
62 mIndexInvertedMovementArea = mRenderer.RegisterProperty( "uInvertedMovementArea", Vector2(1.f,1.f) / movementArea );
64 mIndicesOffset.resize(9);
65 int offset = movementArea.Length() / 10.f;
67 unsigned int seed = time( NULL );
69 mIndicesOffset[0] = mRenderer.RegisterProperty( "uOffset[0]", Vector2( 0.f,0.f ) );
70 mIndicesOffset[1] = mRenderer.RegisterProperty( "uOffset[1]", Vector2( rand_r( &seed ) % offset, rand_r( &seed ) % offset ) );
71 mIndicesOffset[2] = mRenderer.RegisterProperty( "uOffset[2]", Vector2( rand_r( &seed ) % offset, -rand_r( &seed ) % offset ) );
72 mIndicesOffset[3] = mRenderer.RegisterProperty( "uOffset[3]", Vector2(-rand_r( &seed ) % offset, rand_r( &seed ) % offset ) );
73 mIndicesOffset[4] = mRenderer.RegisterProperty( "uOffset[4]", Vector2(-rand_r( &seed ) % offset, -rand_r( &seed ) % offset ) );
74 mIndicesOffset[5] = mRenderer.RegisterProperty( "uOffset[5]", Vector2( rand_r( &seed ) % offset, 0.f ) );
75 mIndicesOffset[6] = mRenderer.RegisterProperty( "uOffset[6]", Vector2(-rand_r( &seed ) % offset, 0.f ) );
76 mIndicesOffset[7] = mRenderer.RegisterProperty( "uOffset[7]", Vector2( 0.f, rand_r( &seed ) % offset ) );
77 mIndicesOffset[8] = mRenderer.RegisterProperty( "uOffset[8]", Vector2( 0.f, -rand_r( &seed ) % offset ) );
80 mIndiceStartEndPos.resize( numberOfBubble );
81 mIndicesPercentage.resize( numberOfBubble );
82 for( unsigned int i=0; i<numberOfBubble; i++ )
84 std::ostringstream ossProperty;
85 ossProperty<< "uStartEndPosition["<< i << "]";
86 mIndiceStartEndPos[i] = mRenderer.RegisterProperty( ossProperty.str(), zeroVector );
89 ossProperty<< "uPercentage["<< i << "]";
90 mIndicesPercentage[i] = mRenderer.RegisterProperty( ossProperty.str(), 0.f );
94 Renderer& BubbleRenderer::GetRenderer()
99 void BubbleRenderer::SetGeometry( Geometry geometry )
101 mRenderer.SetGeometry( geometry );
104 void BubbleRenderer::SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition )
106 mRenderer.SetProperty( mIndiceStartEndPos[index], startAndEndPosition );
109 void BubbleRenderer::SetPercentage( unsigned int index, float percentage )
111 mRenderer.SetProperty( mIndicesPercentage[index], percentage );
114 void BubbleRenderer::SetGravity( float gravity )
116 mRenderer.SetProperty( mIndexGravity, gravity );
119 void BubbleRenderer::SetDynamicScale( float scale )
121 mRenderer.SetProperty( mIndexDynamicScale, scale );
124 Property BubbleRenderer::GetPercentageProperty( unsigned int index )
126 return Property( mRenderer, mIndicesPercentage[index] );
129 void BubbleRenderer::ResetProperties()
132 for( unsigned int i=0; i<mIndicesPercentage.size(); i++ )
134 SetPercentage( i, 0.f);
135 SetStartAndEndPosition( i, zeroVector );
139 } // namespace Internal
141 } // namespace Toolkit