text: /*
   * Moondust, a free game engine for platform game making
   * Copyright (c) 2014-2020 Vitaly Novichkov <admin@wohlnet.ru>
   *
   * This software is licensed under a dual license system (MIT or GPL version 3 or later).
   * This means you are free to choose with which of both licenses (MIT or GPL version 3 or later)
   * you want to use this software.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   *
   * You can see text of MIT license in the LICENSE.mit file you can see in Engine folder,
   * or see https://mit-license.org/.
   *
   * You can see text of GPLv3 license in the LICENSE.gpl3 file you can see in Engine folder,
   * or see <http://www.gnu.org/licenses/>.
   */
  
  #ifndef OBJ_NPC_H
  #define OBJ_NPC_H
  
  #include <string>
  #include <common_features/size.h>
  #include <ConfigPackManager/level/config_npc.h>
  
  #include "../graphics/graphics.h"
  #include "spawn_effect_def.h"
  
  // //Defines:// //
  //  obj_npc     //
  //  npc_Markers //
  // //////////// //
  
  struct obj_npc
  {
      /*   OpenGL    */
      bool isInit;
      PGE_Texture *image;
      GLuint textureID;
      int textureArrayId;
      int animator_ID;
      PGE_Size      image_size;
      /*   OpenGL    */
  
      //! Generic NPC settings and parameters
      NpcSetup setup;
  
      SpawnEffectDef effect_1_def;
      SpawnEffectDef effect_2_def;
  
      enum blockSpawn
      {
          spawn_warp = 0,
          spawn_bump
      };
      //!Type of NPC spawn from block
      unsigned int block_spawn_type;
      //!NPC's initial Y Velocity after spawn from block
      double       block_spawn_speed;
      //!Play sound on spawn from block (if false - spawn without 'radish' sound)
      bool         block_spawn_sound;
  };
  
  
  
  struct NPC_GlobalSetup
  {
      //    ;Defines for SMBX64
      uint64_t    bubble;   //    bubble=283    ; NPC-Container for packed in bubble
      uint64_t    egg;      //    egg=96        ; NPC-Container for packed in egg
      uint64_t    lakitu;   //    lakitu=284    ; NPC-Container for spawn by lakitu
      uint64_t    buried;   //    burred=91 ; NPC-Container for packed in herb
  
      uint64_t    ice_cube; //    icecube=263   ; NPC-Container for frozen NPCs
  
      //    ;markers
      uint64_t    iceball;  //    iceball=265
      uint64_t    fireball; //    fireball=13
      uint64_t    hammer;   //    hammer=171
      uint64_t    boomerang;//    boomerang=292
      uint64_t    coin_in_block; //    coin-in-block=10
  
      // some physics settings
      double      phs_gravity_accel;
      double      phs_max_fall_speed;
      //effects
      uint64_t    eff_lava_burn; //Lava burn effect [Effect to spawn on contact with lava]
  
      //projectile properties
      SpawnEffectDef projectile_effect;
      uint64_t    projectile_sound_id;
      double      projectile_speed;
  
      //Talking NPC's properties
      std::string talking_sign_img;
  };
  
  #endif // OBJ_NPC_H
  