HolonElementSketch.java 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package holeg.addon.helper;
  2. import holeg.model.Constrain;
  3. import holeg.model.Flexibility;
  4. import holeg.model.HolonElement;
  5. import holeg.model.HolonElement.Priority;
  6. import holeg.model.HolonObject;
  7. import holeg.utility.math.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) {
  25. addFlex(ele, parentObject.getName(), true);
  26. }
  27. if (offFlex != null && Random.nextDouble() < offFlex.flexChance) {
  28. addFlex(ele, parentObject.getName(), false);
  29. }
  30. ele.setPriority(Priority.valueOf(priority));
  31. return ele;
  32. }
  33. public void checkValues() {
  34. minAmount = Math.abs(minAmount);
  35. maxAmount = Math.abs(maxAmount);
  36. if (maxAmount < minAmount) {
  37. //Swap
  38. int intermediate = minAmount;
  39. minAmount = maxAmount;
  40. maxAmount = intermediate;
  41. }
  42. if (onFlex != null) {
  43. onFlex.checkValues();
  44. }
  45. if (offFlex != null) {
  46. offFlex.checkValues();
  47. }
  48. }
  49. public void addFlex(HolonElement ele, String nameOfHolonObject, boolean onConstrain) {
  50. Flexibility toCreateFlex = new Flexibility(ele);
  51. FlexibilitySketch constrain = onConstrain ? onFlex : offFlex;
  52. toCreateFlex.name =
  53. nameOfHolonObject + "_" + ele.getName() + (onConstrain ? "_OnFlex" : "_OffFlex");
  54. toCreateFlex.speed = 0;
  55. toCreateFlex.setDuration(
  56. Random.nextIntegerInRange(constrain.minDuration, constrain.maxDuration + 1));
  57. toCreateFlex.cost = Random.nextFloatInRange(constrain.minCost, constrain.maxCost);
  58. toCreateFlex.setCooldown(
  59. Random.nextIntegerInRange(constrain.minCooldown, constrain.maxCooldown + 1));
  60. toCreateFlex.offered = true;
  61. if (onConstrain) {
  62. toCreateFlex.constrainList.add(Constrain.createOnConstrain());
  63. } else {
  64. toCreateFlex.constrainList.add(Constrain.createOffConstrain());
  65. }
  66. ele.flexList.add(toCreateFlex);
  67. }
  68. }