dataManager.cpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414
  1. #include "dataManager.h"
  2. #include <iostream>
  3. #include <QFile>
  4. #include <QJsonDocument>
  5. DataManager* DataManager::getInstance()
  6. {
  7. static DataManager dataManager;
  8. return &dataManager;
  9. }
  10. DataManager::DataManager()
  11. {
  12. jsonTemp = new ReadJsonSrc(":/file/file/template.json");
  13. loadData();
  14. }
  15. DataManager::~DataManager()
  16. {
  17. delete jsonTemp;
  18. saveData();
  19. }
  20. //模板配置
  21. QVector<ReadJsonSrc::Fields> DataManager::getTempFields(QString key, QString name)
  22. {
  23. QVector<ReadJsonSrc::Fields> nullVec;
  24. int index = jsonTemp->getTemplateIndex(key,name);
  25. if(index == -1) return nullVec;
  26. return jsonTemp->templateMap[key][index].fields;
  27. }
  28. void DataManager::updateTempData()
  29. {
  30. ReadJsonSrc* tmp = jsonTemp;
  31. jsonTemp = new ReadJsonSrc(":/file/file/template.json");
  32. delete tmp;
  33. }
  34. QStringList DataManager::getList(QString elem,ListType listType)
  35. {
  36. QStringList list;
  37. if(listType == ListType::Anim){
  38. for(const auto &i:elements[elem]->statusEffect) list.push_back(i.name);
  39. }
  40. else if(listType == ListType::CollAnim){
  41. for(const auto &i:elements[elem]->collAnim) list.push_back(i.name);
  42. }
  43. else if(listType == ListType::Pool){
  44. for(const auto &i:elements[elem]->container) list.push_back(i.poolName);
  45. }
  46. else if(listType == ListType::AnimType){
  47. for(const auto &i:jsonTemp->templateMap["collAnimTemp"]) list.push_back(i.name);
  48. }
  49. else if(listType == ListType::StatusVal){
  50. for(const auto &i:elements[elem]->statusConfig) list.push_back(i.statusValue);
  51. }
  52. else if(listType == ListType::Events){
  53. for(const auto &i:jsonTemp->templateMap["eventTemp"]) list.push_back(i.name);
  54. }
  55. else if(listType == ListType::Actions){
  56. for(const auto &i:jsonTemp->templateMap["actionTemp"]) list.push_back(i.name);
  57. }
  58. else if(listType == ListType::PoolType){
  59. for(const auto &i:jsonTemp->templateMap["poolTemp"]) list.push_back(i.name);
  60. }
  61. else if(listType == ListType::Elem) return elements.keys();
  62. return list;
  63. }
  64. //元素及其基础属性
  65. bool DataManager::existElem(QString elemName)
  66. {
  67. return elements.contains(elemName);
  68. }
  69. void DataManager::addElem(QString elemName)
  70. {
  71. elements[elemName] = new ElemPropertyData();
  72. }
  73. void DataManager::delElem(QString elemName)
  74. {
  75. delete elements[elemName];
  76. elements.remove(elemName);
  77. }
  78. void DataManager::changeElemName(QString oriName, QString newName)
  79. {
  80. ElemPropertyData* tmp = elements[oriName];
  81. elements.remove(oriName);
  82. elements[newName] = tmp;
  83. }
  84. void DataManager::changeMarkValue(QString elem, QString val)
  85. {
  86. elements[elem]->labelName = val;
  87. }
  88. void DataManager::changeSize(QString elem, QString val)
  89. {
  90. elements[elem]->size = val;
  91. }
  92. void DataManager::changeMaxLayer(QString elem, QString val)
  93. {
  94. elements[elem]->maxLayer = val;
  95. }
  96. void DataManager::changeScore(QString elem, QString val)
  97. {
  98. elements[elem]->score = val;
  99. }
  100. void DataManager::changeDropConfig(QString elem, int val)
  101. {
  102. elements[elem]->dropConfig = val;
  103. }
  104. void DataManager::changeIconPath(QString elem, QString iconPath)
  105. {
  106. elements[elem]->iconPath = iconPath;
  107. }
  108. QString DataManager::getMarkValue(QString elem)
  109. {
  110. return elements[elem]->labelName;
  111. }
  112. QString DataManager::getSize(QString elem)
  113. {
  114. return elements[elem]->size;
  115. }
  116. QString DataManager::getMaxLayer(QString elem)
  117. {
  118. return elements[elem]->maxLayer;
  119. }
  120. QString DataManager::getScore(QString elem)
  121. {
  122. return elements[elem]->score;
  123. }
  124. int DataManager::getDropConfig(QString elem)
  125. {
  126. return elements[elem]->dropConfig;
  127. }
  128. QString DataManager::getIconPath(QString elem)
  129. {
  130. return elements[elem]->iconPath;
  131. }
  132. //状态与效果动画
  133. QVector<ElemPropertyData::StatusEffect> DataManager::getAnimVec(QString elem)
  134. {
  135. return elements[elem]->statusEffect;
  136. }
  137. QStringList DataManager::getTimelineList(QString elem,QString filePath)
  138. {
  139. return elements[elem]->getTimelineList(filePath);
  140. }
  141. bool DataManager::existAnim(QString elem,QString animName)
  142. {
  143. if(elements[elem]->getAnimIndex(animName) == -1) return false;
  144. return true;
  145. }
  146. void DataManager::addAnim(QString elem, QString animName)
  147. {
  148. elements[elem]->statusEffect.push_back(ElemPropertyData::StatusEffect(animName));
  149. }
  150. void DataManager::delAnim(QString elem,int index)
  151. {
  152. elements[elem]->statusEffect.remove(index);
  153. }
  154. void DataManager::changeAnimTable(QString elem, QString newData, int row, int column)
  155. {
  156. if(column == 0) elements[elem]->statusEffect[row].name = newData;
  157. else if(column == 1) elements[elem]->statusEffect[row].res = newData;
  158. else if (column == 2) elements[elem]->statusEffect[row].timeline = newData;
  159. else if (column == 3) elements[elem]->statusEffect[row].zOrder = newData;
  160. }
  161. //收集动画
  162. QString DataManager::getAnimType(QString elem, int index)
  163. {
  164. return elements[elem]->collAnim[index].type;
  165. }
  166. void DataManager::setAnimType(QString elem, QString newType, int index)
  167. {
  168. elements[elem]->collAnim[index].type = newType;
  169. elements[elem]->collAnim[index].dataMap.clear();
  170. }
  171. QMap<QString,QString> DataManager::getCollAnimDataMap(QString elem, int index)
  172. {
  173. return elements[elem]->collAnim[index].dataMap;
  174. }
  175. void DataManager::setCollAnimDataMapVal(QString elem, int index, QString key, QString val)
  176. {
  177. elements[elem]->collAnim[index].dataMap[key] = val;
  178. }
  179. bool DataManager::existCollAnim(QString elem, QString collAnimName)
  180. {
  181. if(elements[elem]->getCollAnimIndex(collAnimName) == -1) return false;
  182. return true;
  183. }
  184. void DataManager::addCollAnim(QString elem,QString collAnimName)
  185. {
  186. ElemPropertyData::CollAnim collAnim(collAnimName);
  187. elements[elem]->collAnim.push_back(collAnim);
  188. }
  189. void DataManager::delCollAnim(QString elem,int index)
  190. {
  191. elements[elem]->collAnim.remove(index);
  192. }
  193. void DataManager::changeCollAnimName(QString elem,int index,QString newName)
  194. {
  195. elements[elem]->collAnim[index].name = newName;
  196. }
  197. //状态配置
  198. ElemPropertyData::StatusConfig DataManager::getStatusConfigData(QString elem,int index)
  199. {
  200. return elements[elem]->statusConfig[index];
  201. }
  202. void DataManager::changeEventTable(QString elem,QString newData,int statusIndex,int row,int column)
  203. {
  204. QVector<ElemPropertyData::EventConfig> &eventTable = elements[elem]->statusConfig[statusIndex].eventConfig;
  205. if(column == 0) eventTable[row].name = newData;
  206. else if(column == 2) eventTable[row].changeMagnitude = newData.toInt();
  207. else if(column == 3) eventTable[row].specialEffect = newData;
  208. else if(column == 5) eventTable[row].triggerAction = newData;
  209. }
  210. void DataManager::changeActionConfigData(QString elem, int statusIndex, int row, QMap<QString, QString> data)
  211. {
  212. elements[elem]->statusConfig[statusIndex].eventConfig[row].actionConfig = data;
  213. }
  214. void DataManager::setEventTableCheckBox(QString elem, int statusIndex, int row, int column, int state)
  215. {
  216. QVector<ElemPropertyData::EventConfig> &eventTable = elements[elem]->statusConfig[statusIndex].eventConfig;
  217. if(column == 1) eventTable[row].consisColor = state;
  218. else if(column == 4) eventTable[row].elimATLattices = state;
  219. }
  220. void DataManager::setFundCheckBox(QString elem, int statusIndex, CheckType checkType, int state)
  221. {
  222. if(checkType == CheckType::Dropable) elements[elem]->statusConfig[statusIndex].dropable = state;
  223. else if(checkType == CheckType::MultiHit) elements[elem]->statusConfig[statusIndex].multiHit = state;
  224. else if(checkType == CheckType::NeedColl) elements[elem]->statusConfig[statusIndex].needCollect = state;
  225. }
  226. bool DataManager::existStatusVal(QString elem, QString statusVal)
  227. {
  228. if(elements[elem]->getStatusValIndex(statusVal) == -1) return false;
  229. return true;
  230. }
  231. void DataManager::addStatus(QString elem, QString statusVal)
  232. {
  233. ElemPropertyData::StatusConfig status(statusVal);
  234. elements[elem]->statusConfig.push_back(status);
  235. }
  236. //TODO: 删除状态值时出现数组越界
  237. void DataManager::delStatus(QString elem, int index)
  238. {
  239. std::cout<<"current index:"<<index<<std::endl;
  240. std::cout<<"statusConfig size:"<<elements[elem]->statusConfig.size()<<std::endl;
  241. std::cout<<qPrintable(elements[elem]->statusConfig[index].statusValue)<<std::endl;
  242. elements[elem]->statusConfig.remove(index);
  243. }
  244. void DataManager::changeStatusVal(QString elem, int index, QString newVal)
  245. {
  246. elements[elem]->statusConfig[index].statusValue = newVal;
  247. }
  248. void DataManager::changeStatusFundVal(QString elem, StatusDataType type, QString newData,int index)
  249. {
  250. if(type == StatusDataType::ClickAnim) elements[elem]->statusConfig[index].clickAnim = newData;
  251. else if(type == StatusDataType::InitAnim) elements[elem]->statusConfig[index].initAnim = newData;
  252. else if(type == StatusDataType::CollAnim) elements[elem]->statusConfig[index].collAnim = newData;
  253. else if(type == StatusDataType::CollTar) elements[elem]->statusConfig[index].collTargetType = newData;
  254. }
  255. void DataManager::addEvent(QString elem, int index)
  256. {
  257. ElemPropertyData::EventConfig event;
  258. elements[elem]->statusConfig[index].eventConfig.push_back(event);
  259. }
  260. void DataManager::delEvent(QString elem, int statusIndex, int row)
  261. {
  262. elements[elem]->statusConfig[statusIndex].eventConfig.remove(row);
  263. }
  264. //容器池
  265. ElemPropertyData::ContainerConfig DataManager::getContainData(QString elem,int index)
  266. {
  267. return elements[elem]->container[index];
  268. }
  269. void DataManager::changeContainTable(QString elem, int index, int row, int column, QString data)
  270. {
  271. QVector<ElemPropertyData::ContainTable> &table = elements[elem]->container[index].table;
  272. if(column == 0) table[row].key = data;
  273. else if(column == 1) table[row].res = data;
  274. else if(column == 2) table[row].initTimeline = data;
  275. else if(column == 3) table[row].clickTimeline = data;
  276. else if(column == 4) table[row].effectTimeline = data;
  277. else if(column == 5) table[row].vanishTimeline = data;
  278. else if(column == 6) table[row].zOrder = data;
  279. }
  280. bool DataManager::existPool(QString elem, QString poolName)
  281. {
  282. if(elements[elem]->getPoolIndex(poolName) == -1) return false;
  283. return true;
  284. }
  285. void DataManager::addPool(QString elem, QString poolName)
  286. {
  287. ElemPropertyData::ContainerConfig pool(poolName);
  288. elements[elem]->container.push_back(pool);
  289. }
  290. void DataManager::delPool(QString elem, int index)
  291. {
  292. elements[elem]->container.remove(index);
  293. }
  294. void DataManager::changePoolName(QString elem, int index, QString newName)
  295. {
  296. elements[elem]->container[index].poolName = newName;
  297. }
  298. bool DataManager::existKey(QString elem,int poolIndex,QString key)
  299. {
  300. if(elements[elem]->getKeyIndex(poolIndex,key) == -1) return false;
  301. return true;
  302. }
  303. void DataManager::addKey(QString elem, int poolIndex,QString keyName)
  304. {
  305. ElemPropertyData::ContainTable key(keyName);
  306. elements[elem]->container[poolIndex].table.push_back(key);
  307. }
  308. void DataManager::delKey(QString elem, int poolIndex, int row)
  309. {
  310. elements[elem]->container[poolIndex].table.remove(row);
  311. }
  312. void DataManager::changeContainType(QString elem, int poolIndex, QString poolType)
  313. {
  314. elements[elem]->container[poolIndex].type = poolType;
  315. }
  316. //子元素
  317. QVector<ElemPropertyData::ChildElem> DataManager::getChildElemTable(QString elem)
  318. {
  319. return elements[elem]->childElem;
  320. }
  321. void DataManager::changeChildElemTable(QString elem, int row, int column, QString data)
  322. {
  323. QVector<ElemPropertyData::ChildElem> &table = elements[elem]->childElem;
  324. if(column == 0) table[row].name = data;
  325. else if(column == 1) table[row].container = data;
  326. }
  327. bool DataManager::existChildElem(QString elem, QString childElemName)
  328. {
  329. if(elements[elem]->getChildElemIndex(childElemName) == -1) return false;
  330. return true;
  331. }
  332. void DataManager::addChildElem(QString elem, QString childElemName)
  333. {
  334. ElemPropertyData::ChildElem childElem(childElemName);
  335. elements[elem]->childElem.push_back(childElem);
  336. }
  337. void DataManager::delChildElem(QString elem, int index)
  338. {
  339. elements[elem]->childElem.remove(index);
  340. }
  341. //数据保存
  342. ///加载数据
  343. bool DataManager::loadData()
  344. {
  345. QFile loadFile("data.json");
  346. if(!loadFile.open(QIODevice::ReadOnly)){
  347. qWarning("can't open data file!");
  348. return false;
  349. }
  350. QJsonDocument loadDoc(QJsonDocument::fromJson(loadFile.readAll()));
  351. read(loadDoc.object());
  352. return true;
  353. }
  354. ///读数据
  355. void DataManager::read(const QJsonObject &json)
  356. {
  357. elements.clear();
  358. QStringList keys = json.keys();
  359. for(int i=0;i<keys.size();i++)
  360. {
  361. QString elem = keys[i];
  362. elements[elem] = new ElemPropertyData();
  363. elements[elem]->readFundData(json[elem].toObject());
  364. }
  365. }
  366. ///写数据
  367. void DataManager::write(QJsonObject &json) const
  368. {
  369. QStringList keys = elements.keys();
  370. for(int i=0;i<keys.size();i++)
  371. {
  372. QString elem = keys[i];
  373. QJsonObject obj;
  374. elements[elem]->writeFundData(obj);
  375. json.insert(elem,obj);
  376. }
  377. }
  378. ///保存数据
  379. bool DataManager::saveData()
  380. {
  381. QFile saveFile("data.json");
  382. if(!saveFile.open(QIODevice::WriteOnly)){
  383. qWarning("can't open data file!");
  384. return false;
  385. }
  386. QJsonObject dataObj;
  387. write(dataObj);
  388. saveFile.write(QJsonDocument(dataObj).toJson());
  389. return true;
  390. }