EntityVehicle.java 5.3 KB
Newer Older
1
2
package emu.grasscutter.game.entity;

3
4
5
import emu.grasscutter.data.GameData;
import emu.grasscutter.data.binout.ConfigGadget;
import emu.grasscutter.data.excels.GadgetData;
6
7
import emu.grasscutter.game.player.Player;
import emu.grasscutter.game.props.EntityIdType;
AnimeGitB's avatar
AnimeGitB committed
8
import emu.grasscutter.game.props.FightProperty;
9
10
11
12
13
14
import emu.grasscutter.game.props.PlayerProperty;
import emu.grasscutter.game.world.Scene;
import emu.grasscutter.net.proto.AbilitySyncStateInfoOuterClass.AbilitySyncStateInfo;
import emu.grasscutter.net.proto.AnimatorParameterValueInfoPairOuterClass.AnimatorParameterValueInfoPair;
import emu.grasscutter.net.proto.EntityAuthorityInfoOuterClass.EntityAuthorityInfo;
import emu.grasscutter.net.proto.EntityRendererChangedInfoOuterClass.EntityRendererChangedInfo;
15
import emu.grasscutter.net.proto.FightPropPairOuterClass.FightPropPair;
16
17
18
19
20
21
22
import emu.grasscutter.net.proto.MotionInfoOuterClass.MotionInfo;
import emu.grasscutter.net.proto.PropPairOuterClass.PropPair;
import emu.grasscutter.net.proto.ProtEntityTypeOuterClass.ProtEntityType;
import emu.grasscutter.net.proto.SceneEntityAiInfoOuterClass.SceneEntityAiInfo;
import emu.grasscutter.net.proto.SceneEntityInfoOuterClass.SceneEntityInfo;
import emu.grasscutter.net.proto.SceneGadgetInfoOuterClass.SceneGadgetInfo;
import emu.grasscutter.net.proto.VectorOuterClass.Vector;
23
24
import emu.grasscutter.net.proto.VehicleInfoOuterClass.VehicleInfo;
import emu.grasscutter.net.proto.VehicleMemberOuterClass.VehicleMember;
25
26
27
28
import emu.grasscutter.utils.Position;
import emu.grasscutter.utils.ProtoHelper;
import it.unimi.dsi.fastutil.ints.Int2FloatMap;
import it.unimi.dsi.fastutil.ints.Int2FloatOpenHashMap;
AnimeGitB's avatar
AnimeGitB committed
29
30
import lombok.Getter;
import lombok.Setter;
31

32
import javax.annotation.Nullable;
33
import java.util.ArrayList;
34
import java.util.List;
35

Melledy's avatar
Melledy committed
36
public class EntityVehicle extends EntityBaseGadget {
37

AnimeGitB's avatar
AnimeGitB committed
38
39
    @Getter private final Player owner;
    private final Int2FloatMap fightProp;
github-actions's avatar
github-actions committed
40
41
42
43

    private final Position pos;
    private final Position rot;

AnimeGitB's avatar
AnimeGitB committed
44
45
    @Getter private final int pointId;
    @Getter private final int gadgetId;
github-actions's avatar
github-actions committed
46

AnimeGitB's avatar
AnimeGitB committed
47
48
    @Getter @Setter private float curStamina;
    @Getter private List<VehicleMember> vehicleMembers;
49
    @Nullable @Getter private ConfigGadget configGadget;
github-actions's avatar
github-actions committed
50
51
52
53
54
55
56
57
58
59

    public EntityVehicle(Scene scene, Player player, int gadgetId, int pointId, Position pos, Position rot) {
        super(scene);
        this.owner = player;
        this.id = getScene().getWorld().getNextEntityId(EntityIdType.GADGET);
        this.fightProp = new Int2FloatOpenHashMap();
        this.pos = new Position(pos);
        this.rot = new Position(rot);
        this.gadgetId = gadgetId;
        this.pointId = pointId;
60
61
62
63
64
        this.curStamina = 240; // might be in configGadget.GCALKECLLLP.JBAKBEFIMBN.ANBMPHPOALP
        this.vehicleMembers = new ArrayList<>();
        GadgetData data = GameData.getGadgetDataMap().get(gadgetId);
        if (data != null && data.getJsonName() != null) {
            this.configGadget = GameData.getGadgetConfigData().get(data.getJsonName());
AnimeGitB's avatar
AnimeGitB committed
65
        }
66
67
68
69
70
71
72
73
74

        fillFightProps(configGadget);
    }

    @Override
    protected void fillFightProps(ConfigGadget configGadget) {
        super.fillFightProps(configGadget);
        this.addFightProperty(FightProperty.FIGHT_PROP_CUR_SPEED, 0);
        this.addFightProperty(FightProperty.FIGHT_PROP_CHARGE_EFFICIENCY, 0);
github-actions's avatar
github-actions committed
75
76
77
    }

    @Override
AnimeGitB's avatar
AnimeGitB committed
78
    public Int2FloatMap getFightProperties() {
github-actions's avatar
github-actions committed
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
        return fightProp;
    }

    @Override
    public Position getPosition() { return this.pos; }

    @Override
    public Position getRotation() {
        return this.rot;
    }

    @Override
    public SceneEntityInfo toProto() {

        VehicleInfo vehicle = VehicleInfo.newBuilder()
                .setOwnerUid(this.owner.getUid())
                .setCurStamina(getCurStamina())
                .build();

        EntityAuthorityInfo authority = EntityAuthorityInfo.newBuilder()
                .setAbilityInfo(AbilitySyncStateInfo.newBuilder())
                .setRendererChangedInfo(EntityRendererChangedInfo.newBuilder())
                .setAiInfo(SceneEntityAiInfo.newBuilder().setIsAiOpen(true).setBornPos(getPosition().toProto()))
                .setBornPos(getPosition().toProto())
                .build();

        SceneGadgetInfo.Builder gadgetInfo = SceneGadgetInfo.newBuilder()
                .setGadgetId(this.getGadgetId())
                .setAuthorityPeerId(this.getOwner().getPeerId())
                .setIsEnableInteract(true)
                .setVehicleInfo(vehicle);

        SceneEntityInfo.Builder entityInfo = SceneEntityInfo.newBuilder()
                .setEntityId(getId())
                .setEntityType(ProtEntityType.PROT_ENTITY_TYPE_GADGET)
                .setMotionInfo(MotionInfo.newBuilder().setPos(getPosition().toProto()).setRot(getRotation().toProto()).setSpeed(Vector.newBuilder()))
                .addAnimatorParaList(AnimatorParameterValueInfoPair.newBuilder())
                .setGadget(gadgetInfo)
                .setEntityAuthorityInfo(authority)
                .setLifeState(1);

        PropPair pair = PropPair.newBuilder()
                .setType(PlayerProperty.PROP_LEVEL.getId())
                .setPropValue(ProtoHelper.newPropValue(PlayerProperty.PROP_LEVEL, 47))
                .build();

AnimeGitB's avatar
AnimeGitB committed
125
        this.addAllFightPropsToEntityInfo(entityInfo);
github-actions's avatar
github-actions committed
126
127
128
129
        entityInfo.addPropList(pair);

        return entityInfo.build();
    }
130
}