Ejemplo n.º 1
0
        private void handleCoordinatePacket(TODPacket packet)
        {
            TODCoordinatePacketData packetData = packet.Data as TODCoordinatePacketData;

            Transform objTransform = _objectTable[packet.ObjectID].transform;

            if (packetData.HasScale)
            {
                if (packetData.MatrixType == TODPacketData.PacketDataType.Absolute)
                {
                    objTransform.localScale = new Vector3(packetData.ScaleX / 4096f, packetData.ScaleY / 4096f,
                                                          packetData.ScaleZ / 4096f);
                }
                else
                {
                    objTransform.localScale = Vector3.Scale(objTransform.localScale, new Vector3(
                                                                packetData.ScaleX / 4096f,
                                                                packetData.ScaleY / 4096f,
                                                                packetData.ScaleZ / 4096f));
                }
            }

            if (packetData.HasTranslation)
            {
                if (packetData.MatrixType == TODPacketData.PacketDataType.Absolute)
                {
                    Vector3 pos = new Vector3(packetData.TransX, -packetData.TransY, packetData.TransZ) / 2048f;
                    objTransform.localPosition = pos;
                }
                else
                {
                    objTransform.localPosition =
                        objTransform.localPosition +
                        new Vector3(packetData.TransX, -packetData.TransY, packetData.TransZ) /
                        2048f;
                }
            }

            if (packetData.HasRotation)
            {
                float pitch = -packetData.RotX / 4096f;
                float yaw   = packetData.RotY / 4096f;
                float roll  = -packetData.RotZ / 4096f;

                if (packetData.MatrixType == TODPacketData.PacketDataType.Absolute)
                {
                    var x = Quaternion.AngleAxis(pitch, Vector3.right);
                    var y = Quaternion.AngleAxis(yaw, Vector3.up);
                    var z = Quaternion.AngleAxis(roll, Vector3.forward);
                    objTransform.localRotation = x * y * z;
                }
                else
                {
                    objTransform.Rotate(Vector3.right, pitch);
                    objTransform.Rotate(Vector3.up, yaw);
                    objTransform.Rotate(Vector3.forward, roll);
                }
            }
        }
Ejemplo n.º 2
0
        private void handleObjectControlPacket(TODPacket packet)
        {
            TODObjectControlPacketData packetData = packet.Data as TODObjectControlPacketData;

            if (packetData.ObjectControl == TODObjectControlPacketData.ObjectControlType.Create)
            {
                createObjectMapping(packet.ObjectID);
            }
            else if (packetData.ObjectControl == TODObjectControlPacketData.ObjectControlType.Kill)
            {
                Destroy(_objectTable[packet.ObjectID]);
            }
        }
Ejemplo n.º 3
0
        private void handleObjectIDPacket(TODPacket packet)
        {
            TODObjectIDPacketData packetData = packet.Data as TODObjectIDPacketData;

            if (packet.PacketType == TODPacket.PacketTypes.TMDDataID)
            {
                // create mapping in object table
                var obj = _objectTable[packet.ObjectID];
                obj.sharedMesh = _currentAnimation.ObjectTable[packetData.ObjectID - 1];
            }
            else if (packet.PacketType == TODPacket.PacketTypes.ParentObjectID)
            {
                // set object parent
                Transform parentTransform = _objectTable[packetData.ObjectID].transform;
                _objectTable[packet.ObjectID].transform.SetParent(parentTransform, false);
            }
        }