1 #include "pch.h"
2 #include "Actions.hpp"
3 
4 #include "../Main/Factory.hpp"
5 
6 namespace sh
7 {
8 
execute()9 	void ActionDeleteMaterial::execute()
10 	{
11 		sh::Factory::getInstance().destroyMaterialInstance(mName);
12 	}
13 
execute()14 	void ActionCloneMaterial::execute()
15 	{
16 		sh::MaterialInstance* sourceMaterial = sh::Factory::getInstance().getMaterialInstance(mSourceName);
17 		std::string sourceMaterialParent = static_cast<sh::MaterialInstance*>(sourceMaterial->getParent())->getName();
18 		sh::MaterialInstance* material = sh::Factory::getInstance().createMaterialInstance(
19 					mDestName, sourceMaterialParent);
20 		sourceMaterial->copyAll(material, sourceMaterial, false);
21 
22 		material->setSourceFile(sourceMaterial->getSourceFile());
23 	}
24 
execute()25 	void ActionSaveAll::execute()
26 	{
27 		sh::Factory::getInstance().saveAll();
28 	}
29 
execute()30 	void ActionChangeGlobalSetting::execute()
31 	{
32 		sh::Factory::getInstance().setGlobalSetting(mName, mNewValue);
33 	}
34 
execute()35 	void ActionCreateConfiguration::execute()
36 	{
37 		sh::Configuration newConfiguration;
38 		sh::Factory::getInstance().createConfiguration(mName);
39 	}
40 
execute()41 	void ActionDeleteConfiguration::execute()
42 	{
43 		sh::Factory::getInstance().destroyConfiguration(mName);
44 	}
45 
execute()46 	void ActionChangeConfiguration::execute()
47 	{
48 		sh::Configuration* c = sh::Factory::getInstance().getConfiguration(mName);
49 		c->setProperty(mKey, sh::makeProperty(new sh::StringValue(mValue)));
50 		sh::Factory::getInstance().notifyConfigurationChanged();
51 	}
52 
execute()53 	void ActionDeleteConfigurationProperty::execute()
54 	{
55 		sh::Configuration* c = sh::Factory::getInstance().getConfiguration(mName);
56 		c->deleteProperty(mKey);
57 		sh::Factory::getInstance().notifyConfigurationChanged();
58 	}
59 
execute()60 	void ActionSetMaterialProperty::execute()
61 	{
62 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
63 		m->setProperty(mKey, sh::makeProperty(mValue));
64 
65 		sh::Factory::getInstance().notifyConfigurationChanged();
66 	}
67 
execute()68 	void ActionDeleteMaterialProperty::execute()
69 	{
70 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
71 		m->deleteProperty(mKey);
72 
73 		sh::Factory::getInstance().notifyConfigurationChanged();
74 	}
75 
execute()76 	void ActionCreatePass::execute()
77 	{
78 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
79 		m->createPass();
80 
81 		sh::Factory::getInstance().notifyConfigurationChanged();
82 	}
83 
execute()84 	void ActionDeletePass::execute()
85 	{
86 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
87 		m->deletePass(mPassIndex);
88 
89 		sh::Factory::getInstance().notifyConfigurationChanged();
90 	}
91 
execute()92 	void ActionSetPassProperty::execute()
93 	{
94 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
95 		assert (m->getPasses()->size() > mPassIndex);
96 		m->getPasses()->at(mPassIndex).setProperty (mKey, sh::makeProperty(mValue));
97 
98 		sh::Factory::getInstance().notifyConfigurationChanged();
99 	}
100 
execute()101 	void ActionDeletePassProperty::execute()
102 	{
103 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
104 		assert (m->getPasses()->size() > mPassIndex);
105 		m->getPasses()->at(mPassIndex).deleteProperty(mKey);
106 
107 		sh::Factory::getInstance().notifyConfigurationChanged();
108 	}
109 
execute()110 	void ActionSetShaderProperty::execute()
111 	{
112 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
113 		assert (m->getPasses()->size() > mPassIndex);
114 		m->getPasses()->at(mPassIndex).mShaderProperties.setProperty (mKey, sh::makeProperty(mValue));
115 
116 		sh::Factory::getInstance().notifyConfigurationChanged();
117 	}
118 
execute()119 	void ActionDeleteShaderProperty::execute()
120 	{
121 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
122 		assert (m->getPasses()->size() > mPassIndex);
123 		m->getPasses()->at(mPassIndex).mShaderProperties.deleteProperty (mKey);
124 
125 		sh::Factory::getInstance().notifyConfigurationChanged();
126 	}
127 
execute()128 	void ActionSetTextureProperty::execute()
129 	{
130 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
131 		assert (m->getPasses()->size() > mPassIndex);
132 		assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex);
133 		m->getPasses()->at(mPassIndex).mTexUnits.at(mTextureIndex).setProperty(mKey, sh::makeProperty(mValue));
134 
135 		sh::Factory::getInstance().notifyConfigurationChanged();
136 	}
137 
execute()138 	void ActionDeleteTextureProperty::execute()
139 	{
140 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
141 		assert (m->getPasses()->size() > mPassIndex);
142 		assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex);
143 		m->getPasses()->at(mPassIndex).mTexUnits.at(mTextureIndex).deleteProperty(mKey);
144 
145 		sh::Factory::getInstance().notifyConfigurationChanged();
146 	}
147 
execute()148 	void ActionCreateTextureUnit::execute()
149 	{
150 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
151 		assert (m->getPasses()->size() > mPassIndex);
152 		m->getPasses()->at(mPassIndex).createTextureUnit(mTexUnitName);
153 
154 		sh::Factory::getInstance().notifyConfigurationChanged();
155 	}
156 
execute()157 	void ActionDeleteTextureUnit::execute()
158 	{
159 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
160 		assert (m->getPasses()->size() > mPassIndex);
161 		assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex);
162 
163 		m->getPasses()->at(mPassIndex).mTexUnits.erase(m->getPasses()->at(mPassIndex).mTexUnits.begin() + mTextureIndex);
164 
165 		sh::Factory::getInstance().notifyConfigurationChanged();
166 	}
167 
execute()168 	void ActionMoveTextureUnit::execute()
169 	{
170 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
171 		assert (m->getPasses()->size() > mPassIndex);
172 		assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex);
173 		if (!mMoveUp)
174 			assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex+1);
175 
176 		std::vector<MaterialInstanceTextureUnit> textures = m->getPasses()->at(mPassIndex).mTexUnits;
177 		if (mMoveUp)
178 			std::swap(textures[mTextureIndex-1], textures[mTextureIndex]);
179 		else
180 			std::swap(textures[mTextureIndex+1], textures[mTextureIndex]);
181 		m->getPasses()->at(mPassIndex).mTexUnits = textures;
182 
183 		sh::Factory::getInstance().notifyConfigurationChanged();
184 	}
185 
execute()186 	void ActionChangeTextureUnitName::execute()
187 	{
188 		sh::MaterialInstance* m = sh::Factory::getInstance().getMaterialInstance(mName);
189 		assert (m->getPasses()->size() > mPassIndex);
190 		assert (m->getPasses()->at(mPassIndex).mTexUnits.size() > mTextureIndex);
191 
192 		m->getPasses()->at(mPassIndex).mTexUnits[mTextureIndex].setName(mTexUnitName);
193 
194 		sh::Factory::getInstance().notifyConfigurationChanged();
195 	}
196 }
197