Advertisement
Guest User

Untitled

a guest
Jan 29th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.51 KB | None | 0 0
  1. extends KinematicBody2D
  2.  
  3. # Declare member variables here. Examples:
  4. # var a = 2
  5. # var b = "text"
  6. export var speed: = Vector2(300.0, 1000.0)
  7. export var gravity: = 4000.0
  8.  
  9. var velocity: = Vector2.ZERO
  10.  
  11.  
  12.  
  13. func length_Fuzzy(name: String ) -> float:
  14. var vectorLength = (to_global(get_node(name).position) - get_node(name).get_collision_point()).length()
  15. var number = [0,20,40,80,150]
  16. var values = [0,0,0]
  17.  
  18. # CLOSE
  19.  
  20. if( vectorLength > number[0] && vectorLength <= number[1]):
  21. values[0] = (number[1] - vectorLength) / (number[1] - number[0] )
  22. # MEDIUM
  23. if(vectorLength >= 0 && vectorLength <= number[2]):
  24. values[1] = (vectorLength - number[2]) / (number[2] - number[0])
  25. elif(vectorLength > number[2] && vectorLength <= number[3]):
  26. values[1] = (number[3] - vectorLength) / (number[3] - number[2])
  27. # FAR
  28. if(vectorLength >= number[3] && vectorLength <= number[4]):
  29. values[2] = (vectorLength - number[3]) / (number[4] - number[3])
  30. elif(vectorLength > number[4]):
  31. values[2] = 1
  32. return values
  33. pass
  34.  
  35.  
  36.  
  37.  
  38. func fuzzy_logic(lewyDaleko:float , lewySrednio: float, lewyMocno: float, prostoDaleko:float , prostoSrednio: float, prostoMocno: float,prawyDaleko:float , prawySrednio: float, prawyMocno: float) -> int:
  39.  
  40. #Mocne lewo
  41. var ruleML1= min(lewyDaleko,min(prostoSrednio,prawyMocno))
  42. var ruleML2= min(lewyDaleko,min(prostoMocno,prawySrednio))
  43. var ruleML3= min(lewyDaleko,min(prostoMocno,prawyMocno))
  44. var ruleML4= min(lewyDaleko,min(prostoDaleko,prawyMocno))
  45. var ruleML5= min(lewySrednio,min(prostoMocno,prawyMocno))
  46. var ruleML6= min(lewyMocno,min(prostoMocno,prawyMocno))
  47. var ruleML7= min(lewySrednio,min(prostoSrednio,prawyMocno))
  48. var ruleML8= min(lewySrednio,min(prostoDaleko,prawyMocno))
  49. #slabe lewo
  50. var ruleSL1= min(lewyDaleko,min(prostoMocno,prawyDaleko))
  51. var ruleSL2= min(lewyDaleko,min(prostoSrednio,prawySrednio))
  52. var ruleSL3= min(lewyDaleko,min(prostoDaleko,prawySrednio))
  53. var ruleSL6= min(lewySrednio,min(prostoMocno,prawySrednio))
  54. #prosto
  55. var ruleNic1= min(lewyDaleko,min(prostoDaleko,prawyDaleko))
  56. var ruleNic2= min(lewyDaleko,min(prostoSrednio,prawyDaleko))
  57. var ruleNic3= min(lewySrednio,min(prostoDaleko,prawySrednio))
  58. var ruleNic4= min(lewySrednio,min(prostoSrednio,prawySrednio))
  59. var ruleNic5= min(lewyMocno,min(prostoSrednio,prawyMocno))
  60. var ruleNic6= min(lewyMocno,min(prostoDaleko,prawyMocno))
  61. #slabe prawo
  62. var ruleLP1= min(lewySrednio,min(prostoDaleko,prawyDaleko))
  63. var ruleLP2= min(lewySrednio,min(prostoSrednio,prawyDaleko))
  64. var ruleLP3= min(lewyMocno,min(prostoSrednio,prawySrednio))
  65. var ruleLP4= min(lewyMocno,min(prostoMocno,prawySrednio))
  66. var ruleMP5= min(lewyMocno,min(prostoDaleko,prawySrednio))
  67. #mocne prawo
  68. var ruleMP1= min(lewySrednio,min(prostoMocno,prawyDaleko))
  69. var ruleMP2= min(lewyMocno,min(prostoDaleko,prawyDaleko))
  70. var ruleMP3= min(lewyMocno,min(prostoSrednio,prawyDaleko))
  71. var ruleMP4= min(lewyMocno,min(prostoMocno,prawyDaleko))
  72. #srodek ciezkosci
  73. var mocnoLewy = max ( ruleML1, max ( ruleML2, max ( ruleML3,max( ruleML4, max( ruleML5,max(ruleML7,max(ruleML8,ruleML6 ) ) ) ))))
  74. var slabyLewy = max(ruleSL1,max(ruleSL2,max(ruleSL3,ruleSL6)))
  75. var nic = max(ruleNic1,max(ruleNic2,max(ruleNic3,max(ruleNic4,max(ruleNic5,ruleNic6)))))
  76. var slabyPrawy = max(ruleLP1,max(ruleLP2,ruleLP3))
  77. var mocnyPrawy = max(ruleMP1,max(ruleMP2,max(ruleMP3,max(ruleLP4,max(ruleMP5,ruleMP4)))))
  78. var licznik= mocnoLewy * (-30) + slabyLewy * (-15) + (nic * 0) + (slabyPrawy * 15) + (mocnyPrawy * 30)
  79. var mianownik= mocnoLewy+slabyLewy+nic+slabyPrawy+mocnyPrawy
  80. var skret = 0
  81. print(mocnoLewy,slabyLewy,nic,slabyPrawy,mocnyPrawy)
  82.  
  83. skret = licznik/mianownik
  84.  
  85. print(" ", skret)
  86. return skret
  87.  
  88. pass
  89.  
  90.  
  91. # Called when the node enters the scene tree for the first time.
  92. func _physics_process(delta: float) -> void:
  93. var timeScale: = delta * 200
  94.  
  95.  
  96. #print(path, " ", steering)
  97.  
  98.  
  99. var numbersRight = length_Fuzzy("left")
  100. var numbersLeft = length_Fuzzy("right")
  101. var numbersStraight = length_Fuzzy("middle")
  102.  
  103. var kat = fuzzy_logic(numbersLeft[0],numbersLeft[1],numbersLeft[2],numbersStraight[2],numbersStraight[1],numbersStraight[0],numbersRight[0],numbersRight[1],numbersRight[2])
  104.  
  105.  
  106. var rot:= self.get_rotation()
  107.  
  108.  
  109. rotate(deg2rad(kat))
  110.  
  111.  
  112.  
  113. move_and_collide(Vector2.RIGHT.rotated(rot) * timeScale )
  114.  
  115.  
  116.  
  117.  
  118.  
  119. #if (RotateValueLeft > RotateValueRight && abs(RotateValueLeft - RotateValueRight) > 1.25):
  120. #rotate(deg2rad(timeScale * RotateValueLeft))
  121. #elif(RotateValueLeft < RotateValueRight && abs(RotateValueLeft - RotateValueRight) > 1.25):
  122. #rotate(-deg2rad(timeScale * RotateValueRight))
  123. #else:
  124. #pass
  125.  
  126. # ZLE FUZZY LOGIC!
  127. #if(steering == 1 ):
  128. # rotate(deg2rad(timeScale * 1.5))
  129. #elif(steering == -1):
  130. # rotate(-deg2rad(timeScale * 1.5))
  131. #move_and_collide(Vector2.RIGHT.rotated(rot) * timeScale )
  132.  
  133.  
  134.  
  135. # Gracz
  136. # if(Input.get_action_strength("ui_right") > 0 && Input.get_action_strength("ui_up") > 0):
  137. # rotate(deg2rad(timeScale))
  138. # if(Input.get_action_strength("ui_left") > 0 && Input.get_action_strength("ui_up") > 0):
  139. # rotate(-deg2rad(timeScale))
  140. # if(Input.get_action_strength("ui_up") > 0):
  141. # move_and_collide(Vector2.RIGHT.rotated(rot) *5)
  142.  
  143.  
  144. func _ready() -> void:
  145. get_node("left").set_collide_with_bodies(true)
  146. get_node("middle").set_collide_with_bodies(true)
  147. get_node("right").set_collide_with_bodies(true)
  148. pass
  149.  
  150.  
  151.  
  152.  
  153. # Called every frame. 'delta' is the elapsed time since the previous frame.
  154. #func _process(delta):
  155. # pass
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement