blob: 42dd05dd36ec7cc445a86db0c28c15ed705440e9 [file] [log] [blame]
/*
* Copyright (C) 2010 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.replica.replicaisland;
/**
* Adjusts the scroll position of a drawable object based on the camera's focus position.
* May be used to scroll a ScrollableBitmap or TiledWorld to match the camera. Uses DrawableFactory
* to allocate fire-and-forget drawable objects every frame.
*/
public class ScrollerComponent extends GameComponent {
private int mWidth;
private int mHeight;
private float mHalfWidth;
private float mHalfHeight;
private RenderComponent mRenderComponent;
private float mSpeedX;
private float mSpeedY;
private Texture mTexture;
private TiledVertexGrid mVertGrid;
public ScrollerComponent(float speedX, float speedY, int width, int height, Texture texture) {
super();
reset();
setup(speedX, speedY, width, height);
setUseTexture(texture);
setPhase(ComponentPhases.PRE_DRAW.ordinal());
}
public ScrollerComponent(float speedX, float speedY, int width, int height, TiledVertexGrid grid) {
super();
reset();
setup(speedX, speedY, width, height);
mVertGrid = grid;
setPhase(ComponentPhases.PRE_DRAW.ordinal());
}
public ScrollerComponent() {
super();
reset();
setPhase(ComponentPhases.PRE_DRAW.ordinal());
}
@Override
public void reset() {
mWidth = 0;
mHeight = 0;
mHalfWidth = 0.0f;
mHalfHeight = 0.0f;
mRenderComponent = null;
mSpeedX = 0.0f;
mSpeedY = 0.0f;
mTexture = null;
mVertGrid = null;
}
public void setScrollSpeed(float speedX, float speedY) {
mSpeedX = speedX;
mSpeedY = speedY;
}
public void setup(float speedX, float speedY, int width, int height) {
mSpeedX = speedX;
mSpeedY = speedY;
mWidth = width;
mHeight = height;
mHalfWidth = sSystemRegistry.contextParameters.gameWidth / 2.0f; //width / 2.0f;
mHalfHeight = sSystemRegistry.contextParameters.gameHeight / 2.0f; //height / 2.0f;
}
public void setUseTexture(Texture texture) {
mTexture = texture;
}
@Override
public void update(float timeDelta, BaseObject parent) {
final DrawableFactory drawableFactory = sSystemRegistry.drawableFactory;
if (mRenderComponent != null && drawableFactory != null) {
ScrollableBitmap background;
if (mVertGrid != null) {
TiledBackgroundVertexGrid bg = drawableFactory.allocateTiledBackgroundVertexGrid();
bg.setGrid(mVertGrid);
background = bg;
} else {
background = drawableFactory.allocateScrollableBitmap();
background.setTexture(mTexture);
}
background.setWidth(mWidth);
background.setHeight(mHeight);
CameraSystem camera = sSystemRegistry.cameraSystem;
float originX = camera.getFocusPositionX() - mHalfWidth;
float originY = camera.getFocusPositionY() - mHalfHeight;
originX *= mSpeedX;
originY *= mSpeedY;
background.setScrollOrigin(originX, originY);
mRenderComponent.setDrawable(background);
}
}
public void setRenderComponent(RenderComponent render) {
mRenderComponent = render;
}
}