Guest User

notester32

a guest
Aug 29th, 2023
8
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.39 KB | None | 0 0
  1. main.java
  2. ------------------
  3.  
  4. package main;
  5.  
  6. public class Main{
  7.  
  8. public static void main(String[] args) {
  9.  
  10. Engine engine = new Engine();
  11. engine.engine_init();
  12. }
  13.  
  14. }
  15.  
  16.  
  17. ------------------
  18.  
  19. Engine.java
  20. -----------------
  21.  
  22. package main;
  23.  
  24. import java.awt.Color;
  25. import java.awt.Graphics;
  26. import java.awt.Graphics2D;
  27. import java.awt.event.KeyEvent;
  28. import java.awt.event.KeyListener;
  29. import java.awt.image.BufferedImage;
  30. import java.io.File;
  31. import java.io.IOException;
  32. import java.util.*;
  33.  
  34. import javax.imageio.ImageIO;
  35. import javax.swing.*;
  36.  
  37. @SuppressWarnings("serial")
  38. public class Engine extends JPanel implements KeyListener {
  39.  
  40. JFrame window = new JFrame("ja-rpg");
  41. BufferedImage image;
  42.  
  43. boolean running = true;
  44. boolean debug_mode = true;
  45. String game_state;
  46.  
  47. String[] sound_files;
  48. String[] music_files;
  49.  
  50. Map<String, int[]> events_perform = new HashMap<>();
  51. Map<String, int[]> custom_variables = new HashMap<>();
  52.  
  53. List<String> image_list = new ArrayList<>();
  54. List<Anims> anims_list = new ArrayList<>();
  55. List<Entity> entity_list = new ArrayList<>();
  56. List<World> world_list = new ArrayList<>();
  57. List<Gui> gui_list = new ArrayList<>();
  58.  
  59. World world = new World();
  60. float num = 0;
  61. String input_pressed = "";
  62.  
  63. boolean i_up = false;
  64. boolean i_down = false;
  65. boolean i_left = false;
  66. boolean i_right = false;
  67.  
  68. Thread anims_core = new Thread(() -> {
  69.  
  70. while(true)
  71. {
  72. try {
  73. Thread.sleep(1);
  74.  
  75. for(Entity entity : entity_list)
  76. {
  77. entity.entity_anims.anim_update();
  78. }
  79. } catch (InterruptedException e) {
  80. // TODO Auto-generated catch block
  81. e.printStackTrace();
  82. }
  83. }
  84. });
  85.  
  86.  
  87. public Engine() {
  88.  
  89.  
  90. image_list.add("src/main/spr/im1.png");
  91. image_list.add("src/main/spr/im2.png");
  92. image_list.add("src/main/spr/im3.png");
  93. image_list.add("src/main/spr/im4.png");
  94.  
  95. Anims down = new Anims();
  96. down.anim_name = "down_idle";
  97. down.engine = this;
  98. down.image_list.add(2);
  99. down.image_list.add(1);
  100. anims_list.add(down);
  101. //
  102. // Anims up = new Anims();
  103. // up.anim_name = "up_idle";
  104. // up.image_frames[0] = 14;
  105. // up.max_frame = 1;
  106. // anims_list.add(up);
  107. //
  108. // Anims u = new Anims();
  109. // u.anim_name = "left_idle";
  110. // u.image_frames[0] = 6;
  111. // u.max_frame = 1;
  112. // anims_list.add(u);
  113. //
  114. // Anims i = new Anims();
  115. // i.anim_name = "right_idle";
  116. // i.image_frames[0] = 8;
  117. // i.max_frame = 1;
  118. // anims_list.add(i);
  119. //
  120. // Anims p = new Anims();
  121. // p.anim_name = "up_walk";
  122. // p.image_frames[0] = 13;
  123. // p.image_frames[1] = 14;
  124. // p.image_frames[2] = 15;
  125. // p.image_frames[3] = 12;
  126. // p.max_frame = 4;
  127. // anims_list.add(p);
  128. //
  129. // Anims q = new Anims();
  130. // q.anim_name = "down_walk";
  131. // q.image_frames[0] = 1;
  132. // q.image_frames[1] = 2;
  133. // q.image_frames[2] = 3;
  134. // q.image_frames[3] = 0;
  135. // q.max_frame = 4;
  136. // anims_list.add(q);
  137. //
  138. // Anims w = new Anims();
  139. // w.anim_name = "left_walk";
  140. // w.image_frames[0] = 5;
  141. // w.image_frames[1] = 6;
  142. // w.image_frames[2] = 7;
  143. // w.image_frames[3] = 4;
  144. // w.max_frame = 4;
  145. // anims_list.add(w);
  146. //
  147. // Anims e = new Anims();
  148. // e.anim_name = "right_walk";
  149. // e.image_frames[0] = 9;
  150. // e.image_frames[1] = 10;
  151. // e.image_frames[2] = 11;
  152. // e.image_frames[3] = 8;
  153. // e.max_frame = 4;
  154. // anims_list.add(e);
  155.  
  156. addKeyListener(this); // Agregar KeyListener al panel
  157. setFocusable(true);
  158. }
  159.  
  160. public void gameloop()
  161. {
  162. anims_core.start();
  163. while(running == true)
  164. {
  165.  
  166. try {
  167. Thread.sleep(1);
  168.  
  169. long update_start = System.nanoTime();
  170. engine_update();
  171. long update_end = System.nanoTime();
  172. long update_passed = update_end - update_start;
  173. System.out.println("engine update time: "+String.valueOf(update_passed));
  174.  
  175. update_start = System.nanoTime();
  176. engine_input();
  177. update_end = System.nanoTime();
  178. update_passed = update_end - update_start;
  179. System.out.println("input update time: "+String.valueOf(update_passed));
  180.  
  181. update_start = System.nanoTime();
  182. repaint();
  183. update_end = System.nanoTime();
  184. update_passed = update_end - update_start;
  185. System.out.println("paint update time: "+String.valueOf(update_passed));
  186.  
  187. } catch (InterruptedException e) {
  188. // TODO Auto-generated catch block
  189. e.printStackTrace();
  190. }
  191. }
  192.  
  193. }
  194.  
  195. public void engine_init()
  196. {
  197. window.setSize(640, 480);
  198. window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  199. window.setResizable(false);
  200. window.setVisible(true);
  201. window.add(this);
  202. add_player_entity();
  203. gameloop();
  204. }
  205.  
  206. @Override
  207. public void keyPressed(KeyEvent e) {
  208. int keyCode = e.getKeyCode();
  209. if (keyCode == KeyEvent.VK_UP) {
  210. i_up = true;
  211. }
  212. if (keyCode == KeyEvent.VK_DOWN) {
  213. i_down = true;
  214. }
  215. if (keyCode == KeyEvent.VK_LEFT) {
  216. i_left = true;
  217. }
  218. if (keyCode == KeyEvent.VK_RIGHT) {
  219. i_right = true;
  220. }
  221. if (keyCode == KeyEvent.VK_ENTER)
  222. {
  223.  
  224. }
  225.  
  226. }
  227.  
  228. @Override
  229. public void keyReleased(KeyEvent e) {
  230. int keyCode = e.getKeyCode();
  231. if (keyCode == KeyEvent.VK_UP) {
  232. i_up = false;
  233. }
  234. if (keyCode == KeyEvent.VK_DOWN) {
  235. i_down = false;
  236. }
  237. if (keyCode == KeyEvent.VK_LEFT) {
  238. i_left = false;
  239. }
  240. if (keyCode == KeyEvent.VK_RIGHT) {
  241. i_right = false;
  242. }
  243.  
  244. }
  245.  
  246. @Override
  247. public void keyTyped(KeyEvent arg0) {
  248. // TODO Auto-generated method stub
  249.  
  250. }
  251.  
  252. public void engine_update()
  253. {
  254.  
  255. for(Entity entity : entity_list)
  256. {
  257. entity.entity_update();
  258. }
  259.  
  260. }
  261.  
  262. public void add_player_entity()
  263. {
  264. int a = 0;
  265. for(int i = 0; i < 50; i++) //testing entities
  266. {
  267. Entity i1 = new Entity();
  268. i1.engine = this;
  269. i1.entity_init(1);
  270. i1.entity_id = i;
  271. i1.x += a;
  272. i1.y -= a;
  273. a += 50;
  274. entity_list.add(i1);
  275. }
  276.  
  277.  
  278. Entity entity = new Entity();
  279. entity.engine = this;
  280. entity.entity_init(0);
  281. entity.entity_id = -1;
  282. entity.y = 100;
  283. entity_list.add(entity);
  284. }
  285.  
  286. public void engine_input()
  287. {
  288. input_pressed = "none";
  289.  
  290. if(i_up == true)
  291. {
  292. input_pressed = "up";
  293. }
  294.  
  295. if(i_down == true)
  296. {
  297. input_pressed = "down";
  298. }
  299.  
  300. if(i_left == true)
  301. {
  302. input_pressed = "left";
  303. }
  304.  
  305. if(i_right == true)
  306. {
  307. input_pressed = "right";
  308. }
  309.  
  310. }
  311.  
  312.  
  313. @Override
  314. protected void paintComponent(Graphics g) {
  315. super.paintComponent(g);
  316.  
  317. Graphics2D g2d = (Graphics2D) g;
  318. //g2d.clipRect(10, 10, 100, 100);
  319. for(Entity entity : entity_list)
  320. {
  321.  
  322. if(entity.entity_chase_cam == true)
  323. {
  324. g2d.translate(-Math.round(entity.x)+(window.getWidth()/2), -Math.round(entity.y)+(window.getHeight()/2));
  325. }
  326. }
  327.  
  328. //
  329. // g2d.drawImage(image, 10, 10, null);
  330.  
  331. // Ejemplo: Dibuja un rectángulo rojo
  332. g2d.setColor(Color.RED);
  333. g2d.fillRect(50, 50, 100, 100);
  334.  
  335. for(Entity entity : entity_list)
  336. {
  337.  
  338. try {
  339. image = ImageIO.read(new File(entity.entity_anims.frame_to_render));
  340. } catch (IOException e) {
  341. // TODO Auto-generated catch block
  342. e.printStackTrace();
  343. }
  344. g2d.drawImage(image, (int) entity.x, (int) entity.y, null);
  345.  
  346. if(entity.entity_name.equals("player"))
  347. {
  348.  
  349. }
  350. }
  351.  
  352. // for(int i = 0; i < entity_list.size()-1; i++ )
  353. // {
  354. // g2d.setColor(Color.GREEN);
  355. // g2d.drawLine((int) entity_list.get(i).rec_collider.getCenterX(),(int) entity_list.get(i).rec_collider.getCenterY(), (int) entity_list.get(i+1).rec_collider.getCenterX(), (int) entity_list.get(i+1).rec_collider.getCenterY());
  356. // }
  357. for(Entity entity : entity_list)
  358. {
  359.  
  360. g2d.setColor(Color.black);
  361. g2d.drawRect((int)entity.x, (int)entity.y, entity.rec_collider.width, entity.rec_collider.height);
  362.  
  363. g2d.drawRect((int)entity.rec_area_up.x, (int)entity.rec_area_up.y, entity.rec_area_up.width, entity.rec_area_up.height);
  364. g2d.drawRect((int)entity.rec_area_down.x, (int)entity.rec_area_down.y, entity.rec_area_down.width, entity.rec_area_down.height);
  365. g2d.drawRect((int)entity.rec_area_left.x, (int)entity.rec_area_left.y, entity.rec_area_left.width, entity.rec_area_left.height);
  366. g2d.drawRect((int)entity.rec_area_right.x, (int)entity.rec_area_right.y, entity.rec_area_right.width, entity.rec_area_right.height);
  367.  
  368. if(debug_mode == true)
  369. {
  370. {
  371. g2d.drawString(String.valueOf(entity.rec_collider.getBounds()), (int) entity.x, (int) entity.y);
  372. g2d.drawString(String.valueOf(entity.entity_id), (int) entity.x, (int) entity.y-32);
  373.  
  374. if(entity.entity_name.contains("player"))
  375. {
  376. g2d.setColor(Color.BLACK);
  377. g2d.drawString("X: "+String.valueOf(Math.round(entity.x))+" Y: "+String.valueOf(Math.round(entity.y)), Math.round(entity.x)-200, Math.round(entity.y)+16);
  378. g2d.drawString(input_pressed, Math.round(entity.x)-200, Math.round(entity.y)+32);
  379. g2d.drawString(String.valueOf(entity.rec_area_right_is_colliding), Math.round(entity.x)-200, Math.round(entity.y)+128);
  380. //g2d.drawRect(entity.rec_collider.x, entity.rec_collider.y, entity.rec_collider.width, entity.rec_collider.height);
  381. break;
  382. }
  383. }
  384.  
  385.  
  386. }
  387. }
  388.  
  389.  
  390.  
  391. }
  392. }
  393.  
  394. -----------------
  395.  
  396. entity.java
  397. -----------------------
  398.  
  399. package main;
  400.  
  401. import java.awt.*;
  402.  
  403. public class Entity{
  404.  
  405. int entity_id = 0;
  406. int entity_type = -1;
  407. String entity_name;
  408.  
  409. Rectangle rec_collider = new Rectangle();
  410. Rectangle rec_area_up = new Rectangle();
  411. Rectangle rec_area_down = new Rectangle();
  412. Rectangle rec_area_left = new Rectangle();
  413. Rectangle rec_area_right = new Rectangle();
  414.  
  415. boolean enable_area_col = true;
  416. boolean rec_area_up_is_colliding = false;
  417. boolean rec_area_down_is_colliding = false;
  418. boolean rec_area_left_is_colliding = false;
  419. boolean rec_area_right_is_colliding = false;
  420.  
  421. Engine engine;
  422. Anims entity_anims;
  423.  
  424. String entity_direction = "none";
  425. String entity_facing_direction = "down";
  426. float x = 0;
  427. float y = 0;
  428.  
  429. float entity_speed = (float) 0.5;
  430. boolean entity_collider = false;
  431. boolean entity_can_control = false;
  432. boolean entity_controlling = false;
  433. boolean on_event = false;
  434. boolean entity_chase_cam = false;
  435. boolean entity_enable_anims = true;
  436. boolean entity_custom_anims = false;
  437. boolean playing_anims = true;
  438.  
  439. String entity_current_anims = "down_idle";
  440.  
  441. String idle_up_anim = "up_idle";
  442. String idle_down_anim = "down_idle";
  443. String idle_left_anim = "left_idle";
  444. String idle_right_anim = "right_idle";
  445. String walk_up_anim = "up_walk";
  446. String walk_down_anim = "down_walk";
  447. String walk_left_anim = "left_walk";
  448. String walk_right_anim = "right_walk";
  449. String custom_anims = "none";
  450.  
  451. public Entity(){}
  452.  
  453. public void entity_init(int entity_type)
  454. {
  455. this.entity_type = entity_type;
  456. switch(entity_type)
  457. {
  458. case 0: // player
  459. {
  460. entity_name = "player";
  461. entity_collider = true;
  462. entity_can_control = true;
  463. on_event = false;
  464. entity_chase_cam = true;
  465. break;
  466. }
  467. case 1:
  468. {
  469. entity_name = "none";
  470. entity_collider = false;
  471. entity_can_control = false;
  472. entity_custom_anims = true;
  473. on_event = true;
  474. entity_chase_cam = false;
  475. break;
  476. }
  477. }
  478. }
  479.  
  480. public void entity_update()
  481. {
  482.  
  483. rec_collider.setSize(32, 32);
  484. rec_collider.setLocation((int) x, (int) y);
  485.  
  486. rec_area_up.setLocation((int) x, (int) y-5);
  487. rec_area_up.setSize(32, 4);
  488.  
  489. rec_area_down.setLocation((int) x, (int) y+33);
  490. rec_area_down.setSize(32, 4);
  491.  
  492. rec_area_left.setLocation((int) x-5, (int) y);
  493. rec_area_left.setSize(4, 32);
  494.  
  495. rec_area_right.setLocation((int) x+33, (int) y);
  496. rec_area_right.setSize(4, 32);
  497.  
  498.  
  499.  
  500. if(entity_name.equals("player"))
  501. {
  502. entity_direction = engine.input_pressed;
  503. entity_controlling = false;
  504. }
  505.  
  506. if(entity_can_control == true || on_event == true)
  507. {
  508. if(entity_collider == true)
  509. {
  510. for (Entity entity : engine.entity_list)
  511. {
  512.  
  513. rec_area_up_is_colliding = false;
  514. rec_area_down_is_colliding = false;
  515. rec_area_left_is_colliding = false;
  516. rec_area_right_is_colliding = false;
  517.  
  518. if(rec_area_up.intersects(entity.rec_area_down) && (this.entity_id != entity.entity_id)) {
  519. rec_area_up_is_colliding = true;
  520.  
  521. }
  522.  
  523. if(rec_area_down.intersects(entity.rec_collider) && (this.entity_id != entity.entity_id)) {
  524. rec_area_down_is_colliding = true;
  525.  
  526. }
  527.  
  528. if(rec_area_left.intersects(entity.rec_collider) && (this.entity_id != entity.entity_id)) {
  529. rec_area_left_is_colliding = true;
  530.  
  531. }
  532.  
  533. if(rec_area_right.intersects(entity.rec_collider) && (this.entity_id != entity.entity_id)) {
  534. rec_area_right_is_colliding = true;
  535.  
  536. }
  537.  
  538. if (this.rec_collider.intersects(entity.rec_collider) && (this.entity_id != entity.entity_id))
  539. {
  540.  
  541. if(entity_facing_direction.equals("up"))
  542. {
  543. y += entity_speed;
  544. //break;
  545. }
  546.  
  547. if(entity_facing_direction.equals("down"))
  548. {
  549. y -= entity_speed;
  550. //break;
  551. }
  552.  
  553. if(entity_facing_direction.equals("left"))
  554. {
  555. x += entity_speed;
  556. //break;
  557. }
  558.  
  559. if(entity_facing_direction.equals("right"))
  560. {
  561. x -= entity_speed;
  562. //break;
  563. }
  564.  
  565. }
  566.  
  567. }
  568. }
  569.  
  570. if(entity_direction.equals("up") && (rec_area_up_is_colliding == false))
  571. {
  572. y -= entity_speed;
  573. entity_controlling = true;
  574. entity_facing_direction = "up";
  575. }
  576.  
  577. if(entity_direction.equals("down"))
  578. {
  579. if(rec_area_down_is_colliding == false)
  580. {
  581. y += entity_speed;
  582. entity_controlling = true;
  583. entity_facing_direction = "down";
  584. }
  585. }
  586.  
  587. if(entity_direction.equals("left"))
  588. {
  589. if(rec_area_left_is_colliding == false)
  590. {
  591. x -= entity_speed;
  592. entity_controlling = true;
  593. entity_facing_direction = "left";
  594. }
  595. }
  596.  
  597. if(entity_direction.equals("right"))
  598. {
  599.  
  600. if(rec_area_right_is_colliding == false)
  601. {
  602. x += entity_speed;
  603. entity_controlling = true;
  604. entity_facing_direction = "right";
  605. }
  606. }
  607. }
  608.  
  609. if(entity_enable_anims == true)
  610. {
  611.  
  612.  
  613. for(Anims anims : engine.anims_list)
  614. {
  615. if(anims.anim_name.equals(entity_current_anims))
  616. {
  617. this.entity_anims = anims;
  618. }
  619.  
  620. }
  621.  
  622. if(entity_custom_anims == false)
  623. {
  624. if(entity_controlling == false)
  625. {
  626. if(entity_facing_direction.equals("up"))
  627. {
  628. entity_current_anims = idle_up_anim;
  629. }else if(entity_facing_direction.equals("down"))
  630. {
  631. entity_current_anims = idle_down_anim;
  632. }else if(entity_facing_direction.equals("left"))
  633. {
  634. entity_current_anims = idle_left_anim;
  635. }else if(entity_facing_direction.equals("right"))
  636. {
  637. entity_current_anims = idle_right_anim;
  638. }
  639. }else if(entity_controlling == true)
  640. {
  641. if(entity_facing_direction.equals("up"))
  642. {
  643. entity_current_anims = walk_up_anim;
  644. }else if(entity_facing_direction.equals("down"))
  645. {
  646. entity_current_anims = walk_down_anim;
  647. }else if(entity_facing_direction.equals("left"))
  648. {
  649. entity_current_anims = walk_left_anim;
  650. }else if(entity_facing_direction.equals("right"))
  651. {
  652. entity_current_anims = walk_right_anim;
  653. }
  654. }
  655. }
  656.  
  657. }
  658. }
  659.  
  660. }
  661.  
  662.  
  663. ------------------------
  664.  
  665. anims.java
  666. ----------------------
  667. package main;
  668.  
  669.  
  670. import java.util.ArrayList;
  671. import java.util.List;
  672.  
  673.  
  674. public class Anims{
  675.  
  676. List<Integer> image_list = new ArrayList<>();
  677. List<Integer> image_list_pivot_x = new ArrayList<>();
  678. List<Integer> image_list_pivot_y = new ArrayList<>();
  679. int max_frame;
  680. String anim_name = "none";
  681. String frame_to_render;
  682. Engine engine;
  683.  
  684. int current_anims_frame = 0;
  685. float anims_frame_delay;
  686. float anims_frame_delay_speed = (float) 0.001;
  687.  
  688. public Anims(){}
  689.  
  690. public void anim_update()
  691. {
  692. max_frame = image_list.size()-1;
  693. anims_frame_delay -= anims_frame_delay_speed;
  694.  
  695. if(anims_frame_delay <= 0)
  696. {
  697. current_anims_frame += 1;
  698. anims_frame_delay = 1;
  699. }
  700.  
  701. if(current_anims_frame > max_frame)
  702. {
  703. current_anims_frame = 0;
  704.  
  705. }
  706.  
  707. frame_to_render = engine.image_list.get(this.image_list.get(current_anims_frame));
  708. // try {
  709. //
  710. // //engine.image = ImageIO.read(new File(""));
  711. // } catch (IOException e) {
  712. // // TODO Auto-generated catch block
  713. // e.printStackTrace();
  714. // }
  715. }
  716.  
  717. }
  718. -----------------------
Advertisement
Add Comment
Please, Sign In to add comment