[Top][All Lists]
[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");
! }
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Enigma-cvs] enigma/src stones.cc,1.22,1.23,
Daniel Heck <address@hidden> <=