home *** CD-ROM | disk | FTP | other *** search
/ GameStar Special 2004 August / GSSH0804.iso / Action / Parsec47 / Parsec47.exe / p47 / src / abagames / util / bulletml / Bullet.d next >
Text File  |  2003-11-29  |  4KB  |  173 lines

  1. /*
  2.  * $Id: Bullet.d,v 1.1.1.1 2003/11/28 17:26:30 kenta Exp $
  3.  *
  4.  * Copyright 2003 Kenta Cho. All rights reserved.
  5.  */
  6. module abagames.util.bulletml.Bullet;
  7.  
  8. import std.math;
  9. import bulletml;
  10. import abagames.util.Vector;
  11. import abagames.util.Rand;
  12. import abagames.util.bulletml.BulletsManager;
  13.  
  14. /**
  15.  * Bullet controled by BulletML.
  16.  */
  17. public class Bullet {
  18.  public:
  19.   static Bullet now;
  20.   static Vector target;
  21.   Vector pos, acc;
  22.   float deg;
  23.   float speed;
  24.   float rank;
  25.   int id;
  26.  
  27.  private:
  28.   static Rand rand;
  29.   static BulletsManager manager;
  30.   BulletMLRunner* runner;
  31.   
  32.   public static this() {
  33.     rand = new Rand;
  34.   }
  35.  
  36.   public static void setBulletsManager(BulletsManager bm) {
  37.     manager = bm;
  38.     target = new Vector;
  39.     target.x = target.y = 0;
  40.   }
  41.  
  42.   public static double getRand() {
  43.     return rand.nextFloat(1);
  44.   }
  45.  
  46.   public static void addBullet(float deg, float speed) {
  47.     manager.addBullet(deg, speed);
  48.   }
  49.  
  50.   public static void addBullet(BulletMLState *state, float deg, float speed) {
  51.     manager.addBullet(state, deg, speed);
  52.   }
  53.  
  54.   public static int getTurn() {
  55.     return manager.getTurn();
  56.   }
  57.  
  58.   public this(int id) {
  59.     pos = new Vector;
  60.     acc = new Vector;
  61.     this.id = id;
  62.   }
  63.  
  64.   public void set(float x, float y, float deg, float speed, float rank) {
  65.     pos.x = x; pos.y = y;
  66.     acc.x = acc.y = 0;
  67.     this.deg = deg;
  68.     this.speed = speed;
  69.     this.rank = rank;
  70.     runner = null;
  71.   }
  72.  
  73.   public void setRunner(BulletMLRunner* runner) {
  74.     this.runner = runner;
  75.   }
  76.  
  77.   public void set(BulletMLRunner* runner, 
  78.           float x, float y, float deg, float speed, float rank) {
  79.     set(x, y, deg, speed, rank);
  80.     setRunner(runner);
  81.   }
  82.  
  83.   public void move() {
  84.     now = this;
  85.     if (!BulletMLRunner_isEnd(runner)) {
  86.       BulletMLRunner_run(runner);
  87.     }
  88.   }
  89.  
  90.   public bool isEnd() {
  91.     return BulletMLRunner_isEnd(runner);
  92.   }
  93.  
  94.   public void kill() {
  95.     manager.killMe(this);
  96.   }
  97.  
  98.   public void remove() {
  99.     if (runner) {
  100.       BulletMLRunner_delete(runner);
  101.       runner = null;
  102.     }
  103.   }
  104. }
  105.  
  106. private:
  107. const float VEL_SS_SDM_RATIO = 62.0 / 10;
  108. const float VEL_SDM_SS_RATIO = 10.0 / 62;
  109.  
  110. public:
  111.  
  112. float rtod(float a) {
  113.   return a * 180 / std.math.PI;
  114. }
  115.  
  116. float dtor(float a) {
  117.   return a * std.math.PI / 180;
  118. }
  119.  
  120.  
  121. extern (C) {
  122.   double getBulletDirection_(BulletMLRunner* r) {
  123.     return rtod(Bullet.now.deg);
  124.   }
  125.   double getAimDirection_(BulletMLRunner* r) {
  126.     Vector b = Bullet.now.pos;
  127.     Vector t = Bullet.target;
  128.     return rtod(std.math.atan2(t.x - b.x, t.y - b.y));
  129.   }
  130.   double getBulletSpeed_(BulletMLRunner* r) {
  131.     return Bullet.now.speed * VEL_SS_SDM_RATIO;
  132.   }
  133.   double getDefaultSpeed_(BulletMLRunner* r) {
  134.     return 1;
  135.   }
  136.   double getRank_(BulletMLRunner* r) {
  137.     return Bullet.now.rank;
  138.   }
  139.   void createSimpleBullet_(BulletMLRunner* r, double d, double s) {
  140.     Bullet.addBullet(dtor(d), s * VEL_SDM_SS_RATIO);
  141.   }
  142.   void createBullet_(BulletMLRunner* r, BulletMLState* state, double d, double s) {
  143.     Bullet.addBullet(state, dtor(d), s * VEL_SDM_SS_RATIO);
  144.   }
  145.   int getTurn_(BulletMLRunner* r) {
  146.     return Bullet.getTurn();
  147.   }
  148.   void doVanish_(BulletMLRunner* r) {
  149.     Bullet.now.kill();
  150.   }
  151.   void doChangeDirection_(BulletMLRunner* r, double d) {
  152.     Bullet.now.deg = dtor(d);
  153.   }
  154.   void doChangeSpeed_(BulletMLRunner* r, double s) {
  155.     Bullet.now.speed = s * VEL_SDM_SS_RATIO;
  156.   }
  157.   void doAccelX_(BulletMLRunner* r, double sx) {
  158.     Bullet.now.acc.x = sx * VEL_SDM_SS_RATIO;
  159.   }
  160.   void doAccelY_(BulletMLRunner* r, double sy) {
  161.     Bullet.now.acc.y = sy * VEL_SDM_SS_RATIO;
  162.   }
  163.   double getBulletSpeedX_(BulletMLRunner* r) {
  164.     return Bullet.now.acc.x;
  165.   }
  166.   double getBulletSpeedY_(BulletMLRunner* r) {
  167.     return Bullet.now.acc.y;
  168.   }
  169.   double getRand_(BulletMLRunner *r) {
  170.     return Bullet.getRand();
  171.   }
  172. }
  173.