private void AttachLimbMarker() { var chara = FkCharaMgr.FindSelectChara(); if (chara == null) { return; } chara.Limbs().Foreach(b => { var marker = BoneMarker.Create(b.Transform); _limbMarkers.Add(marker); marker.OnDrag = (m) => { var screenVec = m.MouseEndPos - m.MouseStartPos; var pos = Kit.MapScreenVecToWorld(screenVec, b.Transform.position); FkJointAssist.MoveEnd(b.GuideObject, pos); }; marker.OnMidClick = (m) => { // ClearLimbMarker(); DisableLimbMarker(); _follower = b; AttachSelectorMarker(); }; marker.OnRightClick = (m) => { ToggleLockBone(b, m); }; marker.OnLeftDown = (m) => { UndoRedoHelper.Record(); }; marker.OnLeftUp = (m) => { UndoRedoHelper.Finish(); }; }); }
private void InnerUpdate() { if (Input.GetKey(KeyCode.LeftControl) && Input.GetMouseButtonDown(0)) { var minDist = double.MaxValue; FkBone.FkBone minBone = null; FkCharaMgr.FindSelectCharas().Foreach(c => { c.Bones().Foreach(b => { var screenPoint = CameraMgr.MainCamera().WorldToScreenPoint(b.Transform.position); var dist = (screenPoint - Input.mousePosition).magnitude; if (dist < minDist) { minDist = dist; minBone = b; } }); }); if (minBone != null) { Context.GuideObjectManager().SetSelectObject(minBone.GuideObject, false); } } }
public static void Record() { _lastRots.Clear(); _lastTargets.Clear(); var set = new HashSet <GuideObject>(); foreach (var selectObject in FkCharaMgr.FindSelectChara().DicGuideBones.Keys) { Record(selectObject); set.Add(selectObject); } Context.GuideObjectManager().selectObjects.Filter(go => !set.Contains(go)) .Foreach(go => Record(go)); }
public static void Normals(this GuideObject go, float angle) { if (!go.IsLimb()) { return; } var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Normals(angle); }
public static void Forward(this GuideObject go, float dist) { if (!go.IsLimb()) { return; } var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Forward(dist); }
public static void RecordAll(string mode) { _mode = mode; _oldPoss.Clear(); _oldRots.Clear(); _targets.Clear(); var boneSet = new HashSet <GuideObject>(); foreach (var selectObject in FkCharaMgr.FindSelectChara().DicGuideBones.Keys) { Record(selectObject); boneSet.Add(selectObject); } Context.GuideObjectManager().selectObjects.Filter(go => !boneSet.Contains(go)) .Foreach(go => Record(go)); }
private void AttachHangMarker() { DisableLimbMarker(); FkCharaMgr.FindSelectChara().Bones().Foreach(b => { var marker = BoneMarker.Create(b.Transform); marker.SetColor(_hangColor); _hangMarkers.Add(marker); marker.OnLeftClick = m => { var r = new HangRecord(); r.Bone = b; r.Pos = b.Transform.position; r.Rot = b.Transform.rotation; _hangRecords.Add(r); ClearHangMarker(); EnableLimbMarker(); }; }); }
private void Move(Vector3 delta) { Camera camera = MainCamera(); if (camera == null) { return; } var go = Context.GuideObjectManager().selectObject; if (go == null || !go.IsLimb()) { return; } Vector3 vector31 = new Vector3(Screen.width * 0.5f, Screen.height * 0.5f, Input.mousePosition.z); Ray ray = camera.ScreenPointToRay(vector31); ray.direction = new Vector3(ray.direction.x, 0, ray.direction.z); Vector3 vector32 = ray.direction * -1 * delta.z; ray.direction = Quaternion.LookRotation(ray.direction) * Vector3.right; Vector3 vector33 = vector32 + ray.direction * -1 * delta.x; vector33.y = delta.y; delta = vector33; delta = delta * 20.0f; if (Input.GetKeyDown(KeyCode.LeftShift)) { delta = delta / 4; } var rotater = FkCharaMgr.BuildFkJointRotater(go); rotater.MoveTo(go.transformTarget.position + delta); }
private void AttachSelectorMarker() { var chars = FkCharaMgr.FindSelectCharas(); chars.Foreach(c => { c.Bones().Foreach(b => { var marker = BoneMarker.Create(b.Transform); marker.SetColor(_selectorColor); _selectorMarkers.Add(marker); marker.OnLeftClick = (m) => { var attach = new AttachRecord(); attach.Leader = b; attach.Follower = _follower; attach.Pos = attach.Follower.Transform.position - attach.Leader.Transform.position; _attachRecords.Add(attach); ClearSelectorMarker(); EnableLimbMarker(); }; }); }); }
private void Rotate() { if (Context.GuideObjectManager() == null) { return; } var go = Context.GuideObjectManager().selectObject; if (go == null) { return; } if (!go.IsLimb()) { return; } float angle = 1.0f; float dist = 0.02f; if (Input.GetKey(KeyCode.LeftShift)) { angle /= 4; dist /= 4; } if (Input.GetKey(KeyCode.X) && Input.GetMouseButton(0)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Forward(dist); } else if (Input.GetKey(KeyCode.X) && Input.GetMouseButton(1)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Forward(-dist); } // else if (Input.GetKey(KeyCode.C) && Input.GetMouseButton(0)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Tangent(angle); } else if (Input.GetKey(KeyCode.C) && Input.GetMouseButton(1)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Tangent(-angle); } // else if (Input.GetKey(KeyCode.V) && Input.GetMouseButton(0)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Normals(angle); } else if (Input.GetKey(KeyCode.V) && Input.GetMouseButton(1)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Normals(-angle); } // else if (Input.GetKey(KeyCode.B) && Input.GetMouseButton(0)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Revolution(angle); } else if (Input.GetKey(KeyCode.B) && Input.GetMouseButton(1)) { var rotater = FkCharaMgr.BuildFkJointRotater(go); if (rotater == null) { return; } rotater.Revolution(-angle); } }
private void InnerUpdate() { if (Input.GetKeyDown(KeyCode.T) && (Input.GetKey(KeyCode.LeftAlt) || Input.GetKey(KeyCode.RightAlt))) { var chara = FkCharaMgr.FindSelectChara(); if (chara != null) { chara.Limbs().Foreach(bone => { var r = new LockRecord(); r.Bone = bone; r.Pos = bone.Transform.position; r.Rot = bone.Transform.rotation; _lockRecord.Add(r); }); } } else if (Input.GetKeyDown(KeyCode.T) && (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift))) { var go = Context.GuideObjectManager().selectObject; if (go != null && go.IsLimb()) { var chara = FkCharaMgr.FindSelectChara(); var bone = chara.DicGuideBones[go]; var r = new LockRecord(); r.Bone = bone; r.Pos = bone.Transform.position; r.Rot = bone.Transform.rotation; _lockRecord.Add(r); } else if (go != null && (go.IsHead())) { var r = new LockRecord(); var bone = FkCharaMgr.BuildChara(go).Head; r.Bone = bone; r.Pos = bone.Transform.position; var cv = Context.MainCamera().transform.position - bone.Transform.position; if (Input.GetKey(KeyCode.LeftControl)) { r.Rot = Quaternion.FromToRotation(cv, bone.GuideObject.transformTarget.forward); } else { r.Rot = Quaternion.FromToRotation(cv, cv); } _headLocks.Add(r); } } else if (Input.GetKeyDown(KeyCode.T)) { _lockRecord.Clear(); _headLocks.Clear(); } _lockRecord.ForEach(r => { if (r.Pos != r.Bone.Transform.position) { r.Bone.MoveTo(r.Pos); } if (r.Rot != r.Bone.Transform.rotation) { r.Bone.TurnTo(r.Rot); } }); _headLocks.ForEach(r => { var bone = r.Bone; var target = Context.MainCamera().transform.position - bone.Transform.position; var from = new Vector3(0, 0, 1); var p1 = Quaternion.FromToRotation(from, target); var p2 = r.Rot; bone.TurnTo(p2 * p1); // var bone = r.Bone; // var go = new GameObject(); // var target = Context.MainCamera().transform.position - bone.Transform.position; // var v1 = go.transform.forward; // var v2 = new Vector3(target.x, 0, target.z); // var axis = Vector3.Cross(v1, v2); // var angel = Vector3.Angle(v1, v2); // go.transform.RotateAround(go.transform.position, axis, angel); // axis = Vector3.Cross(v2, target); // angel = Vector3.Angle(v2, target); // go.transform.RotateAround(go.transform.position, axis, angel); // bone.TurnTo(go.transform.rotation); // GameObject.Destroy(go); }); }