예제 #1
0
        public void SetInitialValueOfField(string targetField)
        {
            object obj = null;
            FieldInfo fi = GetFieldInfo(targetField, out obj);
            if (obj != null)
            {
                if (fi.FieldType.Equals(typeof(Single)) || fi.FieldType.Equals(typeof(Double)) || fi.FieldType.Equals(typeof(Int32)) || fi.FieldType.Equals(typeof(UInt32)))
                {
                    Debug.Log("Field type is: " + fi.FieldType.Name);
                    if (m_startState == PartModule.StartState.Editor)
                    {
                        TweakableParamGUI.GetInstance().CheckClear();
                        TweakableParamGUIItem item = new TweakableParamGUIItem(TweakableParamGUI.GetInstance(), this);
                        if (tweakedValue == -1.0f)
                        {
                            tweakedValue = Convert.ToSingle(fi.GetValue(obj));
                            Debug.Log("Field is: " + tweakedValue.ToString());
                        }

                        if (this.parentModule != null)
                        {
                            this.parentModule.UpdateTweakedValue(this);
                        }
                    }
                    else
                    {
                        TweakableParamGUI.GetInstance().ClearGUIItem();

                        if (tweakedValue > maxValue) tweakedValue = maxValue;
                        if (tweakedValue < minValue) tweakedValue = minValue;
                        Debug.Log(String.Format("Setting tweakable parameter: {0} to {1}", fi.Name, tweakedValue));
                        if (!setOnlyOnLaunchPad || ((int)m_startState & (int)(PartModule.StartState.PreLaunch)) != 0)
                            fi.SetValue(obj, Convert.ChangeType(tweakedValue, fi.FieldType));
                    }
                }
                else
                {
                    // Float curve.
                    Debug.Log("Field type is: " + fi.FieldType.Name);
                    if (m_startState == PartModule.StartState.Editor)
                    {
                        TweakableParamGUI.GetInstance().CheckClear();
                        TweakableParamGUIItem item = new TweakableParamGUIItem(TweakableParamGUI.GetInstance(), this);
                        if (tweakedCurve == null)
                        {
                            Debug.Log("Starting analyzing FloatCurve.");
                            tweakedCurve = GetKeysFromFloatCurve((FloatCurve)fi.GetValue(obj));
                        }

                        if (this.parentModule != null)
                        {
                            this.parentModule.UpdateTweakedValue(this);
                        }
                    }
                    else
                    {
                        TweakableParamGUI.GetInstance().ClearGUIItem();

                        Debug.Log(String.Format("Setting tweakable parameter: {0} to {1}", fi.Name, tweakedCurve));
                        if (!setOnlyOnLaunchPad || ((int)m_startState & (int)(PartModule.StartState.PreLaunch)) != 0)
                        {
                            if (tweakedCurve == null)
                            {
                                fi.SetValue(obj, Convert.ChangeType(tweakedValue, fi.FieldType));
                            }
                            else
                            {
                                FloatCurve newFloatCurve = new FloatCurve();
                                for (int i = 0; i < tweakedCurve.Count / 2; ++i)
                                    newFloatCurve.Add(tweakedCurve[i * 2], tweakedCurve[i * 2 + 1]);

                                fi.SetValue(obj, newFloatCurve);
                            }
                        }
                    }
                }
            }
        }
예제 #2
0
        public void UnregisterGUIItem(TweakableParamGUIItem item)
        {
            if (m_guiItems.Contains(item))
                m_guiItems.Remove(item);

            if (m_guiItems.Count == 0) DeleteGUI();

            Part controllerPart = null;
            if (item.m_controller is ModuleTweakableParam)
                controllerPart = (item.m_controller as ModuleTweakableParam).part;
            else if (item.m_controller is ModuleTweakableSubParam)
                controllerPart = (item.m_controller as ModuleTweakableSubParam).parentModule.part;

            foreach (TweakableParamGUIGroup group in m_guiGroups)
            {
                if (group.m_part == controllerPart)
                {
                    // Already has a group of the same part.
                    group.m_guiItems.Remove(item);
                    if (group.m_guiItems.Count == 0)
                    {
                        m_guiGroups.Remove(group);
                    }
                    return;
                }
            }
        }
예제 #3
0
        public void SetInitialValueOfField(string targetField)
        {
            object obj = null;
            FieldInfo fi = GetFieldInfo(targetField, out obj);
            if (obj != null)
            {
                Debug.Log("Field type is: " + fi.FieldType.Name);
                if (m_startState == StartState.Editor)
                {
                    TweakableParamGUI.GetInstance().CheckClear();
                    TweakableParamGUIItem item = new TweakableParamGUIItem(TweakableParamGUI.GetInstance(), this);
                    if (tweakedValue == -1.0f)
                    {
                        Debug.Log("Field is: " + fi.GetValue(obj).ToString());
                        tweakedValue = Convert.ToSingle(fi.GetValue(obj));
                    }
                }
                else
                {
                    TweakableParamGUI.GetInstance().ClearGUIItem();

                    if (tweakedValue > maxValue) tweakedValue = maxValue;
                    if (tweakedValue < minValue) tweakedValue = minValue;
                    Debug.Log(String.Format("Setting tweakable parameter: {0} to {1}", fi.Name, tweakedValue));
                    if (!setOnlyOnLaunchPad || ((int)m_startState & (int)(StartState.PreLaunch)) != 0)
                        fi.SetValue(obj, Convert.ChangeType(tweakedValue, fi.FieldType));
                }
            }
        }
예제 #4
0
        public void RegisterGUIItem(TweakableParamGUIItem item)
        {
            if (m_guiItems.Count == 0)
                AddGUI();

            if (m_guiItems.Contains(item)) return;
            m_guiItems.Add(item);

            Part controllerPart = null;
            if (item.m_controller is ModuleTweakableParam)
                controllerPart = (item.m_controller as ModuleTweakableParam).part;
            else if (item.m_controller is ModuleTweakableSubParam)
                controllerPart = (item.m_controller as ModuleTweakableSubParam).parentModule.part;

            foreach (TweakableParamGUIGroup group in m_guiGroups)
            {

                if (group.m_part == controllerPart)
                {
                    // Already has a group of the same part.
                    group.m_guiItems.Add(item);
                    return;
                }
            }

            TweakableParamGUIGroup newGroup = new TweakableParamGUIGroup(this, controllerPart);
            m_guiGroups.Add(newGroup);
            newGroup.m_guiItems.Add(item);
        }