-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCollisionChecker.java
163 lines (154 loc) · 5.44 KB
/
CollisionChecker.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//package
package Main;
//imports
import entity.Entity;
//public class CollisionChecker
public class CollisionChecker {
//Gamepanel gp
GamePanel gp;
//public CollisionChecker
public CollisionChecker(GamePanel gp) {
//this.gp=gp
this.gp=gp;
}//end public CollisionChecker
//public void checkTile
public void checkTile(Entity entity) {
//int entityLeftWorldX
int entityLeftWorldX=entity.worldX+entity.solidArea.x;
//int entityRightWorldX
int entityRightWorldX = entity.worldX+entity.solidArea.x+entity.solidArea.width;
//int entityTopWorldY
int entityTopWorldY = entity.worldY + entity.solidArea.y;
//int entityBottomWorldY
int entityBottomWorldY = entity.worldY + entity.solidArea.y+entity.solidArea.height;
//Int entity left col
int entityLeftCol = entityLeftWorldX/gp.tileSize;
//int entity Right col
int entityRightCol = entityRightWorldX/gp.tileSize;
//int entity top row
int entityTopRow = entityTopWorldY/gp.tileSize;
//Int entity bottomrow
int entityBottomRow = entityBottomWorldY/gp.tileSize;
//int tileNum1, tileNum2
int tileNum1, tileNum2;
//switch(entity.direction)
switch(entity.direction) {
case "up":
entityTopRow = (entityTopWorldY-entity.speed)/gp.tileSize;
tileNum1= gp.tileM.mapTileNum[entityLeftCol][entityTopRow];
tileNum2= gp.tileM.mapTileNum[entityRightCol][entityTopRow];
if(gp.tileM.tile[tileNum1].collision==true || gp.tileM.tile[tileNum2].collision==true) {
entity.collisionOn=true;
}
break;
case "down":
entityBottomRow = (entityBottomWorldY+entity.speed)/gp.tileSize;
tileNum1= gp.tileM.mapTileNum[entityLeftCol][entityBottomRow];
tileNum2= gp.tileM.mapTileNum[entityRightCol][entityBottomRow];
if(gp.tileM.tile[tileNum1].collision==true || gp.tileM.tile[tileNum2].collision==true) {
entity.collisionOn=true;
}
break;
case "left":
entityLeftCol = (entityLeftWorldX-entity.speed)/gp.tileSize;
tileNum1= gp.tileM.mapTileNum[entityLeftCol][entityTopRow];
tileNum2= gp.tileM.mapTileNum[entityLeftCol][entityBottomRow];
if(gp.tileM.tile[tileNum1].collision==true || gp.tileM.tile[tileNum2].collision==true) {
entity.collisionOn=true;
}
break;
case "right":
entityRightCol = (entityRightWorldX+entity.speed)/gp.tileSize;
tileNum1= gp.tileM.mapTileNum[entityRightCol][entityTopRow];
tileNum2= gp.tileM.mapTileNum[entityRightCol][entityBottomRow];
if(gp.tileM.tile[tileNum1].collision==true || gp.tileM.tile[tileNum2].collision==true) {
entity.collisionOn=true;
}
break;
}//end switch
}//checkTile
//NPC or Monster
public int checkEntity(Entity entity,Entity[]target) {
//int index=999
int index=999;
//for loop to go through target.length
for(int i=0; i<target.length;i++) {
if(target[i]!=null) {
//Get entity's solid area position
entity.solidArea.x=entity.worldX+entity.solidArea.x;
entity.solidArea.y=entity.worldY+entity.solidArea.y;
//Get the targets's solid area position
target[i].solidArea.x=target[i].worldX+target[i].solidArea.x;
target[i].solidArea.y=target[i].worldY+target[i].solidArea.y;
//switch
switch(entity.direction) {
case "up":
entity.solidArea.y-=entity.speed;
if(entity.solidArea.intersects(target[i].solidArea)) {
entity.collisionOn=true;
index=i;
}///end if
break;
case "down":
entity.solidArea.y+=entity.speed;
if(entity.solidArea.intersects(target[i].solidArea)) {
entity.collisionOn=true;
index=i;
}///end if
break;
case "left":
entity.solidArea.x-=entity.speed;
if(entity.solidArea.intersects(target[i].solidArea)) {
entity.collisionOn=true;
index=i;
}///end if
break;
case "right":
entity.solidArea.x+=entity.speed;
if(entity.solidArea.intersects(target[i].solidArea)) {
entity.collisionOn=true;
index=i;
break;
}//end switch
}//end if
entity.solidArea.x=entity.solidAreaDefaultX;
entity.solidArea.y=entity.solidAreaDefaultY;
target[i].solidArea.x=target[i].solidAreaDefaultX;
target[i].solidArea.y=target[i].solidAreaDefaultY;
}//end if
}//end for loop
//return index
return index;
}//end checkEntity method
//public boolean checkPlayer
public boolean checkPlayer(Entity entity) {
//boolean contact player equals false
boolean contactPlayer=false;
//Get entity's solid area position
entity.solidArea.x=entity.worldX+entity.solidArea.x;
entity.solidArea.y=entity.worldY+entity.solidArea.y;
//Get the player solid area position
gp.player.solidArea.x=gp.player.worldX+gp.player.solidArea.x;
gp.player.solidArea.y=gp.player.worldY+gp.player.solidArea.y;
//switch
switch(entity.direction) {
case "up":entity.solidArea.y-=entity.speed;break;
case "down":entity.solidArea.y+=entity.speed;break;
case "left":entity.solidArea.x-=entity.speed;break;
case "right":entity.solidArea.x+=entity.speed;break;
}//end switch
//when this entity intersects player
if(entity.solidArea.intersects(gp.player.solidArea)) {
//entity.CollisionOn equals true
entity.collisionOn=true;
//contact player equals true
contactPlayer=true;
}///end if
entity.solidArea.x=entity.solidAreaDefaultX;
entity.solidArea.y=entity.solidAreaDefaultY;
gp.player.solidArea.x=gp.player.solidAreaDefaultX;
gp.player.solidArea.y=gp.player.solidAreaDefaultY;
//return contactPlayer
return contactPlayer;
}//end checkPlayermethod
}//end CollisionChecker class