Skip to content

🤖 带有能力的 Entity 实例Class

tongsim.entity.mixin

entity.mixin

MixinEntityBase

Bases: Entity

用于通过 _ability_types 字段声明当前实体类型支持的能力(Ability Protocol 接口), 并在创建时自动将这些能力方法绑定为实体成员方法。

_ability_types 为类变量,需在子类中显式指定能力列表。

Source code in src\tongsim\entity\mixin.py
 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
class MixinEntityBase(Entity):
    """
    用于通过 `_ability_types` 字段声明当前实体类型支持的能力(Ability Protocol 接口),
    并在创建时自动将这些能力方法绑定为实体成员方法。

    `_ability_types` 为类变量,需在子类中显式指定能力列表。
    """

    _ability_types: ClassVar[list[type]] = []

    @classmethod
    async def create(cls, *args, **kwargs):
        self = cls(*args, **kwargs)
        for ability in cls._ability_types:
            await _bind_ability_methods(self, ability)
        return self

    @classmethod
    async def from_grpc(
        cls, entity_id: str, world_context: WorldContext
    ) -> "MixinEntityBase":
        """
        通过 gRPC 查询构造 Entity。
        """

        # TODO: 为了保留 Entity Base 层的干净实现,此处出现了重复逻辑调用
        resp = await UnaryAPI.query_components(world_context.conn, entity_id)
        if resp is None:
            raise RuntimeError(f"Failed to query components for entity '{entity_id}'.")

        components: dict[ComponentType, list[str]] = defaultdict(list)
        for component_id, component_type in resp.items():
            components[component_type].append(component_id)

        _logger.debug(
            f"[Consturct mixin entity from gRPC] Entity {entity_id}  ---  ability-types: {list(cls._ability_types)}"
        )
        return await cls.create(entity_id, world_context, components)

CameraEntity

Bases: MixinEntityBase, SceneAbility, CameraAbility

TongSim 的相机实体

Source code in src\tongsim\entity\mixin.py
120
121
122
123
124
125
class CameraEntity(MixinEntityBase, SceneAbility, CameraAbility):
    """
    TongSim 的相机实体
    """

    _ability_types: ClassVar[list[type]] = [SceneAbility, CameraAbility]

HFCameraEntity

Bases: MixinEntityBase, HFCameraAbility

TongSim 的高速相机实体

Source code in src\tongsim\entity\mixin.py
128
129
130
131
132
133
class HFCameraEntity(MixinEntityBase, HFCameraAbility):
    """
    TongSim 的高速相机实体
    """

    _ability_types: ClassVar[list[type]] = [HFCameraAbility]

AgentEntity

Bases: MixinEntityBase, SceneAbility, AgentActionAbility, AssetAbility, VoxelAbility

TongSim 的智能体

Source code in src\tongsim\entity\mixin.py
136
137
138
139
140
141
142
143
144
145
146
147
148
class AgentEntity(
    MixinEntityBase, SceneAbility, AgentActionAbility, AssetAbility, VoxelAbility
):
    """
    TongSim 的智能体
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        AgentActionAbility,
        AssetAbility,
        VoxelAbility,
    ]

ConsumableEntity

Bases: MixinEntityBase, SceneAbility, ConsumableEnergyAbility, AssetAbility, CollisionShapeAbility

可食用 或 可饮用 的实体。

Source code in src\tongsim\entity\mixin.py
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
class ConsumableEntity(
    MixinEntityBase,
    SceneAbility,
    ConsumableEnergyAbility,
    AssetAbility,
    CollisionShapeAbility,
):
    """
    可食用 或 可饮用 的实体。
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        ConsumableEnergyAbility,
        AssetAbility,
        CollisionShapeAbility,
    ]

ElectricApplianceEntity

Bases: MixinEntityBase, SceneAbility, AssetAbility, InteractableAbility, PowerableAbility, CollisionShapeAbility

TongSim 的支持交互控制的电器类型实体,比如台灯、电视、空调、冰箱、微波炉、电风扇、饮水机等等

Source code in src\tongsim\entity\mixin.py
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
class ElectricApplianceEntity(
    MixinEntityBase,
    SceneAbility,
    AssetAbility,
    InteractableAbility,
    PowerableAbility,
    CollisionShapeAbility,
):
    """
    TongSim 的支持交互控制的电器类型实体,比如台灯、电视、空调、冰箱、微波炉、电风扇、饮水机等等
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        AssetAbility,
        InteractableAbility,
        PowerableAbility,
        CollisionShapeAbility,
    ]

InteractableEntity

Bases: MixinEntityBase, SceneAbility, AssetAbility, InteractableAbility, CollisionShapeAbility

TongSim 的支持交互控制物体类型实体(不依赖电源),比如遥控器、墙上的开关

Source code in src\tongsim\entity\mixin.py
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
class InteractableEntity(
    MixinEntityBase,
    SceneAbility,
    AssetAbility,
    InteractableAbility,
    CollisionShapeAbility,
):
    """
    TongSim 的支持交互控制物体类型实体(不依赖电源),比如遥控器、墙上的开关
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        AssetAbility,
        InteractableAbility,
        CollisionShapeAbility,
    ]

BaseObjectEntity

Bases: MixinEntityBase, SceneAbility, ConsumableEnergyAbility, AssetAbility, InteractableAbility, PowerableAbility, CollisionShapeAbility, LightAbility

TongSim 的通用对象实体,包括大部分可以交互的接口

Source code in src\tongsim\entity\mixin.py
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
class BaseObjectEntity(
    MixinEntityBase,
    SceneAbility,
    ConsumableEnergyAbility,
    AssetAbility,
    InteractableAbility,
    PowerableAbility,
    CollisionShapeAbility,
    LightAbility,
):
    """
    TongSim 的通用对象实体,包括大部分可以交互的接口
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        ConsumableEnergyAbility,
        AssetAbility,
        InteractableAbility,
        PowerableAbility,
        CollisionShapeAbility,
        LightAbility,
    ]

LightEntity

Bases: MixinEntityBase, SceneAbility, AssetAbility, InteractableAbility, CollisionShapeAbility, LightAbility

TongSim 的灯实体

Source code in src\tongsim\entity\mixin.py
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
class LightEntity(
    MixinEntityBase,
    SceneAbility,
    AssetAbility,
    InteractableAbility,
    CollisionShapeAbility,
    LightAbility,
):
    """
    TongSim 的灯实体
    """

    _ability_types: ClassVar[list[type]] = [
        SceneAbility,
        AssetAbility,
        InteractableAbility,
        CollisionShapeAbility,
        LightAbility,
    ]

NPCEntity

Bases: MixinEntityBase, NPCActionAbility

TongSim 的 NPC 实体

Source code in src\tongsim\entity\mixin.py
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
class NPCEntity(MixinEntityBase, NPCActionAbility):
    """
    TongSim 的 NPC 实体
    """

    _ability_types: ClassVar[list[type]] = [NPCActionAbility]

    @classmethod
    async def from_grpc(
        cls, entity_id: str, world_context: WorldContext
    ) -> "MixinEntityBase":
        # note: 当前 NPC 不是一个 gRPC subject, 因此跳过 query components 的过程!
        components: dict[ComponentType, list[str]] = defaultdict(list)
        _logger.debug(
            f"[Consturct mixin entity from gRPC] Entity {entity_id}  ---  ability-types: {list(cls._ability_types)}"
        )
        return await cls.create(entity_id, world_context, components)