async def update_aura(sid: str, data: AuraDelta): pr: PlayerRoom = game_state.get(sid) shape = get_shape_or_none(pr, data["shape"], "Aura.Update") if shape is None: return aura = Aura.get_by_id(data["uuid"]) changed_visible = aura.visible != data.get("visible", aura.visible) update_model_from_dict(aura, data) aura.save() owners = [*get_owner_sids(pr, shape, skip_sid=sid)] for psid in owners: await sio.emit( "Shape.Options.Aura.Update", data, room=psid, namespace=GAME_NS, ) for psid in game_state.get_sids(active_location=pr.active_location, skip_sid=sid): if psid in owners: continue if changed_visible: if aura.visible: await sio.emit( "Shape.Options.Aura.Create", { "shape": shape.uuid, **aura.as_dict() }, room=psid, namespace=GAME_NS, ) else: await sio.emit( "Shape.Options.Aura.Remove", { "shape": shape.uuid, "value": aura.uuid }, room=psid, namespace=GAME_NS, ) else: await sio.emit( "Shape.Options.Aura.Update", data, room=psid, namespace=GAME_NS, )
async def remove_aura(sid: str, data: ShapeSetStringValue): pr: PlayerRoom = game_state.get(sid) shape = get_shape_or_none(pr, data["shape"], "Aura.Remove") if shape is None: return aura = Aura.get_by_id(data["value"]) aura.delete_instance(True) await sio.emit( "Shape.Options.Aura.Remove", data, skip_sid=sid, room=pr.active_location.get_path(), namespace=GAME_NS, )
async def update_shape_tracker(sid: str, data: TrackerUpdateData): pr: PlayerRoom = game_state.get(sid) if data["_type"] == "tracker": tracker = Tracker.get_by_id(data["uuid"]) else: tracker = Aura.get_by_id(data["uuid"]) tracker.value = data["value"] tracker.save() await sio.emit( "Shapes.Trackers.Update", data, room=pr.active_location.get_path(), skip_sid=sid, namespace=GAME_NS, )
async def move_aura(sid: str, data: AuraMove): pr: PlayerRoom = game_state.get(sid) new_shape = get_shape_or_none(pr, data["new_shape"], "Aura.Options.Tracker.Move") if new_shape is None: return aura = Aura.get_by_id(data["aura"]) aura.shape = new_shape aura.save() await sio.emit( "Shape.Options.Aura.Move", data, skip_sid=sid, room=pr.active_location.get_path(), namespace=GAME_NS, )