// Magica Cloth 2.
// Copyright (c) 2023 MagicaSoft.
// https://magicasoft.jp
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;
namespace MagicaCloth2
{
///
/// Serialize data (1)
/// Contains all parameters that can be changed during execution.
/// The part that can be exported externally as Json.
///
[System.Serializable]
public partial class ClothSerializeData
{
///
/// simulation type.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public ClothProcess.ClothType clothType = ClothProcess.ClothType.MeshCloth;
///
/// Renderer list used in MeshCloth.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public List sourceRenderers = new List();
public enum PaintMode
{
Manual = 0,
[InspectorName("Texture Fixed(RD) Move(GR) Ignore(BK)")]
Texture_Fixed_Move = 1,
[InspectorName("Texture Fixed(RD) Move(GR) Limit(BL) Ignore(BK)")]
Texture_Fixed_Move_Limit = 2,
}
///
/// vertex paint mode.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public PaintMode paintMode = PaintMode.Manual;
///
/// texture for painting.
/// Sync to sourceRenderers.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public List paintMaps = new List();
///
/// Root bone list used in BoneCloth.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public List rootBones = new List();
///
/// BoneCloth connection method.
/// [NG] Runtime changes.
/// [NG] Export/Import with Presets
///
public RenderSetupData.BoneConnectionMode connectionMode = RenderSetupData.BoneConnectionMode.Line;
///
/// Transform rotation interpolation rate in BoneCloth.(0.0 ~ 1.0)
/// (0.0=parent-based, 0.5=middle, 1.0=child-based)
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
[Range(0.0f, 1.0f)]
public float rotationalInterpolation = 0.5f;
///
/// Rotation interpolation rate of Root Transform in BoneCloth.(0.0 ~ 1.0)
/// (0.0=does not rotate, 0.5=middle, 1.0=child-based)
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
[Range(0.0f, 1.0f)]
public float rootRotation = 0.5f;
///
/// Set the update timing.
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
public ClothUpdateMode updateMode = ClothUpdateMode.Normal;
///
/// Blend ratio between initial pose and animation pose.
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
[Range(0.0f, 1.0f)]
public float animationPoseRatio = 0.0f;
///
/// vertex reduction parameters.
///
public ReductionSettings reductionSetting = new ReductionSettings();
///
/// custom skinning parameters.
///
public CustomSkinningSettings customSkinningSetting = new CustomSkinningSettings();
///
/// Normal definition.
///
public NormalAlignmentSettings normalAlignmentSetting = new NormalAlignmentSettings();
///
/// culling settings.
///
public CullingSettings cullingSettings = new CullingSettings();
///
/// axis to use as normal.
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
public ClothNormalAxis normalAxis = ClothNormalAxis.Up;
///
/// Gravity.
/// [OK] Runtime changes.
/// [OK] Export/Import with Presets
///
[Range(0.0f, 10.0f)]
public float gravity = 5.0f;
///
/// Gravity world direction.
/// [OK] Runtime changes.
/// [OK] Export/Import with Presets
///
public float3 gravityDirection = new float3(0, -1, 0);
///
/// 初期姿勢での重力の減衰率(0.0 ~ 1.0)
/// 1.0にすることで初期姿勢では重力係数が0になる。
/// 0.0では常にどの姿勢でも重力が100%発生する。
///
/// Attenuation rate of gravity at initial pose (0.0 ~ 1.0)
/// By setting it to 1.0, the gravity coefficient becomes 0 in the initial posture.
/// At 0.0, gravity is always 100% in any pose.
///
/// [OK] Runtime changes.
/// [OK] Export/Import with Presets
///
[Range(0.0f, 1.0f)]
public float gravityFalloff = 0.0f;
///
/// リセット後の速度安定化時間(s)
/// 急激な速度変化を抑えます。
///
/// Speed stabilization time after reset (s).
/// Avoid sudden speed changes.
///
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
[Range(0.0f, 1.0f)]
public float stablizationTimeAfterReset = 0.1f;
///
/// 元の姿勢とシミュレーション結果のブレンド割合(0.0 ~ 1.0)
///
/// Blend ratio of original posture and simulation result (0.0 ~ 1.0).
///
/// [OK] Runtime changes.
/// [NG] Export/Import with Presets
///
[System.NonSerialized]
public float blendWeight = 1.0f;
///
/// air resistance.
/// [OK] Runtime changes.
/// [OK] Export/Import with Presets
///
public CurveSerializeData damping = new CurveSerializeData(0.05f);
///
/// Particle radius.
/// [OK] Runtime changes.
/// [OK] Export/Import with Presets
///
public CurveSerializeData radius = new CurveSerializeData(0.02f);
///
/// Inertia.
///
public InertiaConstraint.SerializeData inertiaConstraint = new InertiaConstraint.SerializeData();
///
/// Tether.
///
public TetherConstraint.SerializeData tetherConstraint = new TetherConstraint.SerializeData();
///
/// Distance restoration.
///
public DistanceConstraint.SerializeData distanceConstraint = new DistanceConstraint.SerializeData();
///
/// Triangle bending / volume.
///
public TriangleBendingConstraint.SerializeData triangleBendingConstraint = new TriangleBendingConstraint.SerializeData();
///
/// Angle restoration.
///
public AngleConstraint.RestorationSerializeData angleRestorationConstraint = new AngleConstraint.RestorationSerializeData();
///
/// Angle Limit.
///
public AngleConstraint.LimitSerializeData angleLimitConstraint = new AngleConstraint.LimitSerializeData();
///
/// Max distance / Backstop
///
public MotionConstraint.SerializeData motionConstraint = new MotionConstraint.SerializeData();
///
/// Collider collision.
///
public ColliderCollisionConstraint.SerializeData colliderCollisionConstraint = new ColliderCollisionConstraint.SerializeData();
///
/// Self collision
///
public SelfCollisionConstraint.SerializeData selfCollisionConstraint = new SelfCollisionConstraint.SerializeData();
///
/// Wind
///
public WindSettings wind = new WindSettings();
///
/// Spring
///
public SpringConstraint.SerializeData springConstraint = new SpringConstraint.SerializeData();
}
}