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