animation.py 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. import pygame
  2. import pygame.gfxdraw
  3. import math
  4. import random
  5. pg = pygame
  6. pygame.init()
  7. main_size=(600,300)
  8. main_size=(1600,900)
  9. #window = pygame.display.set_mode(main_size,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  10. #window = pygame.display.set_mode(main_size,pg.RESIZABLE|pygame.DOUBLEBUF,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  11. window = pygame.display.set_mode(main_size,pg.RESIZABLE)#,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  12. #window = pygame.display.set_mode(main_size,pg.NOFRAME,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  13. #window = pygame.display.set_mode(main_size,pg.NOFRAME,32)#,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  14. #window = pygame.display.set_mode(main_size,pygame.FULLSCREEN) #x left->right ,y top-> bottom
  15. # pygame.display.set_mode((self.width, int(self.height+(self.height*0.15))) ,pygame.FULLSCREEN)
  16. #pg.display.set_mode(window,pg.DOUBLEBUF) #|pg.OPENGL)
  17. pg.display.set_caption('LibreLight Animation')
  18. class _Particale():
  19. def __init__(self,x,y,xvel,yvel,radius,color):
  20. self.x = x
  21. self.y = y
  22. self.xvel = xvel
  23. self.yvel = yvel
  24. self.radius = radius
  25. self.color = color
  26. self.time = time.time()
  27. self.start = time.time()
  28. self.start2 = random.randint(1,20)/10.
  29. if self.start2 > 1.8:
  30. self.start2 += random.randint(1,20)/10.
  31. self.colors = [(255,255,0),(255,210,0),(255,90,0)]
  32. self.color = random.choice(self.colors)
  33. def draw(self,win):
  34. if time.time() > self.time+0.05:
  35. self.x += self.xvel
  36. self.y += self.yvel
  37. self.time = time.time()
  38. if self.start+self.start2 < time.time():
  39. self.radius -= 1
  40. #if time.time() > self.time+0.2:
  41. #pygame.draw.circle(win, color, (int(self.x),int(self.y)),self.radius)
  42. color = self.color
  43. pygame.gfxdraw.filled_circle(win, int(self.x),int(self.y) ,self.radius,color )#[0,0,255])
  44. pygame.gfxdraw.aacircle(win, int(self.x),int(self.y) ,self.radius,color )#[0,0,255])
  45. class Particales():
  46. def __init__(self):
  47. self.data = []
  48. def add(self,x,y):
  49. for z in range(random.randint(1,3)):
  50. s = 10
  51. xvel = random.randint(0,s) -(s/2)
  52. yvel = random.randint(0,s) -(s/2)
  53. r = random.randint(1,2)
  54. p = _Particale(x ,y ,xvel ,yvel,r,(255,255,255))
  55. self.data.append(p)
  56. def draw(self,win):
  57. rem = []
  58. for p in self.data:
  59. p.draw(win)
  60. if p.radius <= 0:
  61. rem.append(p)
  62. for p in rem:
  63. self.data.remove(p)
  64. particales = Particales()
  65. def event_read():
  66. inc = 1
  67. for event in pg.event.get():
  68. print("event",event)
  69. move_x = 0
  70. move_y = 0
  71. move_z = 0
  72. rot_x = 0
  73. rot_y = 0
  74. rot_z = 0
  75. if event.type== pg.QUIT:
  76. print("quit")
  77. pg.quit()
  78. quit()
  79. sys.exit()
  80. if "key" in dir(event):
  81. if event.key == 27: #ESC pg.KEYDOWN:
  82. print("quit")
  83. pg.quit()
  84. quit()
  85. sys.exit()
  86. class Grid():
  87. def __init__(self):
  88. pixA = []
  89. for c in range(10):
  90. row = []
  91. for r in range(10):
  92. color = [r,r,r]
  93. row.append(color)
  94. pixA.append(row)
  95. self.pixA = pixA
  96. self.red = 0
  97. self.green = 0
  98. self.blue = 0
  99. self.blue_dir = 1
  100. def draw(self):
  101. pixA = self.pixA
  102. #pixel_array = pygame.PixelArray(window)
  103. pixel_array = {} # pygame.PixelArray(window)
  104. #pixel_array.open()
  105. a_x_max = main_size[1] #n600 #pixel_array[0])
  106. a_y_max = main_size[0] #300 #pixel_array)
  107. b_x_max = len(pixA[0])
  108. b_y_max = len(pixA)
  109. b_h = int(a_x_max / b_x_max)
  110. b_w = int(a_y_max / b_y_max)
  111. self.red = 0
  112. self.green = 0
  113. #blue = 255
  114. for r,row in enumerate(pixA):
  115. self.red += 30
  116. if self.red > 255:
  117. self.red = 255
  118. self.green = 0
  119. if self.blue > 255:
  120. self.blue = 255
  121. self.blue_dir = 0
  122. if self.blue <= 0:
  123. self.blue = 0
  124. self.blue_dir = 1
  125. for c,col in enumerate(row):
  126. self.green += 30
  127. if self.green > 255:
  128. self.green = 255
  129. color = pygame.Color(self.red,self.green,self.blue)
  130. #print("x:{:3} y:{:3} {:3} {:3} c:{}".format(x,y,x+bc,y+br,color))
  131. x = r*b_w
  132. y = c*b_h
  133. #pixel_array[r*b_w][c*b_h] = color
  134. #pixel_array[x:x+b_w-1,y:y+b_h-1] = color
  135. k = "{}:{},{}:{} {}".format(x,x+b_w-1,y,y+b_h-1,color) #x,x+10,y,y+10)
  136. pixel_array[k] = (x,x+b_w-1,y,y+b_h-1,color)
  137. #pixel_array.close()
  138. #one = 0
  139. if self.blue_dir:
  140. self.blue += 10
  141. else:
  142. self.blue -= 10
  143. return pixel_array
  144. class Flow():
  145. def __init__(self,x,y,ang=0):
  146. self._pos_center = (x,y)
  147. self._quadrant = 0
  148. self._ang = ang
  149. self._ang_dir = 1
  150. self._r = 2 #
  151. self._orbit = 100 # orbit,umlaufbahn
  152. self._color_org = [255,255,0]
  153. self._color = [0,0,255,255]
  154. self._x=0
  155. self._y=0
  156. self._ix = 0
  157. self._iy = 0
  158. def rotate(self):
  159. q = 0
  160. if self._ang_dir:
  161. self._ang += 0.5 # degree
  162. else:
  163. self._ang -= 1 # degree
  164. if self._ang >= 360:
  165. self._ang = 0 #self._ang -360
  166. elif self._ang < 0:
  167. self._ang = 360
  168. self._ix = 0 # math.sin(math.radians(ang))*self._orbit
  169. self._iy = int(self._orbit *2 * (self._ang /360)) # math.sqrt(self._orbit**2 - self._ix**2)
  170. def draw(self,x,y):
  171. self._pos_center = (x,y)
  172. self.rotate()
  173. self._x = int(self._pos_center[0] + self._ix)
  174. self._y = int(self._pos_center[1] + self._iy)
  175. f=1
  176. if self._ang > 300:
  177. f = (self._ang -300) / 60
  178. f = 1-f
  179. rgb = self._color_org # = [255,255,0]
  180. #self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ,0]
  181. elif self._ang < 60:
  182. f = self._ang / 60
  183. rgb = self._color_org # = [255,255,0]
  184. #self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ,0 ]
  185. self._color[3] = int(f*255)
  186. #print(self._color)
  187. #print("ang {} {} {:3} {:3} {}".format( self._ang,self._quadrant,self._x,self._y,self._color))
  188. #print(self._ang,f)
  189. #print(self,"Q:",int(self._quadrant),self._ang)
  190. return (self._x,self._y,self._color)
  191. class Planet():
  192. def __init__(self,x,y,ang=0):
  193. self._pos_center = (x,y)
  194. self._quadrant = 0
  195. self._ang = ang
  196. self._ang_dir = 1
  197. self._r = 2 #
  198. self._orbit = 60 # orbit,umlaufbahn
  199. self._color_org = [255,255,0]
  200. self._color = [0,255,0]
  201. self._x=0
  202. self._y=0
  203. self._ix = 0
  204. self._iy = 0
  205. def rotate(self):
  206. q = 0
  207. if self._ang_dir:
  208. self._ang += 2 # degree
  209. else:
  210. self._ang -= 1 # degree
  211. if self._ang >= 360:
  212. self._ang = 0 #self._ang -360
  213. elif self._ang < 0:
  214. self._ang = 360
  215. ang = self._ang
  216. self._quadrant = ang//90
  217. ang -= self._quadrant * 90
  218. self._ix = math.sin(math.radians(ang))*self._orbit
  219. self._iy = math.sqrt(self._orbit**2 - self._ix**2)
  220. y = self._iy
  221. x = self._ix
  222. if self._quadrant == 1:
  223. self._iy = -x
  224. self._ix = y
  225. elif self._quadrant == 2:
  226. self._iy = -y
  227. self._ix = -x
  228. elif self._quadrant == 3:
  229. self._iy = x
  230. self._ix = -y
  231. def draw(self,x,y):
  232. self._pos_center = (x,y)
  233. self.rotate()
  234. self._x = int(self._pos_center[0] + self._ix)
  235. self._y = int(self._pos_center[1] + self._iy)
  236. if self._ang > 300:
  237. f = (self._ang -300) / 60
  238. f = 1-f
  239. rgb = self._color_org # = [255,255,0]
  240. self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ]
  241. elif self._ang < 60:
  242. f = self._ang / 60
  243. rgb = self._color_org # = [255,255,0]
  244. self._color = [ int(rgb[0]*f) , int(rgb[1]*f) ,int(rgb[2]*f) ]
  245. #print("ang {} {} {:3} {:3} {}".format( self._ang,self._quadrant,self._x,self._y,self._color))
  246. #print(self,"Q:",int(self._quadrant),self._ang)
  247. return (self._x,self._y,self._color)
  248. class Animation():
  249. def __init__(self,x=20,y=20,speed=1,_dir=1):
  250. self.pos_x=x
  251. self.pos_x_dir = 1
  252. self.pos_y=y
  253. self.pos_y_dir = 1
  254. self.r = 7
  255. self.r_dir = 1
  256. self.speed = speed
  257. self.ang = 0
  258. self.ix=0
  259. self.iy=0
  260. self.planetes = []
  261. a = 360
  262. d = 3
  263. for i in range(d+1):
  264. i=i+1
  265. p = Flow(self.pos_x,self.pos_y,ang=a/d*i)
  266. p._ang_dir = _dir
  267. self.planetes.append(p)
  268. def rotate(self):
  269. self.ix = math.sin(math.radians(0))*self.r
  270. self.iy = math.sqrt(self.r**2 - self.ix**2)
  271. self.ang+=1
  272. if self.ang >= 360:
  273. self.ang = 0
  274. def draw(self,color=[255,255,255,255]):
  275. self.rotate()
  276. #pixel_array = pygame.PixelArray(window)
  277. pixel_array = {}
  278. self.color = pygame.Color(color[0],color[1],color[2],color[3])
  279. x=self.pos_x
  280. y=self.pos_y
  281. for i,planet in enumerate(self.planetes):
  282. px,py,pcolor = planet.draw(x,y)
  283. k = "{}.{}:{},{}:{}".format(i,px,px+10,py,py+10)
  284. pixel_array[k] = (px,px,py,py , pcolor )
  285. if self.pos_x > 300:
  286. self.pos_x_dir = 0
  287. if self.pos_x <= self.speed:
  288. self.pos_x_dir = 1
  289. if self.pos_x_dir:
  290. self.pos_x += self.speed
  291. else:
  292. self.pos_x -= self.speed
  293. if self.r > 20:
  294. self.r_dir = 0
  295. if self.r <=7:
  296. self.r_dir = 1
  297. if self.r_dir:
  298. self.r+=1
  299. else:
  300. self.r-=1
  301. return pixel_array
  302. class Gobo1():
  303. def __init__(self,x=20,y=20,speed=1,_dir=1):
  304. self.pos_x=x
  305. self.pos_x_dir = 1
  306. self.pos_y=y
  307. self.pos_y_dir = 1
  308. self.r = 17
  309. self.r_dir = 1
  310. self.speed = speed
  311. self.ang = 0
  312. self.ix=0
  313. self.iy=0
  314. self.planetes = []
  315. a = 360
  316. d = 3
  317. for i in range(d+1):
  318. i=i+1
  319. p = Planet(self.pos_x,self.pos_y,ang=a/d*i)
  320. p._ang_dir = _dir
  321. self.planetes.append(p)
  322. def rotate(self):
  323. self.ix = math.sin(math.radians(0))*self.r
  324. self.iy = math.sqrt(self.r**2 - self.ix**2)
  325. self.ang+=1
  326. if self.ang >= 360:
  327. self.ang = 0
  328. def draw(self,color=[255,255,255]):
  329. self.rotate()
  330. #pixel_array = pygame.PixelArray(window)
  331. pixel_array = {}
  332. self.color = pygame.Color(color[0],color[1],color[2])
  333. x=self.pos_x
  334. y=self.pos_y
  335. for i,planet in enumerate(self.planetes):
  336. px,py,pcolor = planet.draw(x,y)
  337. k = "{}.{}:{},{}:{}".format(i,px,px+10,py,py+10)
  338. pixel_array[k] = (px,px,py,py , pcolor )
  339. if self.pos_x > 1600:
  340. self.pos_x_dir = 0
  341. if self.pos_x <= self.speed:
  342. self.pos_x_dir = 1
  343. if self.pos_x_dir:
  344. self.pos_x += self.speed
  345. else:
  346. self.pos_x -= self.speed
  347. if self.r > 20:
  348. self.r_dir = 0
  349. if self.r <=7:
  350. self.r_dir = 1
  351. if self.r_dir:
  352. self.r+=1
  353. else:
  354. self.r-=1
  355. return pixel_array
  356. def vdim(color,dim):
  357. color[0] = int(color[0]/255*dim)
  358. color[1] = int(color[1]/255*dim)
  359. color[2] = int(color[2]/255*dim)
  360. return color
  361. run = True
  362. one = 1
  363. blue = 0
  364. blue_dir = 1
  365. pos_x_dir = 1
  366. #pixel_array = pygame.PixelArray(window)
  367. import time
  368. #time.sleep(1)
  369. grid = Grid()
  370. gobo1 = Gobo1(main_size[0],main_size[1]/3,speed=3)
  371. gobo2 = Gobo1(200,150,speed=0,_dir=0)
  372. anim1 = Animation(main_size[0]/2,main_size[1]/2,speed=1)
  373. while run:
  374. event_read()
  375. if one:
  376. window.fill(0)
  377. if 0:
  378. d=grid.draw()
  379. d1=gobo1.draw()#20,10)
  380. d2=gobo2.draw()#20,10)
  381. a1=anim1.draw()#20,10)
  382. pixel_array = pygame.PixelArray(window)
  383. vd = 255#80
  384. for k in d:
  385. i = d[k]
  386. #rect = pygame.draw.circle(window,i[4] , (i[0]+12,i[2]+12) ,10)
  387. #rect = pygame.gfxdraw.aacircle(window, i[0]+12,i[2]+12 ,10,i[4])
  388. #print(i)
  389. i = list(i)
  390. i[4] = vdim(i[4],vd)
  391. rect = pygame.gfxdraw.box(window, (i[0],i[2] ,i[1]-5,i[3]-5) ,i[4])
  392. #rect = pygame.Rect(window.get_rect().center, (0, 0)).inflate(*([min(window.get_size())//2]*2))
  393. #pygame.display.flip()
  394. for k in d1:
  395. i = d1[k]
  396. #print( k,"i",i)
  397. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  398. i = list(i)
  399. i[4] = vdim(i[4],vd)
  400. #arect = pygame.draw.circle(window,i[4] , (i[0],i[2]) ,10)
  401. #rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,10,i[4])
  402. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  403. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  404. for k in d2:
  405. i = d2[k]
  406. i = list(i)
  407. i[4] = vdim(i[4],vd)
  408. #print( k,"i",i)
  409. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  410. #rect = pygame.draw.circle(window,i[4] , (i[0],i[2]) ,10)
  411. #rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,10,[0,0,255])
  412. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  413. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  414. for k in a1:
  415. i = a1[k]
  416. #print( k,"i",i)
  417. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  418. #print("anim",i)
  419. i = list(i)
  420. _v = i[4]
  421. vd = 200
  422. #_v = vdim(i[4],vd)
  423. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,10,_v )#[0,0,255])
  424. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,10,i[4] )#[0,0,255])
  425. vd = 255
  426. #_v = vdim(i[4],vd)
  427. #rect = pygame.draw.circle(window,i[4] , (i[0],i[2]) ,10)
  428. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,20,_v )#[0,0,255])
  429. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  430. #pixel_array.close()
  431. #pygames.fill([255,0,0,127],(10,10))
  432. if 1:
  433. #window.fill(10)
  434. vd =255
  435. d1=gobo1.draw()#20,10)
  436. for k in d1:
  437. i = d1[k]
  438. #print( k,"i",i)
  439. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  440. i = list(i)
  441. i[4] = vdim(i[4],vd)
  442. #arect = pygame.draw.circle(window,i[4] , (i[0],i[2]) ,10)
  443. ##rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,10,i[4])
  444. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  445. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  446. particales.add(i[0],i[2])
  447. particales.draw(window)
  448. #pygame.gfxdraw.pixel(window,i[0],i[2],i[4])
  449. #pygame.gfxdraw.pixel(window,i[0]+1,i[2],i[4])
  450. #pygame.gfxdraw.pixel(window,i[0]+1,i[2]+1,i[4])
  451. #pygame.gfxdraw.pixel(window,i[0],i[2]+1,i[4])
  452. #pygame.gfxdraw.pixel(window,i[0]-1,i[2]+1,i[4])
  453. #pygame.gfxdraw.pixel(window,i[0]-1,i[2],i[4])
  454. #pygame.gfxdraw.pixel(window,i[0]-1,i[2]-1,i[4])
  455. a1=anim1.draw()#20,10)
  456. for k in a1:
  457. i = a1[k]
  458. #print( k,"i",i)
  459. #pixel_array[i[0]:i[1],i[2]:i[3]] = i[4] #(x,x+10,y,y+10 , self.color )
  460. #print("anim",i)
  461. i = list(i)
  462. _v = i[4]
  463. vd = 200
  464. #_v = vdim(i[4],vd)
  465. #rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,10,_v )#[0,0,255])
  466. #rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,10,i[4] )#[0,0,255])
  467. vd = 255
  468. #_v = vdim(i[4],vd)
  469. #rect = pygame.draw.circle(window,i[4] , (i[0],i[2]) ,10)
  470. rect = pygame.gfxdraw.filled_circle(window, i[0],i[2] ,20,_v )#[0,0,255])
  471. rect = pygame.gfxdraw.aacircle(window, i[0],i[2] ,20,i[4] )#[0,0,255])
  472. #print(i)
  473. particales.add(i[0],i[2])
  474. particales.draw(window)
  475. #pygame.gfxdraw.pixel(window,i[0],i[2],i[4])
  476. #pygame.gfxdraw.pixel(window,i[0]+1,i[2],i[4])
  477. #pygame.gfxdraw.pixel(window,i[0]+1,i[2]+1,i[4])
  478. #pygame.gfxdraw.pixel(window,i[0],i[2]+1,i[4])
  479. #pygame.gfxdraw.pixel(window,i[0]-1,i[2]+1,i[4])
  480. #pygame.gfxdraw.pixel(window,i[0]-1,i[2],i[4])
  481. #pygame.gfxdraw.pixel(window,i[0]-1,i[2]-1,i[4])
  482. #pygame.display.flip()
  483. #gobo2.draw(color=[255,0,0])
  484. #pygame.display.flip()
  485. #pg.time.wait(10)
  486. pygame.display.flip()
  487. #pg.time.wait(10)
  488. pygame.quit()
  489. exit()