HolonElementSketch.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package addon.helper;
  2. import model.Constrain;
  3. import model.Flexibility;
  4. import model.HolonElement;
  5. import model.HolonObject;
  6. import model.HolonElement.Priority;
  7. import utility.Random;
  8. public class HolonElementSketch {
  9. //HolonElement
  10. public String name;
  11. public int minAmount;
  12. public int maxAmount;
  13. public float energy;
  14. public String priority;
  15. public FlexibilitySketch onFlex;
  16. public FlexibilitySketch offFlex;
  17. public HolonElementSketch(String name, float energy) {
  18. this.name = name;
  19. this.energy = energy;
  20. }
  21. public HolonElement createHolonElement(HolonObject parentObject, boolean active) {
  22. HolonElement ele = new HolonElement(parentObject, name, energy);
  23. ele.active = active;
  24. if(onFlex != null && Random.nextDouble() < onFlex.flexChance)addFlex(ele, parentObject.getName(), true);
  25. if(offFlex != null && Random.nextDouble() < offFlex.flexChance)addFlex(ele, parentObject.getName(), false);
  26. ele.setPriority(Priority.valueOf(priority));
  27. return ele;
  28. }
  29. public void checkValues() {
  30. minAmount = Math.abs(minAmount);
  31. maxAmount = Math.abs(maxAmount);
  32. if(maxAmount < minAmount) {
  33. //Swap
  34. int intermediate = minAmount;
  35. minAmount = maxAmount;
  36. maxAmount = intermediate;
  37. }
  38. if(onFlex != null) {
  39. onFlex.checkValues();
  40. }
  41. if(offFlex != null) {
  42. onFlex.checkValues();
  43. }
  44. }
  45. public void addFlex(HolonElement ele, String nameOfHolonObject,boolean onConstrain) {
  46. Flexibility toCreateFlex = new Flexibility(ele);
  47. FlexibilitySketch constrain = onConstrain?onFlex:offFlex;
  48. toCreateFlex.name = nameOfHolonObject + "_" + ele.getName() + (onConstrain?"_OnFlex":"_OffFlex");
  49. toCreateFlex.speed = 0;
  50. toCreateFlex.setDuration(Random.nextIntegerInRange(constrain.minDuration, constrain.maxDuration+1));
  51. toCreateFlex.cost = Random.nextFloatInRange(constrain.minCost, constrain.maxCost);
  52. toCreateFlex.setCooldown(Random.nextIntegerInRange(constrain.minCooldown, constrain.maxCooldown+1));
  53. toCreateFlex.offered=true;
  54. if(onConstrain) {
  55. toCreateFlex.constrainList.add(Constrain.createOnConstrain());
  56. }else {
  57. toCreateFlex.constrainList.add(Constrain.createOffConstrain());
  58. }
  59. ele.flexList.add(toCreateFlex);
  60. }
  61. }