Example #1
0
    def from_bytes(data):
        movement = Movement()
        data_io = io.BytesIO(data)

        header_data = read_struct(data_io, Movement.HEADER_BIN)
        movement.flags, movement.time = header_data
        movement.position = Position.from_io(data_io)

        if movement.flags & MovementFlags.ON_TRANSPORT.value:
            transport_data = read_struct(data_io, Movement.TRANSPORT_HEADER_BIN)
            movement.transport_guid = transport_data[0]
            movement.transport_position = Position.from_io(data_io)

        if movement.flags & MovementFlags.IS_SWIMMING.value:
            swimming_data = read_struct(data_io, Movement.SWIMMING_BIN)
            movement.swim_pitch = swimming_data[0]

        if movement.flags & MovementFlags.IS_FALLING.value:
            movement.jump_data = JumpData.from_io(data_io)

        if movement.flags & MovementFlags.SPLINE_ELEVATION.value:
            elevation_data = read_struct(data_io, Movement.SPLINE_ELEVATION_BIN)
            movement.spline_elevation_unk = elevation_data[0]

        return movement
Example #2
0
    def from_bytes(data):
        movement = Movement()
        data_io = io.BytesIO(data)

        header_data = read_struct(data_io, Movement.HEADER_BIN)
        movement.flags, movement.time = header_data
        movement.position = Position.from_io(data_io)

        if movement.flags & MovementFlags.ON_TRANSPORT.value:
            transport_data = read_struct(data_io,
                                         Movement.TRANSPORT_HEADER_BIN)
            movement.transport_guid = transport_data[0]
            movement.transport_position = Position.from_io(data_io)

        if movement.flags & MovementFlags.IS_SWIMMING.value:
            swimming_data = read_struct(data_io, Movement.SWIMMING_BIN)
            movement.swim_pitch = swimming_data[0]

        if movement.flags & MovementFlags.IS_FALLING.value:
            movement.jump_data = JumpData.from_io(data_io)

        if movement.flags & MovementFlags.SPLINE_ELEVATION.value:
            elevation_data = read_struct(data_io,
                                         Movement.SPLINE_ELEVATION_BIN)
            movement.spline_elevation_unk = elevation_data[0]

        return movement
Example #3
0
 def __init__(self):
     self.flags = 0
     self.time = 0
     self.position = Position()
     self.transport_guid = 0
     self.transport_position = Position()
     self.swim_pitch = 0.0
     self.jump_data = JumpData()
     self.spline_elevation_unk = 0.0
Example #4
0
 def __init__(self):
     self.flags = 0
     self.time = 0
     self.position = Position()
     self.transport_guid = 0
     self.transport_position = Position()
     self.swim_pitch = 0.0
     self.jump_data = JumpData()
     self.spline_elevation_unk = 0.0
Example #5
0
 def __init__(self):
     self.lock = threading.RLock()
     self.name = "Unnamed object"
     self.map_id = 0
     self.zone_id = 0
     self.position = Position()
     self.fields = {}
Example #6
0
class Movement(object):

    # - uint32      flags
    # - int32       unk
    # - float[4]    position + ori
    #     if flags & 0x02000000 (on transport)
    #     - uint64      guid
    #     - float[4]    tr_position + tr_ori
    #     if flags & 0x00200000 (is swimming)
    #     - uint32      swim_pitch
    #     if flags & 0x00002000 (is jumping/falling)
    #     - uint32      time
    #     - float       velocity
    #     - float       sin
    #     - float       cos
    #     - float       xy_speed
    #     if flags & 0x04000000 (is on spline elevation)
    #     - float       unk

    HEADER_BIN = Struct("<2I")
    TRANSPORT_HEADER_BIN = Struct("<Q")
    SWIMMING_BIN = Struct("<f")
    SPLINE_ELEVATION_BIN = Struct("<f")

    def __init__(self):
        self.flags = 0
        self.time = 0
        self.position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.swim_pitch = 0.0
        self.jump_data = JumpData()
        self.spline_elevation_unk = 0.0

    @staticmethod
    def from_bytes(data):
        movement = Movement()
        data_io = io.BytesIO(data)

        header_data = read_struct(data_io, Movement.HEADER_BIN)
        movement.flags, movement.time = header_data
        movement.position = Position.from_io(data_io)

        if movement.flags & MovementFlags.ON_TRANSPORT.value:
            transport_data = read_struct(data_io,
                                         Movement.TRANSPORT_HEADER_BIN)
            movement.transport_guid = transport_data[0]
            movement.transport_position = Position.from_io(data_io)

        if movement.flags & MovementFlags.IS_SWIMMING.value:
            swimming_data = read_struct(data_io, Movement.SWIMMING_BIN)
            movement.swim_pitch = swimming_data[0]

        if movement.flags & MovementFlags.IS_FALLING.value:
            movement.jump_data = JumpData.from_io(data_io)

        if movement.flags & MovementFlags.SPLINE_ELEVATION.value:
            elevation_data = read_struct(data_io,
                                         Movement.SPLINE_ELEVATION_BIN)
            movement.spline_elevation_unk = elevation_data[0]

        return movement

    def to_bytes(self):
        data = b""
        data += self.HEADER_BIN.pack(self.flags, self.time)
        data += self.position.to_bytes()

        if self.flags & MovementFlags.ON_TRANSPORT.value:
            data += self.TRANSPORT_HEADER_BIN.pack(self.transport_guid)
            data += self.transport_position.to_bytes()

        if self.flags & MovementFlags.IS_SWIMMING.value:
            data += self.SWIMMING_BIN.pack(self.swim_pitch)

        if self.flags & MovementFlags.IS_FALLING.value:
            data += self.jump_data.to_bytes()

        if self.flags & MovementFlags.SPLINE_ELEVATION.value:
            data += self.SPLINE_ELEVATION_BIN.pack(self.spline_elevation_unk)

        return data
Example #7
0
class Movement(object):

    # - uint32      flags
    # - int32       unk
    # - float[4]    position + ori
    #     if flags & 0x02000000 (on transport)
    #     - uint64      guid
    #     - float[4]    tr_position + tr_ori
    #     if flags & 0x00200000 (is swimming)
    #     - uint32      swim_pitch
    #     if flags & 0x00002000 (is jumping/falling)
    #     - uint32      time
    #     - float       velocity
    #     - float       sin
    #     - float       cos
    #     - float       xy_speed
    #     if flags & 0x04000000 (is on spline elevation)
    #     - float       unk

    HEADER_BIN           = Struct("<2I")
    TRANSPORT_HEADER_BIN = Struct("<Q")
    SWIMMING_BIN         = Struct("<f")
    SPLINE_ELEVATION_BIN = Struct("<f")

    def __init__(self):
        self.flags = 0
        self.time = 0
        self.position = Position()
        self.transport_guid = 0
        self.transport_position = Position()
        self.swim_pitch = 0.0
        self.jump_data = JumpData()
        self.spline_elevation_unk = 0.0

    @staticmethod
    def from_bytes(data):
        movement = Movement()
        data_io = io.BytesIO(data)

        header_data = read_struct(data_io, Movement.HEADER_BIN)
        movement.flags, movement.time = header_data
        movement.position = Position.from_io(data_io)

        if movement.flags & MovementFlags.ON_TRANSPORT.value:
            transport_data = read_struct(data_io, Movement.TRANSPORT_HEADER_BIN)
            movement.transport_guid = transport_data[0]
            movement.transport_position = Position.from_io(data_io)

        if movement.flags & MovementFlags.IS_SWIMMING.value:
            swimming_data = read_struct(data_io, Movement.SWIMMING_BIN)
            movement.swim_pitch = swimming_data[0]

        if movement.flags & MovementFlags.IS_FALLING.value:
            movement.jump_data = JumpData.from_io(data_io)

        if movement.flags & MovementFlags.SPLINE_ELEVATION.value:
            elevation_data = read_struct(data_io, Movement.SPLINE_ELEVATION_BIN)
            movement.spline_elevation_unk = elevation_data[0]

        return movement

    def to_bytes(self):
        data = b""
        data += self.HEADER_BIN.pack(self.flags, self.time)
        data += self.position.to_bytes()

        if self.flags & MovementFlags.ON_TRANSPORT.value:
            data += self.TRANSPORT_HEADER_BIN.pack(self.transport_guid)
            data += self.transport_position.to_bytes()

        if self.flags & MovementFlags.IS_SWIMMING.value:
            data += self.SWIMMING_BIN.pack(self.swim_pitch)

        if self.flags & MovementFlags.IS_FALLING.value:
            data += self.jump_data.to_bytes()

        if self.flags & MovementFlags.SPLINE_ELEVATION.value:
            data += self.SPLINE_ELEVATION_BIN.pack(self.spline_elevation_unk)

        return data