| 1053 | } |
| 1054 | |
| 1055 | static void zPlatform_Tremble(zPlatform* plat, F32 ampl, F32 freq, F32 dur) |
| 1056 | { |
| 1057 | xFFXShakeState* ss; |
| 1058 | xFFX* sfkt; |
| 1059 | xParEmitterCustomSettings info; |
| 1060 | S32 i; |
| 1061 | |
| 1062 | ss = xFFXShakeAlloc(); |
| 1063 | if (ss != NULL) |
| 1064 | { |
| 1065 | sfkt = xFFXAlloc(); |
| 1066 | if (sfkt == NULL) |
| 1067 | { |
| 1068 | xFFXShakeFree(ss); |
| 1069 | return; |
| 1070 | } |
| 1071 | |
| 1072 | xVec3SMul(&ss->disp, (xVec3*)&globals.camera.mat, ampl); |
| 1073 | ss->dur = dur; |
| 1074 | ss->alpha = 1.0f / dur; |
| 1075 | ss->freq = freq; |
| 1076 | ss->tmr = 0.0f; |
| 1077 | sfkt->doEffect = xFFXShakeUpdateEnt; |
| 1078 | sfkt->fdata = ss; |
| 1079 | xFFXAddEffect(plat, sfkt); |
| 1080 | } |
| 1081 | |
| 1082 | if (sEmitTremble != NULL) |
| 1083 | { |
| 1084 | info.custom_flags = 0x100; |
| 1085 | info.pos = *xEntGetCenter(plat); |
| 1086 | for (i = 0; i < 25; i++) |
| 1087 | { |
| 1088 | // Emit a particle at every 30 frames? |
| 1089 | xParEmitterEmitCustom(sEmitTremble, 1.0f / 30, &info); |
| 1090 | } |
| 1091 | } |
| 1092 | } |
| 1093 | |
| 1094 | void zPlatform_BreakawayFallFX(zPlatform* ent, F32 dt) |
| 1095 | { |
no test coverage detected