• 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  * A system for testing positions against "hot spots" embedded in the level tile map data.
21  * A level may contain a layer of "hot spots," tiles that provide a hint to the game objects about
22  * how to act in that particular area of the game world.  Hot spots are commonly used to direct AI
23  * characters, or to define areas where special collision rules apply (e.g. regions that cause
24  * instant death when entered).
25  */
26 public class HotSpotSystem extends BaseObject {
27     TiledWorld mWorld;
28 
29     public class HotSpotType {
30         public static final int NONE = -1;
31         public static final int GO_RIGHT = 0;
32         public static final int GO_LEFT = 1;
33         public static final int GO_UP = 2;
34         public static final int GO_DOWN = 3;
35 
36         public static final int WAIT_SHORT = 4;
37         public static final int WAIT_MEDIUM = 5;
38         public static final int WAIT_LONG = 6;
39 
40         public static final int ATTACK = 7;
41         public static final int TALK = 8;
42         public static final int DIE = 9;
43         public static final int WALK_AND_TALK = 10;
44         public static final int TAKE_CAMERA_FOCUS = 11;
45         public static final int RELEASE_CAMERA_FOCUS = 12;
46         public static final int END_LEVEL = 13;
47         public static final int GAME_EVENT = 14;
48         public static final int NPC_RUN_QUEUED_COMMANDS = 15;
49 
50         public static final int NPC_GO_RIGHT = 16;
51         public static final int NPC_GO_LEFT = 17;
52         public static final int NPC_GO_UP = 18;
53         public static final int NPC_GO_DOWN = 19;
54         public static final int NPC_GO_UP_RIGHT = 20;
55         public static final int NPC_GO_UP_LEFT = 21;
56         public static final int NPC_GO_DOWN_LEFT = 22;
57         public static final int NPC_GO_DOWN_RIGHT = 23;
58         public static final int NPC_GO_TOWARDS_PLAYER = 24;
59         public static final int NPC_GO_RANDOM = 25;
60         public static final int NPC_GO_UP_FROM_GROUND = 26;
61         public static final int NPC_GO_DOWN_FROM_CEILING = 27;
62         public static final int NPC_STOP = 28;
63         public static final int NPC_SLOW = 29;
64 
65 
66         public static final int NPC_SELECT_DIALOG_1_1 = 32;
67         public static final int NPC_SELECT_DIALOG_1_2 = 33;
68         public static final int NPC_SELECT_DIALOG_1_3 = 34;
69         public static final int NPC_SELECT_DIALOG_1_4 = 35;
70         public static final int NPC_SELECT_DIALOG_1_5 = 36;
71 
72         public static final int NPC_SELECT_DIALOG_2_1 = 38;
73         public static final int NPC_SELECT_DIALOG_2_2 = 39;
74         public static final int NPC_SELECT_DIALOG_2_3 = 40;
75         public static final int NPC_SELECT_DIALOG_2_4 = 41;
76         public static final int NPC_SELECT_DIALOG_2_5 = 42;
77 
78 
79 
80     }
81 
HotSpotSystem()82     public HotSpotSystem() {
83         super();
84     }
85 
86     @Override
reset()87     public void reset() {
88         mWorld = null;
89     }
90 
setWorld(TiledWorld world)91     public final void setWorld(TiledWorld world) {
92         mWorld = world;
93     }
94 
getHotSpot(float worldX, float worldY)95     public int getHotSpot(float worldX, float worldY) {
96         //TOOD: take a region?  how do we deal with multiple hot spot intersections?
97         int result = HotSpotType.NONE;
98         if (mWorld != null) {
99 
100             final int xTile = getHitTileX(worldX);
101             final int yTile = getHitTileY(worldY);
102 
103             result = mWorld.getTile(xTile, yTile);
104         }
105 
106         return result;
107     }
108 
getHotSpotByTile(int tileX, int tileY)109     public int getHotSpotByTile(int tileX, int tileY) {
110         //TOOD: take a region?  how do we deal with multiple hot spot intersections?
111         int result = HotSpotType.NONE;
112         if (mWorld != null) {
113             result = mWorld.getTile(tileX, tileY);
114         }
115 
116         return result;
117     }
118 
getHitTileX(float worldX)119     public final int getHitTileX(float worldX) {
120         int xTile = 0;
121         LevelSystem level = sSystemRegistry.levelSystem;
122         if (mWorld != null && level != null) {
123             final float worldPixelWidth = level.getLevelWidth();
124             xTile = (int)Math.floor(((worldX) / worldPixelWidth) * mWorld.getWidth());
125         }
126         return xTile;
127     }
128 
getHitTileY(float worldY)129     public final int getHitTileY(float worldY) {
130         int yTile = 0;
131         LevelSystem level = sSystemRegistry.levelSystem;
132         if (mWorld != null && level != null) {
133             final float worldPixelHeight = level.getLevelHeight();
134             // TODO: it is stupid to keep doing this space conversion all over the code.  Fix this
135             // in the TiledWorld code!
136             final float flippedY = worldPixelHeight - (worldY);
137             yTile = (int)Math.floor((flippedY / worldPixelHeight) * mWorld.getHeight());
138         }
139         return yTile;
140     }
141 
getTileCenterWorldPositionX(int tileX)142     public final float getTileCenterWorldPositionX(int tileX) {
143         float worldX = 0.0f;
144     	LevelSystem level = sSystemRegistry.levelSystem;
145         if (mWorld != null && level != null) {
146             final float tileWidth = level.getLevelWidth() / mWorld.getWidth();
147             worldX = (tileX * tileWidth) + (tileWidth / 2.0f);
148         }
149         return worldX;
150     }
151 
152 }
153