Skip to content

Commit 974dce5

Browse files
committed
Add pet eating, drinking, playing and commands
1 parent d34b5ce commit 974dce5

27 files changed

+773
-277
lines changed

Kepler-Server/src/main/java/org/alexdev/kepler/game/commands/registered/PickAllCommand.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ public void handleCommand(Entity entity, String message, String[] args) {
5151
for (Item item : itemsToPickup) {
5252
item.setOwnerId(player.getDetails().getId());
5353

54-
player.getRoomUser().getRoom().getMapping().removeItem(player, item);
54+
player.getRoomUser().getRoom().getMapping().pickupItem(player, item);
5555
player.getInventory().addItem(item);
5656
}
5757

Kepler-Server/src/main/java/org/alexdev/kepler/game/item/base/ItemBehaviour.java

+2
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,7 @@ public enum ItemBehaviour {
4646
PET_DOG_FOOD,
4747
PET_CROC_FOOD,
4848

49+
PET_TOY,
50+
4951
PRIVATE_FURNITURE;
5052
}

Kepler-Server/src/main/java/org/alexdev/kepler/game/item/interactors/InteractionType.java

+3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ public enum InteractionType {
2121
FORTUNE(new DefaultInteractor()),
2222
PET_NEST(new PetNestInteractor()),
2323

24+
PET_FOOD(new PetFoodInteractor()),
25+
PET_WATER_BOWL(new PetWaterBowlInteractor()),
26+
PET_TOY(new PetToyInteractor()),
2427
TOTEM_LEG(new DefaultInteractor()),
2528
TOTEM_HEAD(new DefaultInteractor()),
2629
TOTEM_PLANET(new DefaultInteractor()),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.alexdev.kepler.game.item.interactors.types;
2+
3+
import org.alexdev.kepler.game.entity.Entity;
4+
import org.alexdev.kepler.game.entity.EntityType;
5+
import org.alexdev.kepler.game.item.Item;
6+
import org.alexdev.kepler.game.pathfinder.Position;
7+
import org.alexdev.kepler.game.pets.Pet;
8+
import org.alexdev.kepler.game.player.Player;
9+
import org.alexdev.kepler.game.room.Room;
10+
import org.alexdev.kepler.game.room.entities.RoomEntity;
11+
import org.alexdev.kepler.game.triggers.GenericTrigger;
12+
13+
public class PetFoodInteractor extends GenericTrigger {
14+
@Override
15+
public void onItemPlaced(Player player, Room room, Item item) {
16+
if (item.getCustomData().isBlank()) {
17+
item.setCustomData("0");
18+
item.updateStatus();
19+
item.save();
20+
}
21+
}
22+
23+
@Override
24+
public void onEntityStop(Entity entity, RoomEntity roomEntity, Item item, boolean isRotation) {
25+
if (entity.getType() != EntityType.PET) {
26+
return;
27+
}
28+
29+
var pet = (Pet) entity;
30+
var front = item.getPosition().getSquareInFront();
31+
32+
pet.getRoomUser().look(front, true);
33+
pet.getRoomUser().getTask().startEating();
34+
}
35+
36+
public void onItemPickup(Player player, Room room, Item item) {
37+
cancelPetsEating(room, item.getPosition());
38+
}
39+
40+
public void onItemMoved(Player player, Room room, Item item, boolean isRotation, Position oldPosition, Item itemBelow, Item itemAbove) {
41+
cancelPetsEating(room, oldPosition);
42+
}
43+
44+
private void cancelPetsEating(Room room, Position position) {
45+
room.getMapping().getTile(position).getEntities().forEach(x -> {
46+
if (x.getType() == EntityType.PET) {
47+
((Pet)x).getRoomUser().getTask().eatingComplete(false);
48+
}
49+
});
50+
}
51+
52+
/*
53+
@Override
54+
public void onEntityLeave(Entity entity, RoomEntity roomEntity, Item item) {
55+
if (entity.getType() != EntityType.PET) {
56+
return;
57+
}
58+
59+
var pet = (Pet) entity;
60+
pet.getRoomUser().getTask().eatingComplete();
61+
}
62+
63+
*/
64+
}

Kepler-Server/src/main/java/org/alexdev/kepler/game/item/interactors/types/PetNestInteractor.java

+2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ public Pet addPet(Room room, PetDetails petDetails, Position position) {
5959
room.getEntityManager().enterRoom(pet, position);
6060
room.getMapping().getTile(position).addEntity(pet);
6161

62+
pet.getRoomUser().createTask(room);
63+
6264
/*GameScheduler.getInstance().getService().scheduleAtFixedRate(()-> {
6365
pet.getRoomUser().walkTo(room.getModel().getRandomBound(0), room.getModel().getRandomBound(0));
6466
}, 0, 5, TimeUnit.SECONDS);*/
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package org.alexdev.kepler.game.item.interactors.types;
2+
3+
import org.alexdev.kepler.game.entity.Entity;
4+
import org.alexdev.kepler.game.entity.EntityType;
5+
import org.alexdev.kepler.game.item.Item;
6+
import org.alexdev.kepler.game.pathfinder.Position;
7+
import org.alexdev.kepler.game.pets.Pet;
8+
import org.alexdev.kepler.game.player.Player;
9+
import org.alexdev.kepler.game.room.Room;
10+
import org.alexdev.kepler.game.room.entities.RoomEntity;
11+
import org.alexdev.kepler.game.triggers.GenericTrigger;
12+
13+
public class PetToyInteractor extends GenericTrigger {
14+
@Override
15+
public void onEntityStop(Entity entity, RoomEntity roomEntity, Item item, boolean isRotation) {
16+
if (entity.getType() != EntityType.PET) {
17+
return;
18+
}
19+
20+
var pet = (Pet) entity;
21+
var front = item.getPosition().getSquareInFront();
22+
23+
pet.getRoomUser().look(front, true);
24+
pet.getRoomUser().getTask().startPlay();
25+
}
26+
27+
public void onItemPickup(Player player, Room room, Item item) {
28+
cancelPetsPlaying(room, item.getPosition());
29+
}
30+
31+
public void onItemMoved(Player player, Room room, Item item, boolean isRotation, Position oldPosition, Item itemBelow, Item itemAbove) {
32+
cancelPetsPlaying(room, oldPosition);
33+
}
34+
35+
private void cancelPetsPlaying(Room room, Position position) {
36+
room.getMapping().getTile(position).getEntities().forEach(x -> {
37+
if (x.getType() == EntityType.PET) {
38+
((Pet)x).getRoomUser().getTask().playingComplete(false);
39+
}
40+
});
41+
}
42+
43+
/*
44+
@Override
45+
public void onEntityLeave(Entity entity, RoomEntity roomEntity, Item item) {
46+
if (entity.getType() != EntityType.PET) {
47+
return;
48+
}
49+
50+
var pet = (Pet) entity;
51+
pet.getRoomUser().getTask().eatingComplete();
52+
}
53+
54+
*/
55+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package org.alexdev.kepler.game.item.interactors.types;
2+
3+
import org.alexdev.kepler.game.entity.Entity;
4+
import org.alexdev.kepler.game.entity.EntityType;
5+
import org.alexdev.kepler.game.item.Item;
6+
import org.alexdev.kepler.game.pathfinder.Position;
7+
import org.alexdev.kepler.game.pets.Pet;
8+
import org.alexdev.kepler.game.player.Player;
9+
import org.alexdev.kepler.game.room.Room;
10+
import org.alexdev.kepler.game.room.entities.RoomEntity;
11+
import org.alexdev.kepler.game.triggers.GenericTrigger;
12+
13+
public class PetWaterBowlInteractor extends GenericTrigger {
14+
@Override
15+
public void onItemPlaced(Player player, Room room, Item item) {
16+
if (item.getCustomData().isBlank()) {
17+
item.setCustomData("5");
18+
item.updateStatus();
19+
item.save();
20+
}
21+
}
22+
23+
@Override
24+
public void onEntityStop(Entity entity, RoomEntity roomEntity, Item item, boolean isRotation) {
25+
if (entity.getType() != EntityType.PET) {
26+
return;
27+
}
28+
29+
var pet = (Pet) entity;
30+
var front = item.getPosition().getSquareInFront();
31+
32+
pet.getRoomUser().look(front, true);
33+
pet.getRoomUser().getTask().startDrinking();
34+
}
35+
36+
public void onItemPickup(Player player, Room room, Item item) {
37+
cancelPetsDrinking(room, item.getPosition());
38+
}
39+
40+
public void onItemMoved(Player player, Room room, Item item, boolean isRotation, Position oldPosition, Item itemBelow, Item itemAbove) {
41+
cancelPetsDrinking(room, oldPosition);
42+
}
43+
44+
private void cancelPetsDrinking(Room room, Position position) {
45+
room.getMapping().getTile(position).getEntities().forEach(x -> {
46+
if (x.getType() == EntityType.PET) {
47+
((Pet)x).getRoomUser().getTask().drinkingComplete(false);
48+
}
49+
});
50+
}
51+
52+
/*
53+
@Override
54+
public void onEntityLeave(Entity entity, RoomEntity roomEntity, Item item) {
55+
if (entity.getType() != EntityType.PET) {
56+
return;
57+
}
58+
59+
var pet = (Pet) entity;
60+
pet.getRoomUser().getTask().eatingComplete();
61+
}
62+
63+
*/
64+
}

Kepler-Server/src/main/java/org/alexdev/kepler/game/pets/Pet.java

+2-39
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,17 @@
1313

1414
public class Pet extends Entity {
1515
private PetDetails petDetails;
16-
private PetAction petAction;
17-
private long actionExpiry;
1816
private RoomPet roomUser;
19-
private boolean walkBeforeSitLay;
2017

2118
public Pet(PetDetails petDetails) {
2219
this.petDetails = petDetails;
2320
this.roomUser = new RoomPet(this);
24-
this.petAction = PetAction.NONE;
2521
}
2622

2723
public void awake() {
2824
this.roomUser.removeStatus(StatusType.AVATAR_SLEEP);
2925
this.roomUser.setNeedsUpdate(true);
3026

31-
this.petAction = PetAction.NONE;
32-
this.actionExpiry = 0;
33-
3427
this.petDetails.setLastKip(DateUtil.getCurrentTimeSeconds());
3528
PetDao.saveDetails(this.petDetails.getId(), this.petDetails);
3629
}
@@ -93,37 +86,7 @@ public void dispose() {
9386

9487
}
9588

96-
public PetAction getAction() {
97-
return petAction;
98-
}
99-
100-
public void setAction(PetAction petAction) {
101-
this.petAction = petAction;
102-
}
103-
104-
public boolean isDoingAction() {
105-
return !hasActionExpired() && (this.petAction == PetAction.SLEEP || this.petAction == PetAction.EAT || this.petAction == PetAction.DRINK || this.petAction == PetAction.LAY || this.petAction == PetAction.SIT);
106-
}
107-
108-
public boolean isActionAllowed() {
109-
return (this.petAction == PetAction.NONE || this.petAction == PetAction.SIT || this.petAction == PetAction.LAY) && (this.roomUser.getCurrentItem() == null ||
110-
((!this.roomUser.getCurrentItem().getDefinition().hasBehaviour(ItemBehaviour.CAN_SIT_ON_TOP) && !this.roomUser.getCurrentItem().getDefinition().hasBehaviour(ItemBehaviour.CAN_LAY_ON_TOP)) &&
111-
this.roomUser.getCurrentItem().getId() != this.petDetails.getItemId()));
112-
}
113-
114-
public boolean hasActionExpired() {
115-
return DateUtil.getCurrentTimeSeconds() > this.actionExpiry;
116-
}
117-
118-
public void setActionDuration(int seconds) {
119-
this.actionExpiry = DateUtil.getCurrentTimeSeconds() + seconds;
120-
}
121-
122-
public boolean isWalkBeforeSitLay() {
123-
return walkBeforeSitLay;
124-
}
125-
126-
public void setWalkBeforeSitLay(boolean walkBeforeSitLay) {
127-
this.walkBeforeSitLay = walkBeforeSitLay;
89+
public void saveDetails() {
90+
PetDao.saveDetails(this.getDetails().getId(), this.getDetails());
12891
}
12992
}

Kepler-Server/src/main/java/org/alexdev/kepler/game/pets/PetAction.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
package org.alexdev.kepler.game.pets;
22

33
public enum PetAction {
4-
NONE(0),
5-
SLEEP(0),
6-
EAT(0),
7-
DRINK(0),
8-
WALKING(0),
4+
TALK(0),
95
SIT(0),
106
LAY(0),
11-
JUMP(0),
12-
DEAD(0);
7+
PLAY(0),
8+
WALK(0);
139

1410
private final int actionLength;
1511

0 commit comments

Comments
 (0)