Skip to content

Commit 1a37e44

Browse files
author
Picoseconds
committed
feat: hide pit traps from enemies
1 parent 0ae7e0c commit 1a37e44

File tree

4 files changed

+34
-6
lines changed

4 files changed

+34
-6
lines changed

src/items/items.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,10 @@ function getGameObjPlaceLimit(item: ItemType) {
184184
return items[item].group.limit || Infinity;
185185
}
186186

187+
function shouldHideFromEnemy(item: ItemType) {
188+
return !!items[item].hideFromEnemy;
189+
}
190+
187191
export {
188192
PrimaryWeapons,
189193
SecondaryWeapons,
@@ -205,5 +209,6 @@ export {
205209
getStructureDamage,
206210
getGameObjHealth,
207211
getGameObjDamage,
208-
getGameObjPlaceLimit
212+
getGameObjPlaceLimit,
213+
shouldHideFromEnemy
209214
};

src/moomoo/Game.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,6 @@ export default class Game {
915915
)
916916
)
917917
}
918-
919918
}
920919
break;
921920
case PacketType.CLAN_ACC_JOIN:
@@ -929,6 +928,9 @@ export default class Game {
929928
player.clanName = tribe.name;
930929

931930
this.state.joinClan(player, tribe);
931+
932+
// for pit traps to appear
933+
this.sendGameObjects(player);
932934
}
933935
}
934936

src/moomoo/Physics.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ import { getWeaponAttackDetails, hasCollision, getGameObjDamage } from "../items
55
import GameState from "./GameState";
66
import { ItemType } from "../items/UpgradeItems";
77
import { getHat } from "./Hats";
8+
import { PacketType } from "../packets/PacketType";
9+
import { Packet } from "../packets/Packet";
10+
import { PacketFactory } from "../packets/PacketFactory";
811

912
function collideCircles(pos1: Vec2, r1: number, pos2: Vec2, r2: number) {
1013
return pos1.distance(pos2) <= r1 + r2;
@@ -33,14 +36,25 @@ function collidePlayerGameObject(player: Player, gameObj: GameObject) {
3336

3437
function tryMovePlayer(player: Player, delta: number, xVel: number, yVel: number, state: GameState) {
3538
let inTrap = false;
39+
let packetFactory = PacketFactory.getInstance();
3640

3741
let newLocation = new Vec2(
3842
player.location.x,
3943
player.location.y
4044
);
4145

42-
for (let gameObj of player.getNearbyGameObjects(state)) {
46+
for (let gameObj of player.getNearbyGameObjects(state, true)) {
4347
if (gameObj.isPlayerGameObject() && collidePlayerGameObject(player, gameObj)) {
48+
if (!player.client?.seenGameObjects.includes(gameObj.id)) {
49+
player.client?.socket.send(
50+
packetFactory.serializePacket(
51+
new Packet(PacketType.LOAD_GAME_OBJ, [gameObj.getData()])
52+
)
53+
);
54+
55+
player.client?.seenGameObjects.push(gameObj.id);
56+
}
57+
4458
if (
4559
gameObj.data === ItemType.PitTrap &&
4660
gameObj.isEnemy(player, state.tribes)

src/moomoo/Player.ts

+10-3
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ import {
1919
getGameObjID,
2020
getGameObjHealth,
2121
getGameObjPlaceLimit,
22-
getGroupID
22+
getGroupID,
23+
shouldHideFromEnemy
2324
} from "../items/items";
2425
import { ItemType } from "../items/UpgradeItems";
2526
import GameObject from "../gameobjects/GameObject";
@@ -408,7 +409,7 @@ export default class Player extends Entity {
408409
}
409410
}
410411

411-
public getNearbyGameObjects(state: GameState) {
412+
public getNearbyGameObjects(state: GameState, includeHidden = false) {
412413
const RADIUS = process.env.GAMEOBJECT_NEARBY_RADIUS || 1250;
413414

414415
let gameObjects = [];
@@ -420,7 +421,13 @@ export default class Player extends Entity {
420421
[gameObject.location.x, gameObject.location.y]
421422
) < RADIUS
422423
) {
423-
gameObjects.push(gameObject);
424+
if (
425+
!(gameObject.isPlayerGameObject() &&
426+
shouldHideFromEnemy(gameObject.data) &&
427+
gameObject.isEnemy(this, state.tribes)) || includeHidden
428+
) {
429+
gameObjects.push(gameObject);
430+
}
424431
}
425432
}
426433

0 commit comments

Comments
 (0)