public SkirtModel Build(int colNum, int layerNum) { var bodySettingsBuilder = new BodySettingsBuilder(); var vJointSettingsBuilder = new VJointSettingsBuilder(); var hJointSettingsBuilder = new HJointSettingsBuilder(); var model = new SkirtModel() { LayerCount = layerNum, Plugin = plugin }; for (int j = 0; j < layerNum; j++) { model.BodySettingList.Add(bodySettingsBuilder.Build(j, layerNum)); model.H_jointSettingList.Add(hJointSettingsBuilder.Build(j, layerNum)); if (j < layerNum - 1) { model.V_jointSettingList.Add(vJointSettingsBuilder.Build(j, layerNum)); } } for (int i = 0; i < colNum; i++) { var col = new SkirtColumn() { Name = "列" + i.ToString(), Model = model, Pos = i }; model.ColumnList.Add(col); for (int j = 0; j < layerNum; j++) { var bone = new SkirtNode() { Name = $"スカート_{j}_{i}", Model = model, Row = j, Column = col }; col.NodeList.Add(bone); } } AssociateWith(model); UpdateSettings(model); return(model); }
private static void UpdateSettings(SkirtModel model) { var col = model.ColumnList[0]; for (int i = 0; i < col.NodeList.Count; i++) { var b = col.NodeList[i]; if (b.Body != null) { var bs = model.BodySettingList[i]; bs.BoxKind = b.Body.BoxKind; bs.BoxSize = b.Body.BoxSize.Clone(); bs.Friction = b.Body.Friction; bs.Group = b.Body.Group; bs.Mass = b.Body.Mass; bs.Mode = b.Body.Mode; bs.PositionDamping = b.Body.PositionDamping; bs.Restriction = b.Body.Restitution; bs.RotationDamping = b.Body.RotationDamping; //bs.PassGroup = (int[])b.Body.PassGroup; } if (b.V_Joint != null) { var js = model.H_jointSettingList[i]; js.Limit_AngleHigh = b.V_Joint.Limit_AngleHigh.Clone(); js.Limit_AngleLow = b.V_Joint.Limit_AngleLow.Clone(); js.Limit_MoveHigh = b.V_Joint.Limit_MoveHigh.Clone(); js.Limit_MoveLow = b.V_Joint.Limit_MoveLow.Clone(); js.SpringConst_Move = b.V_Joint.SpringConst_Move.Clone(); js.SpringConst_Rotate = b.V_Joint.SpringConst_Rotate.Clone(); } if (b.H_joint != null) { var js = model.H_jointSettingList[i]; js.Limit_AngleHigh = b.H_joint.Limit_AngleHigh.Clone(); js.Limit_AngleLow = b.H_joint.Limit_AngleLow.Clone(); js.Limit_MoveHigh = b.H_joint.Limit_MoveHigh.Clone(); js.Limit_MoveLow = b.H_joint.Limit_MoveLow.Clone(); js.SpringConst_Move = b.H_joint.SpringConst_Move.Clone(); js.SpringConst_Rotate = b.H_joint.SpringConst_Rotate.Clone(); } } }
private void AssociateWith(SkirtModel model) { model.ParentBone = plugin.PMX.Bone.FirstOrDefault(x => x.Name == model.ParentBoneName); foreach (var col in model.ColumnList) { col.Model = model; foreach (var b in col.NodeList) { b.Column = col; b.Model = model; b.Bone = plugin.PMX.Bone.FirstOrDefault(x => x.Name == b.Name); if (b.Bone != null) { b.Position = b.Bone.Position; } b.Body = plugin.PMX.Body.FirstOrDefault(x => x.Name == b.Name); b.V_Joint = plugin.PMX.Joint.FirstOrDefault(x => x.Name == b.Name); b.H_joint = plugin.PMX.Joint.FirstOrDefault(x => x.Name == "横" + b.Name); } } }