mirror of
https://github.com/Grasscutters/Grasscutter.git
synced 2025-12-20 02:45:52 +01:00
Implement support for multiple scenes in a world
This commit is contained in:
@@ -5,6 +5,7 @@ import emu.grasscutter.data.GenshinData;
|
||||
import emu.grasscutter.data.def.AvatarData;
|
||||
import emu.grasscutter.data.def.AvatarSkillDepotData;
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
import emu.grasscutter.game.avatar.GenshinAvatar;
|
||||
import emu.grasscutter.game.inventory.EquipType;
|
||||
@@ -39,14 +40,14 @@ public class EntityAvatar extends GenshinEntity {
|
||||
private PlayerDieType killedType;
|
||||
private int killedBy;
|
||||
|
||||
public EntityAvatar(World world, GenshinAvatar avatar) {
|
||||
super(world);
|
||||
public EntityAvatar(GenshinScene scene, GenshinAvatar avatar) {
|
||||
super(scene);
|
||||
this.avatar = avatar;
|
||||
this.id = world.getNextEntityId(EntityIdType.AVATAR);
|
||||
this.id = getScene().getWorld().getNextEntityId(EntityIdType.AVATAR);
|
||||
|
||||
GenshinItem weapon = this.getAvatar().getWeapon();
|
||||
if (weapon != null) {
|
||||
weapon.setWeaponEntityId(world.getNextEntityId(EntityIdType.WEAPON));
|
||||
weapon.setWeaponEntityId(getScene().getWorld().getNextEntityId(EntityIdType.WEAPON));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -152,7 +153,7 @@ public class EntityAvatar extends GenshinEntity {
|
||||
.setLastMoveReliableSeq(this.getLastMoveReliableSeq())
|
||||
.setLifeState(this.getLifeState().getValue());
|
||||
|
||||
if (this.getWorld() != null) {
|
||||
if (this.getScene() != null) {
|
||||
entityInfo.setMotionInfo(this.getMotionInfo());
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package emu.grasscutter.game.entity;
|
||||
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
import emu.grasscutter.game.props.PlayerProperty;
|
||||
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
|
||||
@@ -34,8 +35,8 @@ public class EntityClientGadget extends EntityGadget {
|
||||
private int targetEntityId;
|
||||
private boolean asyncLoad;
|
||||
|
||||
public EntityClientGadget(World world, GenshinPlayer player, EvtCreateGadgetNotify notify) {
|
||||
super(world);
|
||||
public EntityClientGadget(GenshinScene scene, GenshinPlayer player, EvtCreateGadgetNotify notify) {
|
||||
super(scene);
|
||||
this.owner = player;
|
||||
this.id = notify.getEntityId();
|
||||
this.pos = new Position(notify.getInitPos());
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
package emu.grasscutter.game.entity;
|
||||
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
|
||||
public abstract class EntityGadget extends GenshinEntity {
|
||||
|
||||
public EntityGadget(World world) {
|
||||
super(world);
|
||||
public EntityGadget(GenshinScene scene) {
|
||||
super(scene);
|
||||
}
|
||||
|
||||
public abstract int getGadgetId();
|
||||
|
||||
@@ -2,6 +2,7 @@ package emu.grasscutter.game.entity;
|
||||
|
||||
import emu.grasscutter.data.def.ItemData;
|
||||
import emu.grasscutter.game.GenshinPlayer;
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
import emu.grasscutter.game.inventory.GenshinItem;
|
||||
import emu.grasscutter.game.props.EntityIdType;
|
||||
@@ -30,9 +31,9 @@ public class EntityItem extends EntityGadget {
|
||||
private final GenshinItem item;
|
||||
private final long guid;
|
||||
|
||||
public EntityItem(World world, GenshinPlayer player, ItemData itemData, Position pos, int count) {
|
||||
super(world);
|
||||
this.id = world.getNextEntityId(EntityIdType.GADGET);
|
||||
public EntityItem(GenshinScene scene, GenshinPlayer player, ItemData itemData, Position pos, int count) {
|
||||
super(scene);
|
||||
this.id = getScene().getWorld().getNextEntityId(EntityIdType.GADGET);
|
||||
this.pos = new Position(pos);
|
||||
this.rot = new Position();
|
||||
this.guid = player.getNextGuid();
|
||||
|
||||
@@ -4,6 +4,7 @@ import emu.grasscutter.data.GenshinData;
|
||||
import emu.grasscutter.data.common.PropGrowCurve;
|
||||
import emu.grasscutter.data.def.MonsterCurveData;
|
||||
import emu.grasscutter.data.def.MonsterData;
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
import emu.grasscutter.game.props.EntityIdType;
|
||||
import emu.grasscutter.game.props.FightProperty;
|
||||
@@ -36,9 +37,9 @@ public class EntityMonster extends GenshinEntity {
|
||||
private final int level;
|
||||
private int weaponEntityId;
|
||||
|
||||
public EntityMonster(World world, MonsterData monsterData, Position pos, int level) {
|
||||
super(world);
|
||||
this.id = world.getNextEntityId(EntityIdType.MONSTER);
|
||||
public EntityMonster(GenshinScene scene, MonsterData monsterData, Position pos, int level) {
|
||||
super(scene);
|
||||
this.id = getWorld().getNextEntityId(EntityIdType.MONSTER);
|
||||
this.monsterData = monsterData;
|
||||
this.fightProp = new Int2FloatOpenHashMap();
|
||||
this.pos = new Position(pos);
|
||||
@@ -48,7 +49,7 @@ public class EntityMonster extends GenshinEntity {
|
||||
|
||||
// Monster weapon
|
||||
if (getMonsterWeaponId() > 0) {
|
||||
this.weaponEntityId = world.getNextEntityId(EntityIdType.WEAPON);
|
||||
this.weaponEntityId = getWorld().getNextEntityId(EntityIdType.WEAPON);
|
||||
}
|
||||
|
||||
this.recalcStats();
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package emu.grasscutter.game.entity;
|
||||
|
||||
import emu.grasscutter.game.GenshinScene;
|
||||
import emu.grasscutter.game.World;
|
||||
import emu.grasscutter.game.props.FightProperty;
|
||||
import emu.grasscutter.game.props.LifeState;
|
||||
@@ -12,23 +13,27 @@ import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
|
||||
|
||||
public abstract class GenshinEntity {
|
||||
protected int id;
|
||||
private final World world;
|
||||
private final GenshinScene scene;
|
||||
|
||||
private MotionState moveState;
|
||||
private int lastMoveSceneTimeMs;
|
||||
private int lastMoveReliableSeq;
|
||||
|
||||
public GenshinEntity(World world) {
|
||||
this.world = world;
|
||||
public GenshinEntity(GenshinScene scene) {
|
||||
this.scene = scene;
|
||||
this.moveState = MotionState.MotionNone;
|
||||
}
|
||||
|
||||
public int getId() {
|
||||
return this.id;
|
||||
}
|
||||
|
||||
|
||||
public World getWorld() {
|
||||
return world;
|
||||
return this.getScene().getWorld();
|
||||
}
|
||||
|
||||
public GenshinScene getScene() {
|
||||
return this.scene;
|
||||
}
|
||||
|
||||
public boolean isAlive() {
|
||||
|
||||
Reference in New Issue
Block a user