• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /*
2   * Copyright (C) 2010 The Android Open Source Project
3   *
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  
17  package 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   */
24  public 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  
ScrollerComponent(float speedX, float speedY, int width, int height, Texture texture)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  
ScrollerComponent(float speedX, float speedY, int width, int height, TiledVertexGrid grid)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  
ScrollerComponent()51      public ScrollerComponent() {
52          super();
53          reset();
54          setPhase(ComponentPhases.PRE_DRAW.ordinal());
55      }
56  
57      @Override
reset()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  
setScrollSpeed(float speedX, float speedY)70      public void setScrollSpeed(float speedX, float speedY) {
71          mSpeedX = speedX;
72          mSpeedY = speedY;
73      }
74  
setup(float speedX, float speedY, int width, int height)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  
setUseTexture(Texture texture)84      public void setUseTexture(Texture texture) {
85          mTexture = texture;
86      }
87  
88      @Override
update(float timeDelta, BaseObject parent)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  
setRenderComponent(RenderComponent render)118      public void setRenderComponent(RenderComponent render) {
119          mRenderComponent = render;
120      }
121  }
122