Monster_Page.php 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. <?php
  2. /**
  3. * Monster details page file.
  4. *
  5. * Provides a class with all the properties and methods to display the page.
  6. *
  7. * @author Iñigo Valentin <i@inigovalentin.com>
  8. * @license https://www.gnu.org/licenses/gpl-3.0.en.html GNU General Public License V3
  9. * @package SWDB
  10. */
  11. require_once(PATH::PAGE . "Page.php");
  12. require_once(PATH::ENTITY . "Monster.php");
  13. /**
  14. * Monster details page model.
  15. *
  16. * @category Page
  17. */
  18. class Monster_Page extends Page{
  19. /**
  20. * @var Monster[] Selected unit array.
  21. *
  22. * [0]: Unawakened monster (null if default purple).
  23. * [1]: Awakened monster (null if silver).
  24. * [2]: Second awakened monster (null if unavailaable).
  25. */
  26. private $monster = [];
  27. /**
  28. * @var int[] IDs to other units of the family
  29. * @todo Implement.
  30. */
  31. private $family = [];
  32. /**
  33. * @var bool Indicates a silver monster.
  34. */
  35. private $silver = false;
  36. /**
  37. * @var bool Indicates a default purple (always awaken) monster.
  38. */
  39. private $purple = false;
  40. /**
  41. * @var bool Indicates a monstes that can second awaken.
  42. */
  43. private $red = false;
  44. /**
  45. * Constructor.
  46. *
  47. * Retrieves the data and initializes the variables.
  48. *
  49. * @param int $id Monster id. Can be any of the awakening stages
  50. */
  51. public function __construct($id){
  52. $this->view = PATH::VIEW . "monster.php";
  53. $title = "";
  54. $monster = new Monster($id);
  55. $minimum_id = 0;
  56. if (! $monster->can_awaken()){
  57. // Silver star monster.
  58. $this->silver = true;
  59. $this->monster[0] = $monster;
  60. $this->monster[1] = null;
  61. $this->monster[2] = null;
  62. $title = $this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  63. }
  64. elseif ($monster->can_awaken() && $monster->get_awakens_to() == null && $monster->get_awakens_from() == null){
  65. // Default purple (Rainbowmon or King Angelmon)
  66. $this->purple = true;
  67. $this->monster[0] = null;
  68. $this->monster[1] = $monster;
  69. $this->monster[2] = null;
  70. $minimum_id = 1;
  71. $title = $this->monster[1]->get_name();
  72. }
  73. elseif ($monster->can_awaken() && $monster->get_awakens_to() == null && $monster->get_awakens_from() != null){
  74. // Normal monster, already awakened, no 2a.
  75. $this->monster[0] = new Monster($monster->get_awakens_from());
  76. $this->monster[1] = $monster;
  77. $this->monster[2] = null;
  78. $title = $this->monster[1]->get_name() . " - " .$this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  79. $this->family_id= $this->monster[0]->get_family();
  80. }
  81. elseif ($monster->can_awaken() && $monster->get_awakens_to() != null && $monster->get_awakens_from() == null){
  82. // Normal monster, not awakened, may have 2a.
  83. $this->monster[0] = $monster;
  84. $this->monster[1] = new Monster($this->monster[0]->get_awakens_to());
  85. if ($this->monster[1]->get_awakens_to() == null){
  86. $this->monster[2] = null;
  87. }
  88. else{
  89. $this->red = true;
  90. $this->monster[2] = new Monster($this->monster[1]->get_awakens_to());
  91. }
  92. $this->family_id= $this->monster[1]->get_family();
  93. $title = $this->monster[1]->get_name() . " - " .$this->monster[0]->get_element_name() . " " . $this->monster[0]->get_name();
  94. }
  95. // Load the monster family
  96. $statement = get_context()->get_db()->prepare("
  97. SELECT id
  98. FROM monster
  99. WHERE
  100. family = :family AND
  101. id <> :id AND
  102. awakens_from IS NULL
  103. ORDER BY
  104. natural_stars DESC,
  105. element = :fire DESC,
  106. element = :water DESC,
  107. element = :wind DESC,
  108. element = :light DESC,
  109. element = :dark DESC;
  110. ");
  111. $statement->bindValue(":family", $this->monster[$minimum_id]->get_family(), SQLITE3_INTEGER);
  112. $statement->bindValue(":id", $this->monster[$minimum_id]->get_id(), SQLITE3_INTEGER);
  113. $statement->bindValue(":fire", ELEMENT_ID::FIRE, SQLITE3_INTEGER);
  114. $statement->bindValue(":water", ELEMENT_ID::WATER, SQLITE3_INTEGER);
  115. $statement->bindValue(":wind", ELEMENT_ID::WIND, SQLITE3_INTEGER);
  116. $statement->bindValue(":light", ELEMENT_ID::LIGHT, SQLITE3_INTEGER);
  117. $statement->bindValue(":dark", ELEMENT_ID::DARK, SQLITE3_INTEGER);
  118. $result_set = $statement->execute();
  119. while ($result = $result_set->fetchArray(SQLITE3_ASSOC)){
  120. array_push($this->family, new Monster($result["id"]));
  121. }
  122. $this->title = $title ." - SWDB";
  123. $this->description = $title . " info - SWDB";
  124. $this->canonical = URL::BASE . "monster_info/" . $id;
  125. }
  126. /**
  127. * Retrieves the monster line to show.
  128. *
  129. * Index [0]: Unawakened monster (null if default purple).
  130. * Index [1]: Awakened monster (null if silver).
  131. * Index [2]: Second awakened monster (null if unavailaable).
  132. *
  133. * @return Monster[]
  134. */
  135. public function get_monsters(){
  136. return $this->monster;
  137. }
  138. /**
  139. * Retrieves the monster family.
  140. *
  141. * @return multitype:number
  142. */
  143. public function get_family(){
  144. return $this->family;
  145. }
  146. /**
  147. * Checks if the monster is default silver (non awakeable).
  148. *
  149. * @return bool True for silver monsters, false otherwise.
  150. */
  151. public function is_silver(){
  152. return $this->silver;
  153. }
  154. /**
  155. * Checks if the monster is default purple (always awaken).
  156. *
  157. * @return bool True for purple monsters, false otherwise.
  158. */
  159. public function is_purple(){
  160. return $this->purple;
  161. }
  162. /**
  163. * Checks if the monster can second awaken.
  164. *
  165. * @return bool True for monsters that can 2A, false otherwise.
  166. */
  167. public function can_2a(){
  168. return $this->red;
  169. }
  170. }
  171. ?>