/* virtual */ void CAnimation_SetPlayerVar::Action(CUnit &unit, int &/*move*/, int /*scale*/) const { Assert(unit.Anim.Anim == this); const char *var = this->varStr.c_str(); const char *arg = this->argStr.c_str(); const int playerId = ParseAnimInt(unit, this->playerStr.c_str()); int rop = ParseAnimInt(unit, this->valueStr.c_str()); int data = GetPlayerData(playerId, var, arg); switch (this->mod) { case modAdd: data += rop; break; case modSub: data -= rop; break; case modMul: data *= rop; break; case modDiv: if (!rop) { fprintf(stderr, "Division by zero in AnimationSetPlayerVar\n"); Exit(1); } data /= rop; break; case modMod: if (!rop) { fprintf(stderr, "Division by zero in AnimationSetPlayerVar\n"); Exit(1); } data %= rop; break; case modAnd: data &= rop; break; case modOr: data |= rop; break; case modXor: data ^= rop; break; case modNot: data = !data; break; default: data = rop; } rop = data; SetPlayerData(playerId, var, arg, rop); }
/* virtual */ void CAnimation_SetPlayerVar::Action(CUnit &unit, int &/*move*/, int /*scale*/) const { Assert(unit.Anim.Anim == this); const char *var = this->varStr.c_str(); const char *arg = this->argStr.c_str(); const int playerId = ParseAnimInt(&unit, this->playerStr.c_str()); int rop = ParseAnimInt(&unit, this->valueStr.c_str()); int data = GetPlayerData(playerId, var, arg); switch (this->mod) { case MOD_ADD: data += rop; break; case MOD_SUB: data -= rop; break; case MOD_MUL: data *= rop; break; case MOD_DIV: if (!rop) { fprintf(stderr, "Division by zero in AnimationSetPlayerVar\n"); Exit(1); } data /= rop; break; case MOD_MOD: if (!rop) { fprintf(stderr, "Division by zero in AnimationSetPlayerVar\n"); Exit(1); } data %= rop; break; default: data = rop; } rop = data; SetPlayerData(playerId, var, arg, rop); }