294 |
|
|
295 |
void BasicBall::message(const string &m, const Value &) |
void BasicBall::message(const string &m, const Value &) |
296 |
{ |
{ |
|
// enigma::Log << get_kind() << ": msg("<<m<<") in state "<<state<< '\n'; |
|
|
// warning("%s: msg '%s' in state '%i'", get_kind(), m.c_str(), state); |
|
297 |
if (state == NORMAL) { |
if (state == NORMAL) { |
298 |
if (m == "shatter") change_state(SHATTERING); |
if (m == "shatter") change_state(SHATTERING); |
299 |
else if (m == "laserhit") change_state(SHATTERING); |
else if (m == "laserhit") change_state(SHATTERING); |
328 |
|
|
329 |
sinkDepth += sinkSpeed*dtime; |
sinkDepth += sinkSpeed*dtime; |
330 |
|
|
|
// fprintf(stderr, "dtime=%f absVelocity=%f sinkSpeed=%f sinkDepth=%f\n", |
|
|
// dtime, absVelocity, sinkSpeed, sinkDepth); |
|
|
|
|
331 |
if (sinkDepth >= maxSinkDepth) { |
if (sinkDepth >= maxSinkDepth) { |
|
// sound::PlaySound("shatter"); |
|
332 |
set_model(string(get_kind())+"-sunk"); |
set_model(string(get_kind())+"-sunk"); |
333 |
ai->vel = V2(); // stop! |
ai->vel = V2(); // stop! |
334 |
sound::PlaySound("suck2"); |
sound::PlaySound("swamped"); |
335 |
change_state(BUBBLING); |
change_state(BUBBLING); |
336 |
} |
} |
337 |
else { |
else { |
345 |
{ |
{ |
346 |
string kind=get_kind(); |
string kind=get_kind(); |
347 |
|
|
|
// enigma::Log << get_kind() << ": animcb(" << state<<endl; |
|
|
|
|
348 |
switch (state) { |
switch (state) { |
349 |
case SHATTERING: |
case SHATTERING: |
350 |
set_model(kind+"-shattered"); |
set_model(kind+"-shattered"); |
352 |
break; |
break; |
353 |
case DROWNING: |
case DROWNING: |
354 |
case BUBBLING: |
case BUBBLING: |
|
// sound::PlaySound("groan"); |
|
355 |
set_model("invisible"); |
set_model("invisible"); |
356 |
change_state(DEAD); |
change_state(DEAD); |
357 |
break; |
break; |