ThrowBall/Assets/Plugins/RayFire/Scripts/Editor/RayfireRigidRootEditor.cs

674 lines
33 KiB
C#

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using RayFire;
namespace RayFireEditor
{
[CanEditMultipleObjects]
[CustomEditor (typeof(RayfireRigidRoot))]
public class RayfireRigidRootEditor : Editor
{
RayfireRigidRoot root;
// Foldout
static bool fld_phy;
static bool fld_act;
static bool fld_lim;
static bool fld_cls;
static bool fld_clp;
static bool fld_fad;
static bool fld_res;
// Physic Minimum & Maximum ranges
const int solver_min = 1;
const int solver_max = 20;
const float sleep_min = 0.001f;
const float sleep_max = 0.1f;
const float dampen_min = 0f;
const float dampen_max = 1f;
// Activation Minimum & Maximum ranges
const float offset_min = 0;
const float offset_max = 10f;
const float velocity_min = 0;
const float velocity_max = 5f;
// Limitation Minimum & Maximum ranges
const float solidity_min = 0;
const float solidity_max = 10f;
const int depth_min = 0;
const int depth_max = 7;
const float time_min = 0.05f;
const float time_max = 10f;
const float size_dml_min = 0.01f;
const float size_dml_max = 50f;
// Cluster Minimum & Maximum ranges
const float cls_flt_area_min = 0f;
const float cls_flt_area_max = 1f;
const float cls_flt_size_min = 0;
const float cls_flt_size_max = 10f;
const int cls_flt_perc_min = 0;
const int cls_flt_perc_max = 100;
const int cls_flt_seed_min = 0;
const int cls_flt_seed_max = 100;
const int cls_ratio_min = 1;
const int cls_ratio_max = 100;
const float cls_units_min = 0;
const float cls_units_max = 10f;
const int cls_shard_area_min = 0;
const int cls_shard_area_max = 100;
const int cls_clusters_min = 0;
const int cls_clusters_max = 40;
// Collapse Minimum & Maximum ranges
const int clp_start_min = 0;
const int clp_start_max = 99;
const int clp_end_min = 1;
const int clp_end_max = 100;
const int clp_steps_min = 1;
const int clp_steps_max = 100;
const float clp_duration_min = 0;
const float clp_duration_max = 60f;
const int clp_var_min = 0;
const int clp_var_max = 100;
const int clp_seed_min = 0;
const int clp_seed_max = 99;
// Fade Minimum & Maximum ranges
const float fade_offset_min = 0;
const float fade_offset_max = 20f;
const float fade_time_min = 1f;
const float fade_time_max = 30f;
const float fade_life_min = 0f;
const float fade_life_max = 90f;
const float fade_size_min = 0f;
const float fade_size_max = 20f;
const int fade_shards_min = 0;
const int fade_shards_max = 50;
// Main Serialized properties
SerializedProperty sp_mn_ini;
SerializedProperty sp_mn_sim;
// Physic Serialized properties
SerializedProperty sp_phy_mtp;
SerializedProperty sp_phy_mat;
SerializedProperty sp_phy_mby;
SerializedProperty sp_phy_mss;
SerializedProperty sp_phy_ctp;
SerializedProperty sp_phy_pln;
SerializedProperty sp_phy_ign;
SerializedProperty sp_phy_grv;
SerializedProperty sp_phy_slv;
SerializedProperty sp_phy_slt;
SerializedProperty sp_phy_dmp;
// Activation Serialized properties
SerializedProperty sp_act_off;
SerializedProperty sp_act_loc;
SerializedProperty sp_act_vel;
//SerializedProperty sp_act_dmg;
SerializedProperty sp_act_act;
SerializedProperty sp_act_imp;
SerializedProperty sp_act_con;
SerializedProperty sp_act_uny;
SerializedProperty sp_act_atb;
SerializedProperty sp_act_l;
SerializedProperty sp_act_lay;
// limitations Serialized properties
SerializedProperty sp_lim_col;
SerializedProperty sp_lim_sol;
SerializedProperty sp_lim_dep;
SerializedProperty sp_lim_tim;
SerializedProperty sp_lim_siz;
SerializedProperty sp_lim_vis;
SerializedProperty sp_lim_bld;
// Cluster Demolition Serialized properties
SerializedProperty sp_cls_cnt;
SerializedProperty sp_cls_sim;
SerializedProperty sp_cls_fl_ar;
SerializedProperty sp_cls_fl_sz;
SerializedProperty sp_cls_fl_pr;
SerializedProperty sp_cls_fl_sd;
SerializedProperty sp_cls_ds_tp;
SerializedProperty sp_cls_ds_rt;
SerializedProperty sp_cls_ds_un;
SerializedProperty sp_cls_sh_ar;
SerializedProperty sp_cls_sh_dm;
SerializedProperty sp_cls_min;
SerializedProperty sp_cls_max;
SerializedProperty sp_cls_dml;
// Collapse Serialized properties
SerializedProperty sp_clp_type;
SerializedProperty sp_clp_start;
SerializedProperty sp_clp_end;
SerializedProperty sp_clp_steps;
SerializedProperty sp_clp_dur;
SerializedProperty sp_clp_var;
SerializedProperty sp_clp_seed;
// Fade Serialized properties
SerializedProperty sp_fad_dml;
SerializedProperty sp_fad_act;
SerializedProperty sp_fad_ofs;
SerializedProperty sp_fad_tp;
SerializedProperty sp_fad_tm;
SerializedProperty sp_fad_lf_tp;
SerializedProperty sp_fad_lf_tm;
SerializedProperty sp_fad_lf_vr;
SerializedProperty sp_fad_sz;
SerializedProperty sp_fad_sh;
// Reset Serialized properties
SerializedProperty sp_res_tm;
SerializedProperty sp_res_dm;
SerializedProperty sp_res_cn;
private void OnEnable()
{
// Get component
root = (RayfireRigidRoot)target;
// Find Main properties
sp_mn_ini = serializedObject.FindProperty(nameof(root.initialization));
sp_mn_sim = serializedObject.FindProperty(nameof(root.simTp));
// Find Physic properties
sp_phy_mtp = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.mt));
sp_phy_mat = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.ma));
sp_phy_mby = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.mb));
sp_phy_mss = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.ms));
sp_phy_ctp = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.ct));
sp_phy_pln = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.pc));
sp_phy_ign = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.ine));
sp_phy_grv = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.gr));
sp_phy_slv = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.si));
sp_phy_slt = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.st));
sp_phy_dmp = serializedObject.FindProperty(nameof(root.physics) + "." + nameof(root.physics.dm));
// Find Activation properties
sp_act_off = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.off));
sp_act_loc = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.loc));
sp_act_vel = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.vel));
//sp_act_dmg = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.dmg));
sp_act_act = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.act));
sp_act_imp = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.imp));
sp_act_con = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.con));
sp_act_uny = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.uny));
sp_act_atb = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.atb));
sp_act_l = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.l));
sp_act_lay = serializedObject.FindProperty(nameof(root.activation) + "." + nameof(root.activation.lay));
// Find limitations properties
sp_lim_col = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.col));
sp_lim_sol = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.sol));
sp_lim_dep = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.depth));
sp_lim_tim = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.time));
sp_lim_siz = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.size));
sp_lim_vis = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.vis));
sp_lim_bld = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.limitations) + "." + nameof(root.dml.limitations.bld));
// Find Cluster Demolition properties
sp_cls_cnt = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.cnt));
sp_cls_sim = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.sim));
sp_cls_fl_ar = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.mAr));
sp_cls_fl_sz = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.mSz));
sp_cls_fl_pr = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.pct));
sp_cls_fl_sd = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.seed));
sp_cls_ds_tp = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.type));
sp_cls_ds_rt = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.ratio));
sp_cls_ds_un = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.units));
sp_cls_sh_ar = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.sAr));
sp_cls_sh_dm = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.sDm));
sp_cls_min = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.mnAm));
sp_cls_max = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.mxAm));
sp_cls_dml = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.cDm));
// Find Collapse properties
sp_clp_type = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.type));
sp_clp_start = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.start));
sp_clp_end = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.end));
sp_clp_steps = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.steps));
sp_clp_dur = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.duration));
sp_clp_var = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.var));
sp_clp_seed = serializedObject.FindProperty(nameof(root.dml) + "." + nameof(root.dml.clsDemol) + "." + nameof(root.dml.clsDemol.collapse) + "." + nameof(root.dml.clsDemol.collapse.seed));
// Find Fade properties
sp_fad_dml = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.onDemolition));
sp_fad_act = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.onActivation));
sp_fad_ofs = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.byOffset));
sp_fad_tp = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.fadeType));
sp_fad_tm = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.fadeTime));
sp_fad_lf_tp = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.lifeType));
sp_fad_lf_tm = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.lifeTime));
sp_fad_lf_vr = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.lifeVariation));
sp_fad_sz = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.sizeFilter));
sp_fad_sh = serializedObject.FindProperty(nameof(root.fading) + "." + nameof(root.fading.shardAmount));
// Reset Serialized properties
sp_res_tm = serializedObject.FindProperty(nameof(root.reset) + "." + nameof(root.reset.transform));
sp_res_dm = serializedObject.FindProperty(nameof(root.reset) + "." + nameof(root.reset.damage));
sp_res_cn = serializedObject.FindProperty(nameof(root.reset) + "." + nameof(root.reset.connectivity));
// Foldout
if (EditorPrefs.HasKey (TextKeys.rot_fld_phy) == true) fld_phy = EditorPrefs.GetBool (TextKeys.rot_fld_phy);
if (EditorPrefs.HasKey (TextKeys.rot_fld_act) == true) fld_act = EditorPrefs.GetBool (TextKeys.rot_fld_act);
if (EditorPrefs.HasKey (TextKeys.rot_fld_lim) == true) fld_lim = EditorPrefs.GetBool (TextKeys.rot_fld_lim);
if (EditorPrefs.HasKey (TextKeys.rot_fld_cls) == true) fld_cls = EditorPrefs.GetBool (TextKeys.rot_fld_cls);
if (EditorPrefs.HasKey (TextKeys.rot_fld_clp) == true) fld_clp = EditorPrefs.GetBool (TextKeys.rot_fld_clp);
if (EditorPrefs.HasKey (TextKeys.rot_fld_fad) == true) fld_fad = EditorPrefs.GetBool (TextKeys.rot_fld_fad);
if (EditorPrefs.HasKey (TextKeys.rot_fld_res) == true) fld_res = EditorPrefs.GetBool (TextKeys.rot_fld_res);
}
/// /////////////////////////////////////////////////////////
/// Inspector
/// /////////////////////////////////////////////////////////
public override void OnInspectorGUI()
{
// Update changed properties
serializedObject.Update();
GUICommon.Space ();
GUICommon.Space ();
GUI_Buttons();
GUI_Info();
GUICommon.Space ();
GUICommon.CaptionBox (TextRig.gui_cap_mn);
GUICommon.Space ();
GUICommon.PropertyField (sp_mn_ini, TextRig.gui_mn_ini);
GUI_Simulation();
GUICommon.Space ();
GUI_Demolition();
GUICommon.CaptionBox (TextRig.gui_cap_com);
GUI_Fade();
GUICommon.Space ();
GUI_Reset();
// Apply changes
serializedObject.ApplyModifiedProperties();
}
/// /////////////////////////////////////////////////////////
/// Simulation
/// /////////////////////////////////////////////////////////
void GUI_Simulation()
{
GUICommon.CaptionBox (TextRig.gui_cap_sim);
GUICommon.Space ();
GUICommon.PropertyField (sp_mn_sim, TextRig.gui_mn_sim);
GUI_Physic();
GUICommon.Space ();
GUI_Activation();
}
void GUI_Physic()
{
GUICommon.Foldout (ref fld_phy, TextKeys.rot_fld_phy, TextPhy.gui_phy.text);
if (fld_phy == true)
{
EditorGUI.indentLevel++;
GUICommon.PropertyField (sp_phy_mtp, TextPhy.gui_phy_mtp);
GUICommon.PropertyField (sp_phy_mat, TextPhy.gui_phy_mat);
GUICommon.Caption (TextPhy.gui_cap_mas);
GUICommon.PropertyField (sp_phy_mby, TextPhy.gui_phy_mby);
if (root.physics.mb == MassType.MassProperty)
GUICommon.PropertyField (sp_phy_mss, TextPhy.gui_phy_mss);
GUICommon.Caption (TextPhy.gui_cap_col);
GUICommon.PropertyField (sp_phy_ctp, TextPhy.gui_phy_ctp);
GUICommon.PropertyField (sp_phy_pln, TextPhy.gui_phy_pln);
GUICommon.PropertyField (sp_phy_ign, TextPhy.gui_phy_ign);
GUICommon.Caption (TextPhy.gui_cap_oth);
GUICommon.PropertyField (sp_phy_grv, TextPhy.gui_phy_grv);
GUICommon.Space ();
GUICommon.IntSlider (sp_phy_slv, solver_min, solver_max, TextPhy.gui_phy_slv);
GUICommon.Slider (sp_phy_slt, sleep_min, sleep_max, TextPhy.gui_phy_slt);
GUICommon.Caption (TextPhy.gui_cap_frg);
GUICommon.Slider (sp_phy_dmp, dampen_min, dampen_max, TextPhy.gui_phy_dmp);
EditorGUI.indentLevel--;
}
}
void GUI_Activation()
{
if (ActivatableState() == false)
return;
GUICommon.Foldout (ref fld_act, TextKeys.rot_fld_act, TextAcv.gui_act.text);
if (fld_act == true)
{
EditorGUI.indentLevel++;
GUICommon.Caption (TextAcv.gui_cap_act);
GUICommon.Slider (sp_act_off, offset_min, offset_max, TextAcv.gui_act_off);
if (root.activation.off > 0)
GUICommon.PropertyField (sp_act_loc, TextAcv.gui_act_loc);
GUICommon.Slider (sp_act_vel, velocity_min, velocity_max, TextAcv.gui_act_vel);
//GUICommon.Slider (sp_act_dmg, damage_act_min, damage_act_max, TextAcv.gui_act_dmg);
GUICommon.PropertyField (sp_act_act, TextAcv.gui_act_act);
GUICommon.PropertyField (sp_act_imp, TextAcv.gui_act_imp);
GUICommon.PropertyField (sp_act_con, TextAcv.gui_act_con);
if (root.activation.con == true)
{
GUICommon.PropertyField (sp_act_uny, TextAcv.gui_act_uny);
GUICommon.PropertyField (sp_act_atb, TextAcv.gui_act_atb);
}
GUICommon.Caption (TextAcv.gui_cap_pst);
GUICommon.PropertyField (sp_act_l, TextAcv.gui_act_l);
if (sp_act_l.boolValue == true)
GUICommon.LayerField (sp_act_lay, TextAcv.gui_act_lay);
EditorGUI.indentLevel--;
}
}
bool ActivatableState()
{
foreach (RayfireRigidRoot scr in targets)
if (ActivatableState(scr) == true)
return true;
return false;
}
static bool ActivatableState(RayfireRigidRoot scr)
{
if (scr.simTp == SimType.Inactive || scr.simTp == SimType.Kinematic)
return true;
return false;
}
/// /////////////////////////////////////////////////////////
/// Demolition
/// /////////////////////////////////////////////////////////
void GUI_Demolition()
{
if (DemolitionState() == false)
return;
GUICommon.Caption (TextRig.gui_cap_dml);
GUICommon.Space ();
GUI_Limitations();
GUICommon.Space ();
GUI_Cluster();
GUICommon.Space ();
}
bool DemolitionState()
{
foreach (RayfireRigidRoot scr in targets)
if (DemolitionState(scr) == true)
return true;
return false;
}
static bool DemolitionState(RayfireRigidRoot scr)
{
if (scr.simTp == SimType.Inactive || scr.simTp == SimType.Kinematic)
if (scr.activation.con == true)
return true;
return false;
}
/// /////////////////////////////////////////////////////////
/// Limitations
/// /////////////////////////////////////////////////////////
void GUI_Limitations()
{
GUICommon.Foldout (ref fld_lim, TextKeys.rot_fld_lim, TextLim.gui_lim.text);
if (fld_lim == true)
{
EditorGUI.indentLevel++;
GUICommon.Caption (TextLim.gui_cap_col);
GUICommon.PropertyField (sp_lim_col, TextLim.gui_lim_col);
if (root.dml.limitations.col == true)
GUICommon.Slider (sp_lim_sol, solidity_min, solidity_max, TextLim.gui_lim_sol);
EditorGUI.BeginChangeCheck();
string tag = EditorGUILayout.TagField (TextLim.gui_lim_tag, root.dml.limitations.tag);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObjects (targets, TextLim.gui_lim_tag.text);
foreach (RayfireRigidRoot scr in targets)
{
scr.dml.limitations.tag = tag;
SetDirty (scr);
}
}
GUICommon.Caption (TextLim.gui_cap_oth);
GUICommon.IntSlider (sp_lim_dep, depth_min, depth_max, TextLim.gui_lim_dep);
GUICommon.Slider (sp_lim_tim, time_min, time_max, TextLim.gui_lim_tim);
GUICommon.Slider (sp_lim_siz, size_dml_min, size_dml_max, TextLim.gui_lim_siz);
GUICommon.PropertyField (sp_lim_vis, TextLim.gui_lim_vis);
GUICommon.PropertyField (sp_lim_bld, TextLim.gui_lim_bld);
EditorGUI.indentLevel--;
}
}
/// /////////////////////////////////////////////////////////
/// Cluster
/// /////////////////////////////////////////////////////////
void GUI_Cluster()
{
GUICommon.Foldout (ref fld_cls, TextKeys.rot_fld_cls, TextCls.gui_cls.text);
if (fld_cls == true)
{
EditorGUI.indentLevel++;
GUICommon.Caption (TextCls.gui_cap_prp);
GUICommon.PropertyField (sp_cls_cnt, TextCls.gui_cls_cnt);
GUICommon.PropertyField (sp_cls_sim, TextCls.gui_cls_sim);
GUICommon.Caption (TextCls.gui_cap_flt);
if (root.dml.clsDemol.cnt != ConnectivityType.ByBoundingBox)
GUICommon.Slider (sp_cls_fl_ar, cls_flt_area_min, cls_flt_area_max, TextCls.gui_cls_fl_ar);
GUICommon.Slider (sp_cls_fl_sz, cls_flt_size_min, cls_flt_size_max, TextCls.gui_cls_fl_sz);
GUICommon.IntSlider(sp_cls_fl_pr, cls_flt_perc_min, cls_flt_perc_max, TextCls.gui_cls_fl_pr);
GUICommon.IntSlider (sp_cls_fl_sd, cls_flt_seed_min, cls_flt_seed_max, TextCls.gui_cls_fl_sd);
GUICommon.Caption (TextCls.gui_cap_dml);
GUICommon.PropertyField (sp_cls_ds_tp, TextCls.gui_cls_ds_tp);
if (root.dml.clsDemol.type == RFDemolitionCluster.RFDetachType.RatioToSize)
GUICommon.IntSlider (sp_cls_ds_rt, cls_ratio_min, cls_ratio_max, TextCls.gui_cls_ds_rt);
else
GUICommon.Slider (sp_cls_ds_un, cls_units_min, cls_units_max, TextCls.gui_cls_ds_un);
GUICommon.Caption (TextCls.gui_cap_shd);
GUICommon.IntSlider (sp_cls_sh_ar, cls_shard_area_min, cls_shard_area_max, TextCls.gui_cls_sh_ar);
GUICommon.PropertyField (sp_cls_sh_dm, TextCls.gui_cls_sh_dm);
GUICommon.Caption (TextCls.gui_cap_cls);
GUICommon.IntSlider(sp_cls_min, cls_clusters_min, cls_clusters_max, TextCls.gui_cls_min);
GUICommon.IntSlider(sp_cls_max, cls_clusters_min, cls_clusters_max, TextCls.gui_cls_max);
GUICommon.PropertyField (sp_cls_dml, TextCls.gui_cls_dml);
UI_Collapse();
EditorGUI.indentLevel--;
}
}
void UI_Collapse()
{
GUICommon.Caption (TextCls.gui_cap_clp);
GUICommon.Foldout (ref fld_clp, TextKeys.rot_fld_clp, TextCls.gui_cls_prp.text);
if (fld_clp == true)
{
EditorGUI.indentLevel++;
GUICommon.PropertyField (sp_clp_type, TextClp.gui_type);
GUICommon.IntSlider (sp_clp_start, clp_start_min, clp_start_max, TextClp.gui_start);
GUICommon.IntSlider (sp_clp_end, clp_end_min, clp_end_max, TextClp.gui_end);
GUICommon.IntSlider (sp_clp_steps, clp_steps_min, clp_steps_max, TextClp.gui_steps);
GUICommon.Slider (sp_clp_dur, clp_duration_min, clp_duration_max, TextClp.gui_duration);
if (root.dml.clsDemol.collapse.type != RFCollapse.RFCollapseType.Random)
GUICommon.IntSlider (sp_clp_var, clp_var_min, clp_var_max, TextClp.gui_var);
GUICommon.IntSlider (sp_clp_seed, clp_seed_min, clp_seed_max, TextClp.gui_seed);
EditorGUI.indentLevel--;
}
}
/// /////////////////////////////////////////////////////////
/// Fade
/// /////////////////////////////////////////////////////////
void GUI_Fade()
{
GUICommon.Foldout (ref fld_fad, TextKeys.rot_fld_fad, TextFad.gui_fad.text);
if (fld_fad == true)
{
EditorGUI.indentLevel++;
GUICommon.Caption (TextFad.gui_cap_ini);
GUICommon.PropertyField (sp_fad_dml, TextFad.gui_fad_dml);
GUICommon.PropertyField (sp_fad_act, TextFad.gui_fad_act);
GUICommon.Slider (sp_fad_ofs, fade_offset_min, fade_offset_max, TextFad.gui_fad_ofs);
GUICommon.Caption (TextFad.gui_cap_tp);
GUICommon.PropertyField (sp_fad_tp, TextFad.gui_fad_tp);
GUICommon.Slider (sp_fad_tm, fade_time_min, fade_time_max, TextFad.gui_fad_tm);
GUICommon.Caption (TextFad.gui_cap_lf);
GUICommon.PropertyField (sp_fad_lf_tp, TextFad.gui_fad_lf_tp);
GUICommon.Slider (sp_fad_lf_tm, fade_life_min, fade_life_max, TextFad.gui_fad_lf_tm);
GUICommon.Slider (sp_fad_lf_vr, fade_life_min, fade_life_max, TextFad.gui_fad_lf_vr);
GUICommon.Caption (TextFad.gui_cap_flt);
GUICommon.Slider (sp_fad_sz, fade_size_min, fade_size_max, TextFad.gui_fad_sz);
GUICommon.IntSlider (sp_fad_sh, fade_shards_min, fade_shards_max, TextFad.gui_fad_sh);
EditorGUI.indentLevel--;
}
}
/// /////////////////////////////////////////////////////////
/// Reset
/// /////////////////////////////////////////////////////////
void GUI_Reset()
{
GUICommon.Foldout (ref fld_res, TextKeys.rot_fld_res, TextRes.gui_res.text);
if (fld_res == true )
{
EditorGUI.indentLevel++;
GUICommon.Caption (TextRes.gui_cap_res);
GUICommon.PropertyField (sp_res_tm, TextRes.gui_res_tm);
GUICommon.PropertyField (sp_res_dm, TextRes.gui_res_dm);
GUICommon.PropertyField (sp_res_cn, TextRes.gui_res_cn);
EditorGUI.indentLevel--;
}
}
/// /////////////////////////////////////////////////////////
/// Buttons Info
/// /////////////////////////////////////////////////////////
void GUI_Buttons()
{
// Initialize
if (Application.isPlaying == true)
{
if (root.initialized == false)
{
if (GUILayout.Button (TextRig.gui_btn_init, GUILayout.Height (25)))
foreach (var targ in targets)
if (targ as RayfireRigidRoot != null)
if ((targ as RayfireRigidRoot).initialized == false)
(targ as RayfireRigidRoot).Initialize();
}
// Reuse
else
{
if (GUILayout.Button ("Reset Rigid Root", GUILayout.Height (25)))
foreach (var targ in targets)
if (targ as RayfireRigidRoot != null)
if ((targ as RayfireRigidRoot).initialized == true)
(targ as RayfireRigidRoot).ResetRigidRoot();
}
GUICommon.Space ();
}
RigidRootSetupUI();
}
void RigidRootSetupUI()
{
if (Application.isPlaying == false)
{
GUILayout.Space (2);
GUILayout.BeginHorizontal();
if (root.cluster.shards.Count == 0)
if (GUILayout.Button (TextRig.gui_btn_edt_setup, GUILayout.Height (25)))
foreach (var targ in targets)
if (targ as RayfireRigidRoot != null)
{
(targ as RayfireRigidRoot).EditorSetup();
SetDirty (targ as RayfireRigidRoot);
}
if (root.cluster.shards.Count > 0)
if (GUILayout.Button (TextRig.gui_btn_edt_reset, GUILayout.Height (25)))
foreach (var targ in targets)
if (targ as RayfireRigidRoot != null)
{
//RFPhysic.DestroyColliders (targ as RayfireRigidRoot);
(targ as RayfireRigidRoot).ResetSetup();
SetDirty (targ as RayfireRigidRoot);
}
EditorGUILayout.EndHorizontal();
GUILayout.Space (2);
}
}
void GUI_Info()
{
if (root.cluster.shards.Count > 0)
GUILayout.Label (TextRig.str_cls_shards + root.cluster.shards.Count);
if (root.physics.HasIgnore == true)
GUILayout.Label (TextRig.str_ignore + root.physics.ign.Count / 2);
}
/// /////////////////////////////////////////////////////////
/// Common
/// /////////////////////////////////////////////////////////
void SetDirty(RayfireRigidRoot scr)
{
if (Application.isPlaying == false)
{
EditorUtility.SetDirty (scr);
EditorSceneManager.MarkSceneDirty (scr.gameObject.scene);
SceneView.RepaintAll();
}
}
}
}