pperequestplatformsbase.c 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448
  1. class PPERequesterBase
  2. {
  3. protected bool m_IsRunning; //helps determine if the requester has been stopped or not
  4. protected bool m_ValuesSent;
  5. protected int m_IDX;
  6. protected bool m_Valid = false;
  7. protected ref map<int,ref map<int,ref PPERequestParamDataBase>> m_RequestDataStructure; // <material<param_id,data>> // parameter data objects are singletons
  8. void PPERequesterBase(int requester_IDX)
  9. {
  10. m_Valid = PPERequesterBank.VerifyRequester(this);
  11. m_IDX = requester_IDX;
  12. m_ValuesSent = true;
  13. m_IsRunning = false;
  14. m_RequestDataStructure = new map<int,ref map<int,ref PPERequestParamDataBase>>;
  15. }
  16. //! Has to be set for the requester to be handled
  17. void SetRequesterUpdating(bool state)
  18. {
  19. if (!m_Valid)
  20. {
  21. Debug.Log("" + this + " not valid!");
  22. return;
  23. }
  24. PPEManagerStatic.GetPPEManager().SetRequestUpdating(this,state);
  25. //TODO - separate into its own function?
  26. if (state)
  27. PPEManagerStatic.GetPPEManager().SetRequestActive(this,true);
  28. }
  29. void Start(Param par = null)
  30. {
  31. OnStart(par);
  32. m_IsRunning = true;
  33. }
  34. void Stop(Param par = null)
  35. {
  36. if (!m_RequestDataStructure || m_RequestDataStructure.Count() <= 0)
  37. return;
  38. OnStop(par);
  39. m_IsRunning = false;
  40. }
  41. bool IsRequesterRunning()
  42. {
  43. return m_IsRunning;
  44. }
  45. //! automatically assigned by PPERequesterBank
  46. void SetRequesterIDX(int idx)
  47. {
  48. m_IDX = idx;
  49. }
  50. //! Returns requester index
  51. int GetRequesterIDX()
  52. {
  53. return m_IDX;
  54. }
  55. //!mask for mass-handling methods like 'StopAllEffects'
  56. int GetCategoryMask()
  57. {
  58. return PPERequesterCategory.NONE;
  59. }
  60. //SETTERS//
  61. //vvvvvvv//
  62. protected void SetTargetValueBool(int mat_id, int param_idx, bool val, int priority_layer, int operator = PPOperators.SET)
  63. {
  64. if ( !m_RequestDataStructure )
  65. return;
  66. PPERequestParamDataBool data = PPERequestParamDataBool.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_BOOL));
  67. data.SetPriorityLayer(priority_layer);
  68. data.SetInteractionMask(operator);
  69. data.m_BoolTarget = val;
  70. data.m_BoolLast = data.m_BoolCurrent;
  71. if (data.m_BoolTarget != data.m_BoolCurrent || data.IsSettingDefaultValues())
  72. {
  73. data.SetSettingDefaultValues(false);
  74. data.SetDataActive(true);
  75. QueueValuesSend();
  76. }
  77. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueBool | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  78. }
  79. protected void SetTargetValueBoolDefault(int mat_id, int param_idx)
  80. {
  81. //TODO - running check and cleanup rework (elsewhere!)
  82. if ( !m_RequestDataStructure || !m_RequestDataStructure.Get(mat_id) || !m_RequestDataStructure.Get(mat_id).Get(param_idx))
  83. return;
  84. PPERequestParamDataBool data = PPERequestParamDataBool.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_BOOL));
  85. data.m_BoolLast = data.m_BoolCurrent;
  86. if (!data.IsSettingDefaultValues())
  87. {
  88. data.SetSettingDefaultValues(true);
  89. QueueValuesSend();
  90. }
  91. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueBoolDefault | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  92. }
  93. protected void SetTargetValueInt(int mat_id, int param_idx, bool relative, int val, int priority_layer, int operator = PPOperators.SET)
  94. {
  95. if ( !m_RequestDataStructure )
  96. return;
  97. PPERequestParamDataInt data = PPERequestParamDataInt.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_INT));
  98. data.SetPriorityLayer(priority_layer);
  99. data.SetInteractionMask(operator);
  100. data.m_IntTarget = val;
  101. data.m_IntLast = data.m_IntCurrent;
  102. if (data.m_IntTarget != data.m_IntCurrent || data.IsSettingDefaultValues())
  103. {
  104. data.SetSettingDefaultValues(false);
  105. data.SetDataActive(true);
  106. QueueValuesSend();
  107. }
  108. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueInt | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  109. }
  110. protected void SetTargetValueIntDefault(int mat_id, int param_idx)
  111. {
  112. //TODO - running check and cleanup rework (elsewhere!)
  113. if ( !m_RequestDataStructure || !m_RequestDataStructure.Get(mat_id) || !m_RequestDataStructure.Get(mat_id).Get(param_idx))
  114. return;
  115. PPERequestParamDataInt data = PPERequestParamDataInt.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_INT));
  116. data.m_IntLast = data.m_IntCurrent;
  117. if (!data.IsSettingDefaultValues())
  118. {
  119. data.SetSettingDefaultValues(true);
  120. QueueValuesSend();
  121. }
  122. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueIntDefault | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  123. }
  124. protected void SetTargetValueFloat(int mat_id, int param_idx, bool relative, float val, int priority_layer, int operator = PPOperators.ADD_RELATIVE)
  125. {
  126. if ( !m_RequestDataStructure )
  127. return;
  128. PPERequestParamDataFloat data = PPERequestParamDataFloat.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_FLOAT));
  129. data.SetPriorityLayer(priority_layer);
  130. data.SetInteractionMask(operator);
  131. data.m_FloatFormerTarget = data.m_FloatTarget;
  132. data.m_FloatTarget = RelativizeValue(val,PPEConstants.VAR_TYPE_FLOAT,mat_id,param_idx,relative);
  133. data.m_FloatLast = data.m_FloatCurrent;
  134. data.m_FloatStart = data.m_FloatCurrent;
  135. if (data.m_FloatTarget != data.m_FloatCurrent || data.IsSettingDefaultValues())
  136. {
  137. data.SetSettingDefaultValues(false);
  138. data.SetDataActive(true);
  139. QueueValuesSend();
  140. }
  141. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueFloat | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  142. }
  143. protected void SetTargetValueFloatDefault(int mat_id, int param_idx)
  144. {
  145. //TODO - running check and cleanup rework (elsewhere!)
  146. if ( !m_RequestDataStructure || !m_RequestDataStructure.Get(mat_id) || !m_RequestDataStructure.Get(mat_id).Get(param_idx))
  147. return;
  148. PPERequestParamDataFloat data = PPERequestParamDataFloat.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_FLOAT));
  149. data.m_FloatFormerTarget = data.m_FloatTarget;
  150. data.m_FloatLast = data.m_FloatCurrent;
  151. data.m_FloatStart = data.m_FloatCurrent;
  152. if (!data.IsSettingDefaultValues())
  153. {
  154. data.SetSettingDefaultValues(true);
  155. QueueValuesSend();
  156. }
  157. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueFloatDefault | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  158. }
  159. protected void SetTargetValueColor(int mat_id, int param_idx, array<float> val, int priority_layer, int operator = PPOperators.ADD_RELATIVE)
  160. {
  161. if ( !m_RequestDataStructure )
  162. return;
  163. PPERequestParamDataColor data = PPERequestParamDataColor.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_COLOR));
  164. data.SetPriorityLayer(priority_layer);
  165. data.SetInteractionMask(operator);
  166. data.m_ColorFormerTarget = data.m_ColorTarget;
  167. data.m_ColorTarget.Copy(val);
  168. data.m_ColorLast = data.m_ColorCurrent;
  169. data.m_ColorStart = data.m_ColorCurrent;
  170. //if (data.m_ColorTarget != data.m_ColorCurrent)
  171. {
  172. data.SetSettingDefaultValues(false);
  173. data.SetDataActive(true);
  174. QueueValuesSend();
  175. }
  176. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueColor | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  177. }
  178. protected void SetTargetValueColorDefault(int mat_id, int param_idx)
  179. {
  180. //TODO - running check and cleanup rework (elsewhere!)
  181. if ( !m_RequestDataStructure || !m_RequestDataStructure.Get(mat_id) || !m_RequestDataStructure.Get(mat_id).Get(param_idx))
  182. return;
  183. PPERequestParamDataColor data = PPERequestParamDataColor.Cast(GetRequestData(mat_id,param_idx,PPEConstants.VAR_TYPE_COLOR));
  184. data.m_ColorFormerTarget = data.m_ColorTarget;
  185. data.m_ColorLast = data.m_ColorCurrent;
  186. data.m_ColorStart = data.m_ColorCurrent;
  187. if (!data.IsSettingDefaultValues())
  188. {
  189. data.SetSettingDefaultValues(true);
  190. QueueValuesSend();
  191. }
  192. //DbgPrnt("PPEDebug | PPERequesterBase - SetTargetValueColorDefault | mat/par/req: " + mat_id + "/" + param_idx + "/" + m_IDX + " | data: " + data);
  193. }
  194. /*protected void SetTargetValueVector(int mat_id, int param_idx, bool relative, vector val, int priority_layer, int operator = PPOperators.ADD_RELATIVE)
  195. {
  196. }
  197. void SetTargetValueTexture(int mat_id, int param_idx, string val, int priority_layer, int mask, bool override_priority = false)
  198. {
  199. }*/
  200. /*void SetTargetValueResource(int mat_id, int param_idx, string val, int priority_layer, int mask, bool override_priority = false)
  201. {
  202. }*/
  203. //! Sets this requester to update in the manager
  204. protected void QueueValuesSend()
  205. {
  206. m_ValuesSent = false;
  207. //m_IsRunning = true;
  208. SetRequesterUpdating(true);
  209. }
  210. //! returns request data for specific parameter, or creates one if one does not exist in this request yet (singletons)
  211. PPERequestParamDataBase GetRequestData(int mat_id, int param_idx, int type)
  212. {
  213. PPERequestParamDataBase data;
  214. if ( m_RequestDataStructure.Get(mat_id) )
  215. {
  216. if (m_RequestDataStructure.Get(mat_id).Get(param_idx))
  217. {
  218. data = m_RequestDataStructure.Get(mat_id).Get(param_idx);
  219. }
  220. else
  221. {
  222. data = PrepareData(mat_id,param_idx,type);
  223. m_RequestDataStructure.Get(mat_id).Set(param_idx,data);
  224. }
  225. }
  226. else
  227. {
  228. data = PrepareData(mat_id,param_idx,type);
  229. map<int,ref PPERequestParamDataBase> temp_map = new map<int,ref PPERequestParamDataBase>;
  230. temp_map.Set(param_idx,data);
  231. m_RequestDataStructure.Set(mat_id, temp_map);
  232. }
  233. if (!data)
  234. {
  235. Error("GetRequestData | no data found in the structure");
  236. }
  237. data.m_Requester = this;
  238. return data;
  239. }
  240. protected PPERequestParamDataBase PrepareData(int mat_id, int param_idx, int type)
  241. {
  242. PPERequestParamDataBase data;
  243. switch (type)
  244. {
  245. case PPEConstants.VAR_TYPE_BOOL:
  246. data = new PPERequestParamDataBool(m_IDX, mat_id, param_idx);
  247. break;
  248. case PPEConstants.VAR_TYPE_INT:
  249. data = new PPERequestParamDataInt(m_IDX, mat_id, param_idx);
  250. break;
  251. case PPEConstants.VAR_TYPE_FLOAT:
  252. data = new PPERequestParamDataFloat(m_IDX, mat_id, param_idx);
  253. break;
  254. case PPEConstants.VAR_TYPE_COLOR:
  255. data = new PPERequestParamDataColor(m_IDX, mat_id, param_idx);
  256. break;
  257. }
  258. return data;
  259. }
  260. // unused?
  261. map<int,ref map<int,ref PPERequestParamDataBase>> GetActiveRequestStructure()
  262. {
  263. return m_RequestDataStructure;
  264. }
  265. protected void ClearRequesterData()
  266. {
  267. m_RequestDataStructure.Clear();
  268. }
  269. protected void SendCurrentValueData(PPERequestParamDataBase data)
  270. {
  271. PPEManagerStatic.GetPPEManager().SendMaterialValueData(data);
  272. }
  273. //EVENTS//
  274. //vvvvvv//
  275. void OnUpdate(float delta)
  276. {
  277. //DbgPrnt("PPEDebug | PPERequesterBase | OnUpdate");
  278. if ( !m_ValuesSent )
  279. {
  280. for (int i = 0; i < m_RequestDataStructure.Count(); i++)
  281. {
  282. for (int j = 0; j < m_RequestDataStructure.GetElement(i).Count(); j++)
  283. {
  284. SendCurrentValueData(m_RequestDataStructure.GetElement(i).GetElement(j)); //map<int,ref map<int,PPERequestParamDataBase>> //<material<param,data>>
  285. }
  286. }
  287. m_ValuesSent = true;
  288. }
  289. SetRequesterUpdating(false);
  290. }
  291. protected void OnStart(Param par = null)
  292. {
  293. SetRequesterUpdating(true);
  294. }
  295. //! automatically resets all material parameters of this requester to defaults
  296. protected void OnStop(Param par = null)
  297. {
  298. //DbgPrnt("PPEDebug | " + this + " | OnStop");
  299. SetRequesterUpdating(true);
  300. SetDefaultValuesAll();
  301. }
  302. //! converts all values used to relative values (if not relative already)
  303. protected float RelativizeValue(float value, int var_type, int mat_id, int param_id, bool relative)
  304. {
  305. float ret = value;
  306. if (!relative) //if not already relative...
  307. {
  308. switch (var_type)
  309. {
  310. case PPEConstants.VAR_TYPE_FLOAT:
  311. PPETemplateDefFloat p_float = PPETemplateDefFloat.Cast(PPEManagerStatic.GetPPEManager().GetPostProcessDefaultValues(mat_id,param_id));
  312. ret = Math.InverseLerp(p_float.param3, p_float.param4, ret);
  313. ret = Math.Clamp(ret,0.0,1.0);
  314. break;
  315. }
  316. }
  317. //Print("RelativizeValue: " + ret);
  318. return ret;
  319. }
  320. //! Sets all requested values to default, ignoring them in further calculations.
  321. protected void SetDefaultValuesAll()
  322. {
  323. //<material<param_id,data>>
  324. PPERequestParamDataBase req_data;
  325. for (int i = 0; i < m_RequestDataStructure.Count(); i++)
  326. {
  327. for (int j = 0; j < m_RequestDataStructure.GetElement(i).Count(); j++)
  328. {
  329. req_data = m_RequestDataStructure.GetElement(i).GetElement(j);
  330. if (!req_data.IsDataActive())
  331. continue;
  332. switch (req_data.GetVarType())
  333. {
  334. case PPEConstants.VAR_TYPE_BOOL:
  335. SetTargetValueBoolDefault(req_data.GetMaterialID(),req_data.GetParameterID());
  336. break;
  337. case PPEConstants.VAR_TYPE_INT:
  338. SetTargetValueIntDefault(req_data.GetMaterialID(),req_data.GetParameterID());
  339. break;
  340. case PPEConstants.VAR_TYPE_FLOAT:
  341. SetTargetValueFloatDefault(req_data.GetMaterialID(),req_data.GetParameterID());
  342. break;
  343. case PPEConstants.VAR_TYPE_COLOR:
  344. SetTargetValueColorDefault(req_data.GetMaterialID(),req_data.GetParameterID());
  345. break;
  346. }
  347. }
  348. }
  349. }
  350. void DbgPrnt(string text)
  351. {
  352. //Debug.Log(""+text);
  353. }
  354. }
  355. //////////////////////////////////////////////////////////////////////////////////////
  356. // Base requester platforms //
  357. //////////////////////////////////////////////////////////////////////////////////////
  358. class PPERequester_GameplayBase extends PPERequesterBase
  359. {
  360. override int GetCategoryMask()
  361. {
  362. return PPERequesterCategory.GAMEPLAY_EFFECTS;
  363. }
  364. }
  365. class PPERequester_MenuBase extends PPERequesterBase
  366. {
  367. override int GetCategoryMask()
  368. {
  369. return PPERequesterCategory.MENU_EFFECTS;
  370. }
  371. }