public string Transform2String(GodotTransform t) { return(string.Format("Transform({0}, {1}, {2}, {3})", Vector32String(t.basis.x), Vector32String(t.basis.y), Vector32String(t.basis.z), Vector32String(t.origin))); }
public BoneExporter(int resource_index, ZMD zmd) { sbone = new StringBuilder(); sbone.Append("; skelton node - mesh nodes parent\n"); sbone.AppendLine("[node name=\"Armature\" type=\"Skeleton\" parent=\".:\"]"); sbone.AppendLine("bones_in_world_transform = true"); sbone.AppendLine("transform = Transform(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)"); int idx = 0; GodotTransform IdentityTransform = new GodotTransform(GodotQuat.Identity, translator.ToVector3(Vector3.ZERO)); foreach (RoseBone bone in zmd.Bone) { GodotTransform transform = new GodotTransform(translator.ToQuat(bone.Rotation), translator.ToVector3(bone.Position)); GodotTransform rest = new GodotTransform(translator.ToQuat(bone.TransformMatrix.ExtractQuaternion()), translator.ToVector3(bone.TransformMatrix.Translation)); bone.Rotation.ToAngleAxis(out Radian radian, out Vector3 axis); sbone.AppendFormat("bones/{0}/name = \"{1}\"\n", idx, bone.Name); sbone.AppendFormat("bones/{0}/parent = {1}\n", idx, idx == 0 ? -1 : bone.ParentID); //sbone.AppendFormat("; Position: {0}\n; Rotation: {1}\n; Angle(rad): {2:G4} Angle(deg): {3:G4} Axis: {4}\n", bone.Position, bone.Rotation, radian.ValueRadians, radian.ValueDegrees, axis); sbone.AppendFormat("bones/{0}/rest = {1}\n", idx, translator.Transform2String(transform)); sbone.AppendFormat("bones/{0}/pose = {1}\n", idx, translator.Transform2String(rest)); //sbone.AppendFormat("bones/{0}/pose = {1}\n", idx, "Transform(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)"); sbone.AppendFormat("bones/{0}/enabled = true\n", idx); sbone.AppendFormat("bones/{0}/bound_children = [ ]\n", idx); idx++; } if (zmd.DummiesCount > 0) { sbone.Append("; dummy bones\n"); foreach (RoseBone dummy in zmd.Dummy) { GodotTransform transform = new GodotTransform(translator.ToQuat(dummy.Rotation), translator.ToVector3(dummy.Position)); sbone.AppendFormat("bones/{0}/name = \"{1}\"\n", idx, dummy.Name); sbone.AppendFormat("bones/{0}/parent = {1}\n", idx, idx == 0 ? -1 : dummy.ParentID); //sbone.AppendFormat("; Position: {0}\n; Rotation: {1}\n", dummy.Position, dummy.Rotation); sbone.AppendFormat("bones/{0}/rest = {1}\n", idx, translator.Transform2String(transform)); //sbone.AppendFormat("bones/{0}/pose = {1}\n", idx, translator.Transform2String(IdentityTransform)); sbone.AppendFormat("bones/{0}/enabled = true\n", idx); sbone.AppendFormat("bones/{0}/bound_children = []\n", idx); idx++; } } LastResourceIndex += resource_index; }