blob: 42dd05dd36ec7cc445a86db0c28c15ed705440e9 [file] [log] [blame]
sm0a9f4cfd74d62010-03-18 09:32:06 +00001/*
sm0a9f43c1e67e2010-04-02 17:29:14 +00002 * Copyright (C) 2010 The Android Open Source Project
sm0a9f4cfd74d62010-03-18 09:32:06 +00003 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17package com.replica.replicaisland;
18
19/**
20 * Adjusts the scroll position of a drawable object based on the camera's focus position.
21 * May be used to scroll a ScrollableBitmap or TiledWorld to match the camera. Uses DrawableFactory
22 * to allocate fire-and-forget drawable objects every frame.
23 */
24public class ScrollerComponent extends GameComponent {
25 private int mWidth;
26 private int mHeight;
27 private float mHalfWidth;
28 private float mHalfHeight;
29 private RenderComponent mRenderComponent;
30 private float mSpeedX;
31 private float mSpeedY;
32 private Texture mTexture;
33 private TiledVertexGrid mVertGrid;
34
35 public ScrollerComponent(float speedX, float speedY, int width, int height, Texture texture) {
36 super();
37 reset();
38 setup(speedX, speedY, width, height);
39 setUseTexture(texture);
40 setPhase(ComponentPhases.PRE_DRAW.ordinal());
41 }
42
43 public ScrollerComponent(float speedX, float speedY, int width, int height, TiledVertexGrid grid) {
44 super();
45 reset();
46 setup(speedX, speedY, width, height);
47 mVertGrid = grid;
48 setPhase(ComponentPhases.PRE_DRAW.ordinal());
49 }
50
51 public ScrollerComponent() {
52 super();
53 reset();
54 setPhase(ComponentPhases.PRE_DRAW.ordinal());
55 }
56
57 @Override
58 public void reset() {
59 mWidth = 0;
60 mHeight = 0;
61 mHalfWidth = 0.0f;
62 mHalfHeight = 0.0f;
63 mRenderComponent = null;
64 mSpeedX = 0.0f;
65 mSpeedY = 0.0f;
66 mTexture = null;
67 mVertGrid = null;
68 }
69
70 public void setScrollSpeed(float speedX, float speedY) {
71 mSpeedX = speedX;
72 mSpeedY = speedY;
73 }
74
75 public void setup(float speedX, float speedY, int width, int height) {
76 mSpeedX = speedX;
77 mSpeedY = speedY;
78 mWidth = width;
79 mHeight = height;
80 mHalfWidth = sSystemRegistry.contextParameters.gameWidth / 2.0f; //width / 2.0f;
81 mHalfHeight = sSystemRegistry.contextParameters.gameHeight / 2.0f; //height / 2.0f;
82 }
83
84 public void setUseTexture(Texture texture) {
85 mTexture = texture;
86 }
87
88 @Override
89 public void update(float timeDelta, BaseObject parent) {
90 final DrawableFactory drawableFactory = sSystemRegistry.drawableFactory;
91 if (mRenderComponent != null && drawableFactory != null) {
92 ScrollableBitmap background;
93 if (mVertGrid != null) {
94 TiledBackgroundVertexGrid bg = drawableFactory.allocateTiledBackgroundVertexGrid();
95 bg.setGrid(mVertGrid);
96 background = bg;
97 } else {
98 background = drawableFactory.allocateScrollableBitmap();
99 background.setTexture(mTexture);
100 }
101
102 background.setWidth(mWidth);
103 background.setHeight(mHeight);
104
105 CameraSystem camera = sSystemRegistry.cameraSystem;
106
107 float originX = camera.getFocusPositionX() - mHalfWidth;
108 float originY = camera.getFocusPositionY() - mHalfHeight;
109
110 originX *= mSpeedX;
111 originY *= mSpeedY;
112
113 background.setScrollOrigin(originX, originY);
114 mRenderComponent.setDrawable(background);
115 }
116 }
117
118 public void setRenderComponent(RenderComponent render) {
119 mRenderComponent = render;
120 }
121}