CELL.gd 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. extends Object
  2. class_name Cell
  3. var iii = 0
  4. var jjj = 0
  5. var neighbors = []
  6. var type = null
  7. var individuum = null
  8. var field_vector = []
  9. var future_field_vector = []
  10. var room = null
  11. func _init():
  12. for i in CellType.SIGNAL_COUNT:
  13. field_vector.append(0.0)
  14. func calculate_field():
  15. future_field_vector = Array() #creating _new_ object
  16. #print("calculating at", Vector2(iii,jjj))
  17. for i in range(CellType.SIGNAL_COUNT):
  18. future_field_vector.append(0)
  19. for n in neighbors:
  20. for s in range(CellType.SIGNAL_COUNT):
  21. future_field_vector[s] += n.field_vector[s]
  22. #print("external sum is", future_field_vector)
  23. future_field_vector = type.mix(future_field_vector)
  24. #print ("after mixing", future_field_vector)
  25. #
  26. # for n in neighbors:
  27. # var field = type.mix(n.field_vector)
  28. # for s in range(CellType.SIGNAL_COUNT):
  29. # future_field_vector[s] += field[s]
  30. for s in range(CellType.SIGNAL_COUNT):
  31. future_field_vector[s] += type.own_production[s]
  32. future_field_vector[s] = clamp(future_field_vector[s], -type.FIELD_CAP, type.FIELD_CAP)
  33. #print ("after production and clamping")
  34. #print ("calculate: returning \n", future_field_vector)
  35. func apply_field():
  36. field_vector.clear()
  37. field_vector = future_field_vector # passing by reference (ffv is created anew all the time)
  38. func proliferate(): #returns true if proliferation occurs
  39. for i in range(CellType.types.size()):
  40. var proliferating = true
  41. for s in range(CellType.SIGNAL_COUNT):
  42. var value = field_vector[s]
  43. if not (value >= type.proliferations[i].min_ranges[s]
  44. and value <= type.proliferations[i].max_ranges[s]):
  45. #print("not proliferating ", s, " is out of range")
  46. #print(type.proliferations[i].min_ranges[s] ," ", value, " ", type.proliferations[i].max_ranges[s])
  47. proliferating = false
  48. if proliferating:
  49. var future_type = i
  50. var current_type_index = type.type_index
  51. if i != current_type_index: #only need to break the loop if morphing into sth else
  52. #print("CHANGING INTO STH")
  53. type = individuum.types[future_type]
  54. return true
  55. return false