2 * Copyright (c) 2021 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"
33 BubbleRenderer::BubbleRenderer()
38 mIndexGravity(Property::INVALID_INDEX),
39 mIndexDynamicScale(Property::INVALID_INDEX),
40 mIndexInvertedMovementArea(Property::INVALID_INDEX)
44 void BubbleRenderer::Initialize(unsigned int numberOfBubble, const Vector2& movementArea, Geometry geometry, TextureSet textureSet, Shader shader)
48 // This function is supposed to be called once
52 mRenderer = Renderer::New(geometry, shader);
53 mRenderer.SetTextures(textureSet);
56 mIndexGravity = mRenderer.RegisterProperty("uGravity", 50.f);
57 mIndexDynamicScale = mRenderer.RegisterProperty("uDynamicScale", 1.f);
59 mIndexInvertedMovementArea = mRenderer.RegisterProperty("uInvertedMovementArea", Vector2(1.f, 1.f) / movementArea);
61 mIndicesOffset.resize(9);
62 int offset = movementArea.Length() / 10.f;
64 unsigned int seed = time(NULL);
66 mIndicesOffset[0] = mRenderer.RegisterProperty("uOffset[0]", Vector2(0.f, 0.f));
67 mIndicesOffset[1] = mRenderer.RegisterProperty("uOffset[1]", Vector2(rand_r(&seed) % offset, rand_r(&seed) % offset));
68 mIndicesOffset[2] = mRenderer.RegisterProperty("uOffset[2]", Vector2(rand_r(&seed) % offset, -rand_r(&seed) % offset));
69 mIndicesOffset[3] = mRenderer.RegisterProperty("uOffset[3]", Vector2(-rand_r(&seed) % offset, rand_r(&seed) % offset));
70 mIndicesOffset[4] = mRenderer.RegisterProperty("uOffset[4]", Vector2(-rand_r(&seed) % offset, -rand_r(&seed) % offset));
71 mIndicesOffset[5] = mRenderer.RegisterProperty("uOffset[5]", Vector2(rand_r(&seed) % offset, 0.f));
72 mIndicesOffset[6] = mRenderer.RegisterProperty("uOffset[6]", Vector2(-rand_r(&seed) % offset, 0.f));
73 mIndicesOffset[7] = mRenderer.RegisterProperty("uOffset[7]", Vector2(0.f, rand_r(&seed) % offset));
74 mIndicesOffset[8] = mRenderer.RegisterProperty("uOffset[8]", Vector2(0.f, -rand_r(&seed) % offset));
77 mIndiceStartEndPos.resize(numberOfBubble);
78 mIndicesPercentage.resize(numberOfBubble);
79 for(unsigned int i = 0; i < numberOfBubble; i++)
81 std::ostringstream ossProperty;
82 ossProperty << "uStartEndPosition[" << i << "]";
83 mIndiceStartEndPos[i] = mRenderer.RegisterProperty(ossProperty.str(), zeroVector);
86 ossProperty << "uPercentage[" << i << "]";
87 mIndicesPercentage[i] = mRenderer.RegisterProperty(ossProperty.str(), 0.f);
91 Renderer& BubbleRenderer::GetRenderer()
96 void BubbleRenderer::SetGeometry(Geometry geometry)
98 mRenderer.SetGeometry(geometry);
101 void BubbleRenderer::SetStartAndEndPosition(unsigned int index, const Vector4& startAndEndPosition)
103 mRenderer.SetProperty(mIndiceStartEndPos[index], startAndEndPosition);
106 void BubbleRenderer::SetPercentage(unsigned int index, float percentage)
108 mRenderer.SetProperty(mIndicesPercentage[index], percentage);
111 void BubbleRenderer::SetGravity(float gravity)
113 mRenderer.SetProperty(mIndexGravity, gravity);
116 void BubbleRenderer::SetDynamicScale(float scale)
118 mRenderer.SetProperty(mIndexDynamicScale, scale);
121 Property BubbleRenderer::GetPercentageProperty(unsigned int index)
123 return Property(mRenderer, mIndicesPercentage[index]);
126 void BubbleRenderer::ResetProperties()
129 for(unsigned int i = 0; i < mIndicesPercentage.size(); i++)
131 SetPercentage(i, 0.f);
132 SetStartAndEndPosition(i, zeroVector);
136 } // namespace Internal
138 } // namespace Toolkit