private void effectMenuItem_Click(object sender, EventArgs e) { ToolStripItem menuItem = sender as ToolStripMenuItem; string nativeClassName = menuItem.Tag as String; //-- 创建特效元素并添加到资源对象中 string elemName = ("SFX_" + DateTime.Now.ToFileTime()); NEffectElement newElem = NEffectElement.CreateEffectElement(nativeClassName, elemName); if (newElem == null) { return; } m_res.AddElement(newElem); m_preview.ShowSpecialEffect(m_res); m_preview.Refresh(); //-- 创建对应的控件 int numCtrl = m_elementsCtrl.Count; SFXElement newCtrl = new SFXElement(newElem); this.splitContainerV.Panel2.Controls.Add(newCtrl); newCtrl.Location = new Point(2 + numCtrl * (newCtrl.Width + 2), 2); int h = this.splitContainerV.Panel2.Height - 20; newCtrl.Height = h; m_elementsCtrl.Add(newCtrl); newCtrl.SetActive(true); newCtrl.RemoveElement += new EventHandler(OnRemoveElement); newCtrl.PropertySelected += new EventHandler(OnElementPropertySelected); newCtrl.PostPropertyEdit += new EventHandler(OnElementPostPropertyEdit); newCtrl.ActiveElement += new EventHandler(OnActiveElement); newCtrl.RestartInstance += new EventHandler(OnRestartInstance); }
public SFXElement(NEffectElement obj) { InitializeComponent(); m_obj = obj; this.labelType.Text = obj.NativeClassName; this.propertyGridEffect.SelectedObject = obj; }
private void openOToolStripMenuItem_Click(object sender, EventArgs e) { //打开特效 using (VirtualFileDialog dlg = new VirtualFileDialog()) { dlg.Text = "加载特效 ..."; if (dlg.ShowDialog(this) == DialogResult.OK) { NResourceLoc loc = dlg.GetResourceLocation(); m_res.Clear(); m_elementsCtrl.Clear(); m_Timeline.Clear(); this.splitContainerV.Panel2.Controls.Clear(); m_res.LoadFromFile(loc); //更新控制器 for (int i = 0; i < m_res.ElementCount(); ++i) { NEffectElement elem = m_res.GetElement(i); int numCtrl = m_elementsCtrl.Count; SFXElement newCtrl = new SFXElement(elem); this.splitContainerV.Panel2.Controls.Add(newCtrl); newCtrl.Location = new Point(2 + numCtrl * (newCtrl.Width + 2), 2); int h = this.splitContainerV.Panel2.Height - 20; newCtrl.Height = h; m_elementsCtrl.Add(newCtrl); newCtrl.SetActive(true); newCtrl.RemoveElement += new EventHandler(OnRemoveElement); newCtrl.PropertySelected += new EventHandler(OnElementPropertySelected); newCtrl.PostPropertyEdit += new EventHandler(OnElementPostPropertyEdit); newCtrl.ActiveElement += new EventHandler(OnActiveElement); newCtrl.RestartInstance += new EventHandler(OnRestartInstance); } NActorComponent comp = m_preview.ResourceActorComponent; NSpecialEffectInstance sfxComp = comp as NSpecialEffectInstance; if (sfxComp != null) { sfxComp.ResetResource(m_res); } m_preview.Refresh(); } } }
public ResSFXEditor() { m_realtimeMode = true; m_elementsCtrl = new List <SFXElement>(); InitializeComponent(); m_res = NResourceManager.Instance.NewSpecialEffect("DefaultSFXRes"); m_preview = new ResourcePreview("ResSFXPreview_LV"); m_preview.ShowSpecialEffect(m_res); this.splitContainerV.Panel1.Controls.Add(m_preview); this.splitContainerH.Panel2.Enabled = true; NControl.NCurveEditorCtrl curveCtrl = new NexusEditor.NControl.NCurveEditorCtrl(); this.groupBoxCurve.Controls.Add(curveCtrl); curveCtrl.Dock = DockStyle.Fill; //-- 根据特效元素子类型,创建菜单内容 System.Collections.ArrayList nativeClassList = NEffectElement.GetNativeClassNameList(); foreach (String className in nativeClassList) { ToolStripItem menuItem = this.contextMenuStripCreate.Items.Add("new " + className); menuItem.Tag = className; menuItem.Click += new EventHandler(effectMenuItem_Click); } //-- 取得所有Distribution相关的class m_distributionClasses = new List <Type>(); Type baseDistType = typeof(NexusEngine.NDistribution); Assembly engineDll = baseDistType.Assembly; foreach (Type t in engineDll.GetTypes()) { if (t.IsSubclassOf(baseDistType) && !t.IsAbstract) { m_distributionClasses.Add(t); } } m_Timeline.TooltipDelegate = this.OnTimelineTooltip; }
void OnRemoveElement(object sender, EventArgs e) { SFXElement elemCtrl = sender as SFXElement; //-- 处理资源和渲染对象 m_res.RemoveElement(elemCtrl.EditElement.Name); NActorComponent comp = m_preview.ResourceActorComponent; NSpecialEffectInstance sfxComp = comp as NSpecialEffectInstance; if (sfxComp != null) { sfxComp.ResetResource(m_res); } //-- 更新UI m_Timeline.Clear(); this.splitContainerV.Panel2.Controls.Clear(); m_elementsCtrl.Remove(elemCtrl); //更新控制器 for (int i = 0; i < m_res.ElementCount(); ++i) { NEffectElement elem = m_res.GetElement(i); int numCtrl = i; SFXElement newCtrl = new SFXElement(elem); this.splitContainerV.Panel2.Controls.Add(newCtrl); newCtrl.Location = new Point(2 + numCtrl * (newCtrl.Width + 2), 2); int h = this.splitContainerV.Panel2.Height - 20; newCtrl.Height = h; newCtrl.SetActive(true); newCtrl.RemoveElement += new EventHandler(OnRemoveElement); newCtrl.PropertySelected += new EventHandler(OnElementPropertySelected); newCtrl.PostPropertyEdit += new EventHandler(OnElementPostPropertyEdit); newCtrl.ActiveElement += new EventHandler(OnActiveElement); newCtrl.RestartInstance += new EventHandler(OnRestartInstance); } m_preview.Refresh(); }
private void btnResetPropertyType_Click(object sender, EventArgs e) { //-- 找到选中的type string selectedTypeName = this.comboBoxType.SelectedItem as string; Type newDistType = null; foreach (Type t in m_distributionClasses) { if (t.Name == selectedTypeName) { newDistType = t; break; } } if (newDistType == null) { return; } //-- 创建新对象 NDistribution newDistObj = Activator.CreateInstance(newDistType) as NDistribution; if (newDistObj == null) { return; } //-- 把新的Distribution对象设置给特效元素 NEffectElement sfxElem = this.groupBoxObject.Tag as NEffectElement; string propertyName = this.groupBoxObject.Text; Type elemType = sfxElem.GetType(); PropertyInfo propertyObj = elemType.GetProperty(propertyName); propertyObj.SetValue(sfxElem, newDistObj, null); //-- 更新自己的显示 this.propertyGridDist.SelectedObject = newDistObj; string name = this.propertyGridDist.Text; Type valueType = newDistObj.GetType(); //-- 更新编辑网格 if (valueType == typeof(NexusEngine.NDistributionFloatCurve)) { FloatCurve item = new FloatCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionFloatCurve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector2Curve)) { VectorCurve2 item = new VectorCurve2(); item.Name = name; item.Bind((NexusEngine.NDistributionVector2Curve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionVector3Curve)) { VectorCurve3 item = new VectorCurve3(); item.Name = name; item.Bind((NexusEngine.NDistributionVector3Curve)newDistObj); m_Timeline.AddItem(item); } else if (valueType == typeof(NexusEngine.NDistributionColorCurve)) { ColorCurve item = new ColorCurve(); item.Name = name; item.Bind((NexusEngine.NDistributionColorCurve)newDistObj); m_Timeline.AddItem(item); } else { m_Timeline.Clear(); } }