2 * Copyright (c) 2015 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-actor.h"
36 BubbleActor::BubbleActor( unsigned int numberOfBubble,
37 const Vector2& movementArea)
40 mMovementArea( movementArea ),
44 mIndexGravity( Property::INVALID_INDEX ),
45 mIndexDynamicScale( Property::INVALID_INDEX ),
46 mIndexInvertedMovementArea( Property::INVALID_INDEX ),
47 mNumBubble( numberOfBubble ),
50 mActor = Actor::New();
53 void BubbleActor::MakeRenderable( Geometry geometry, TextureSet textureSet, Shader shader )
57 // This function is supposed to be called once
61 mRenderer = Renderer::New( geometry, shader );
62 mRenderer.SetTextures( textureSet );
64 mActor.AddRenderer( mRenderer );
65 mActor.SetSize( mMovementArea );
66 mActor.SetParentOrigin(ParentOrigin::TOP_LEFT);
69 mIndexGravity = mActor.RegisterProperty( "uGravity", 50.f );
70 mIndexDynamicScale = mActor.RegisterProperty( "uDynamicScale", 1.f );
72 mIndexInvertedMovementArea = mActor.RegisterProperty( "uInvertedMovementArea", Vector2(1.f,1.f) / mMovementArea );
74 mIndicesOffset.resize(9);
75 int offset = mMovementArea.Length() / 10.f;
77 mRandomSeed = time( NULL );
79 mIndicesOffset[0] = mActor.RegisterProperty( "uOffset[0]", Vector2( 0.f,0.f ) );
80 mIndicesOffset[1] = mActor.RegisterProperty( "uOffset[1]", Vector2( rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) );
81 mIndicesOffset[2] = mActor.RegisterProperty( "uOffset[2]", Vector2( rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) );
82 mIndicesOffset[3] = mActor.RegisterProperty( "uOffset[3]", Vector2(-rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) );
83 mIndicesOffset[4] = mActor.RegisterProperty( "uOffset[4]", Vector2(-rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) );
84 mIndicesOffset[5] = mActor.RegisterProperty( "uOffset[5]", Vector2( rand_r( &mRandomSeed ) % offset, 0.f ) );
85 mIndicesOffset[6] = mActor.RegisterProperty( "uOffset[6]", Vector2(-rand_r( &mRandomSeed ) % offset, 0.f ) );
86 mIndicesOffset[7] = mActor.RegisterProperty( "uOffset[7]", Vector2( 0.f, rand_r( &mRandomSeed ) % offset ) );
87 mIndicesOffset[8] = mActor.RegisterProperty( "uOffset[8]", Vector2( 0.f, -rand_r( &mRandomSeed ) % offset ) );
90 mIndiceStartEndPos.resize( mNumBubble );
91 mIndicesPercentage.resize( mNumBubble );
92 for( unsigned int i=0; i<mNumBubble; i++ )
94 std::ostringstream ossProperty;
95 ossProperty<< "uStartEndPosition["<< i << "]";
96 mIndiceStartEndPos[i] = mActor.RegisterProperty( ossProperty.str(), zeroVector );
99 ossProperty<< "uPercentage["<< i << "]";
100 mIndicesPercentage[i] = mActor.RegisterProperty( ossProperty.str(), 0.f );
104 Actor BubbleActor::GetMeshActor()
109 void BubbleActor::SetGeometry( Geometry geometry )
111 mRenderer.SetGeometry( geometry );
114 void BubbleActor::SetMovementArea( const Vector2& movementArea )
116 if( movementArea == mMovementArea)
121 mMovementArea = movementArea;
122 mActor.SetSize( mMovementArea );
123 mActor.SetProperty( mIndexInvertedMovementArea, Vector2(1.f,1.f) / mMovementArea );
125 int offset = mMovementArea.Length() / 10.f;
127 mActor.SetProperty( mIndicesOffset[1], Vector2( rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) );
128 mActor.SetProperty( mIndicesOffset[2], Vector2( rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) );
129 mActor.SetProperty( mIndicesOffset[3], Vector2(-rand_r( &mRandomSeed ) % offset, rand_r( &mRandomSeed ) % offset ) );
130 mActor.SetProperty( mIndicesOffset[4], Vector2(-rand_r( &mRandomSeed ) % offset, -rand_r( &mRandomSeed ) % offset ) );
131 mActor.SetProperty( mIndicesOffset[5], Vector2( rand_r( &mRandomSeed ) % offset, 0.f ) );
132 mActor.SetProperty( mIndicesOffset[6], Vector2(-rand_r( &mRandomSeed ) % offset, 0.f ) );
133 mActor.SetProperty( mIndicesOffset[7], Vector2( 0.f, rand_r( &mRandomSeed ) % offset ) );
134 mActor.SetProperty( mIndicesOffset[8], Vector2( 0.f, -rand_r( &mRandomSeed ) % offset ) );
137 void BubbleActor::SetStartAndEndPosition( unsigned int index, const Vector4& startAndEndPosition )
139 mActor.SetProperty( mIndiceStartEndPos[index], startAndEndPosition );
142 void BubbleActor::SetPercentage( unsigned int index, float percentage )
144 mActor.SetProperty( mIndicesPercentage[index], percentage );
147 void BubbleActor::SetGravity( float gravity )
149 mActor.SetProperty( mIndexGravity, gravity );
152 void BubbleActor::SetDynamicScale( float scale )
154 mActor.SetProperty( mIndexDynamicScale, scale );
157 Property BubbleActor::GetPercentageProperty( unsigned int index )
159 return Property( mActor, mIndicesPercentage[index] );
162 void BubbleActor::ResetProperties()
165 for( unsigned int i=0; i<mNumBubble; i++ )
167 SetPercentage( i, 0.f);
168 SetStartAndEndPosition( i, zeroVector );
172 } // namespace Internal
174 } // namespace Toolkit