ppematclassparameterbool.c 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. class PPEMatClassParameterBool extends PPEMatClassParameterCommandData
  2. {
  3. protected ref map<int,ref array<bool,int>> m_LayerInfo; //<priority,<value,operator>>
  4. protected PPETemplateDefBool m_Bool;
  5. protected bool m_ValueDefault;
  6. void PPEMatClassParameterBool(int mat_idx, int parameter_idx, PPEClassBase parent)
  7. {
  8. m_LayerInfo = new map<int,ref array<bool,int>>;
  9. }
  10. override void InitDefaults()
  11. {
  12. Class.CastTo(m_Bool,m_Defaults);
  13. m_ValueDefault = m_Bool.param2;
  14. }
  15. override void InitCuttent()
  16. {
  17. m_CurrentValues = new Param1<bool>(m_ValueDefault);
  18. }
  19. override int GetParameterVarType()
  20. {
  21. return PPEConstants.VAR_TYPE_BOOL;
  22. }
  23. override void Update(float timeslice, out Param p_total, out bool setting_defaults, int order)
  24. {
  25. super.Update(timeslice,p_total,setting_defaults,order);
  26. int active_request_count = 0;
  27. PPERequestParamDataBool req_data;
  28. bool setting_value_zero = false;
  29. bool bool_value_temp = false;
  30. bool bool_value_total = m_ValueDefault;
  31. if (p_total == null)
  32. {
  33. p_total = new Param1<bool>(false);
  34. }
  35. if (m_RequestMap.Count() > 0)
  36. {
  37. m_LayerInfo.Clear();
  38. }
  39. else
  40. {
  41. //DbgPrnt("m_RequestMap.Count() is zero! Using default values. | mat/par: " + m_MaterialIndex + "/" + m_ParameterIndex);
  42. SetParameterValueDefault(p_total);
  43. m_Parent.ParamUpdateRemove(m_ParameterIndex);
  44. return;
  45. }
  46. for ( int i = 0; i < m_RequestMap.Count(); i++ )
  47. {
  48. req_data = PPERequestParamDataBool.Cast(m_RequestMap.GetElement(i));
  49. if (req_data == null)
  50. {
  51. Error("PPEMatClassParameterBool | req_data not found! | " + this + " | mat/par: " + m_MaterialIndex + "/" + m_ParameterIndex);
  52. continue;
  53. }
  54. setting_value_zero = req_data.IsSettingDefaultValues();
  55. if (setting_value_zero && !req_data.GetUpdatingDataValues() && !req_data.IsDataActive())
  56. {
  57. //DbgPrnt("Is Default, not updating | idx: " + i + " | mat/par/req: " + m_MaterialIndex + "/" + m_ParameterIndex + "/" + req_data.GetRequesterIDX());
  58. continue;
  59. }
  60. if (setting_value_zero)
  61. {
  62. req_data.m_BoolTarget = false;
  63. //DbgPrnt("PPEDebug | PPEMatClassParameterBool - UpdateParameterValues | !data.m_DefaultTargetSet | mat/par/req: " + m_MaterialIndex + "/" + m_ParameterIndex + "/" + req_data.GetRequesterIDX() + " | req_data.m_BoolTarget: " + req_data.m_BoolTarget);
  64. }
  65. else
  66. {
  67. active_request_count++;
  68. }
  69. //evaluation
  70. //--------------------------------
  71. req_data.m_BoolLast = req_data.m_BoolCurrent;
  72. if (!req_data.GetUpdatingDataValues() && req_data.IsDataActive()) //set to exact value, not updating anymore
  73. {
  74. bool_value_temp = req_data.m_BoolCurrent;
  75. PrepareLayerInfo(req_data.GetPriorityLayer(),bool_value_temp,req_data.GetInteractionMask());
  76. //DbgPrnt("PPEDebug | PPEMatClassParameterBool - UpdateParameterValues | !req_data.m_UpdatingData | mat/par/req: " + m_MaterialIndex + "/" + m_ParameterIndex + "/" + req_data.GetRequesterIDX() + " | not updating, addaing current value into mix: " + bool_value_temp);
  77. continue;
  78. }
  79. bool_value_temp = req_data.m_BoolTarget;
  80. //DbgPrnt("PPEDebug | PPEMatClassParameterBool - UpdateParameterValues | mat/par/req: " + m_MaterialIndex + "/" + m_ParameterIndex + "/" + req_data.GetRequesterIDX());
  81. req_data.SetUpdatingDataValues(false);
  82. if (setting_value_zero)
  83. {
  84. req_data.SetDataActive(false);
  85. //RemovePriorityInfo(req_data.GetPriorityLayer()); //redundant?
  86. }
  87. else
  88. {
  89. bool_value_temp = req_data.m_BoolTarget;
  90. PrepareLayerInfo(req_data.GetPriorityLayer(),bool_value_temp,req_data.GetInteractionMask());
  91. }
  92. req_data.m_BoolCurrent = bool_value_temp;
  93. }
  94. if (active_request_count == 0)
  95. {
  96. SetParameterValueDefault(p_total);
  97. }
  98. else
  99. {
  100. //---------------------------
  101. //MASK handling and calculation
  102. bool value;
  103. int operator;
  104. bool override_active = false;
  105. for ( i = 0; i < m_LayerInfo.Count(); i++ )
  106. {
  107. if ( override_active )
  108. break;
  109. value = m_LayerInfo.Get(m_CommandLayersArray.Get(i)).Get(LAYER_INFO_VALUE);
  110. operator = m_LayerInfo.Get(m_CommandLayersArray.Get(i)).Get(LAYER_INFO_OPERATOR);
  111. switch (operator)
  112. {
  113. case PPOperators.LOWEST:
  114. bool_value_total = Math.Min(bool_value_total,value);
  115. break;
  116. case PPOperators.HIGHEST:
  117. bool_value_total = Math.Max(bool_value_total,value);
  118. break;
  119. case PPOperators.OVERRIDE:
  120. bool_value_total = value;
  121. break;
  122. case PPOperators.SET:
  123. bool_value_total = value;
  124. break;
  125. default:
  126. Error("PPEMatClassParameterBool | Invalid operator " + operator + " in mat/par: " + m_MaterialIndex + "/" + m_ParameterIndex);
  127. break;
  128. }
  129. if ( operator == PPOperators.OVERRIDE )
  130. {
  131. //DbgPrnt("m_LayerInfo | PPOperators.OVERRIDE at: " + i);
  132. override_active = true;
  133. }
  134. }
  135. m_CommandLayersArray.Clear();
  136. Param1<bool>.Cast(p_total).param1 = bool_value_total;
  137. }
  138. //DbgPrnt("PPEDebug | PPEMatClassParameterBool - UpdateParameterValues | mat/par/req: " + m_MaterialIndex + "/" + m_ParameterIndex + "/" + req_data.GetRequesterIDX() + " | parameter update end, removing from queue");
  139. m_Parent.ParamUpdateRemove(m_ParameterIndex);
  140. m_CurrentValues = p_total;
  141. }
  142. void PrepareLayerInfo(int layer, bool value, int operator)
  143. {
  144. m_LayerInfo.Set(layer,{value,operator});
  145. AddPriorityInfo(layer);
  146. }
  147. //! No active requests for the mat. parameter value change, sets the value to DEFAULT
  148. override void SetParameterValueDefault(inout Param p_total)
  149. {
  150. p_total = new Param1<bool>(PPETemplateDefBool.Cast(m_Defaults).param2);
  151. m_CurrentValues = p_total;
  152. //DbgPrnt("PPEDebug | PPEMatClassParameterBool - UpdateParameterValues | exit 3 - zero value");
  153. }
  154. }