enigma-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Enigma-cvs] enigma/src stones.cc,1.22,1.23


From: Daniel Heck <address@hidden>
Subject: [Enigma-cvs] enigma/src stones.cc,1.22,1.23
Date: Fri, 21 Nov 2003 09:27:52 +0000

Update of /cvsroot/enigma/enigma/src
In directory subversions:/tmp/cvs-serv9952/src

Modified Files:
        stones.cc 
Log Message:
More work on st-spitter.


Index: stones.cc
===================================================================
RCS file: /cvsroot/enigma/enigma/src/stones.cc,v
retrieving revision 1.22
retrieving revision 1.23
diff -C2 -d -r1.22 -r1.23
*** stones.cc   20 Nov 2003 20:24:22 -0000      1.22
--- stones.cc   21 Nov 2003 09:27:50 -0000      1.23
***************
*** 231,261 ****
  {
      class SpitterStone : public Stone {
!         CLONEOBJ(SpitStone);
  
          enum State { IDLE, LOADING, SPITTING };
          State state;
      public:
          SpitterStone () : Stone("st-spitter"), state (IDLE) {
          }
  
          void actor_hit (const StoneContact &sc);
      };
  }
  
  void SpitterStone::actor_hit (const StoneContact &sc) {
      if (player::Inventory *inv = player::GetInventory(sc.actor)) {
          int lifepos = inv->find("it-extralife");
!         if (lifepos == -1) 
!             return; // no extra life to shoot
!         
!         delete inv->yield_item(lifepos);
      }
-     V2 vel = sc.actor->get_vel();
-     Actor *ball = MakeActor ("ac-cannonball");
-     ActorInfo *ai = ball->get_actorinfo();
-     ai->vel = vel;
-     V2 pos = get_pos().center();
- 
-     world::AddActor (pos[0], pos[1], ball);
  }
  
--- 231,282 ----
  {
      class SpitterStone : public Stone {
!         CLONEOBJ(SpitterStone);
  
          enum State { IDLE, LOADING, SPITTING };
+ 
          State state;
+         V2    ball_velocity;
      public:
          SpitterStone () : Stone("st-spitter"), state (IDLE) {
          }
  
+         void animcb();
+ 
          void actor_hit (const StoneContact &sc);
      };
  }
  
+ void SpitterStone::animcb() {
+     switch (state) {
+     case IDLE: assert(0); 
+     case LOADING:
+         {
+             Actor *ball = MakeActor ("ac-cannonball");
+             ActorInfo *ai = ball->get_actorinfo();
+             ai->vel = ball_velocity;
+             V2 pos = get_pos().center();
+             world::AddActor (pos[0], pos[1], ball);
+         }
+         state = SPITTING;
+         set_anim ("st-spitter-spitting");
+         break;
+     case SPITTING:
+         init_model();
+         state = IDLE;
+         break;
+     }
+ }
+ 
+ 
  void SpitterStone::actor_hit (const StoneContact &sc) {
      if (player::Inventory *inv = player::GetInventory(sc.actor)) {
          int lifepos = inv->find("it-extralife");
!         if (lifepos != -1) {
!             delete inv->yield_item(lifepos);
!             ball_velocity = sc.actor->get_vel();
!             state = LOADING;
!             set_anim ("st-spitter-loading");
!         }
      }
  }
  





reply via email to

[Prev in Thread] Current Thread [Next in Thread]