(SubgameEntity ent, usercmd_t ucmd, GameExportsImpl gameExports)
| 1091 | */ |
| 1092 | |
| 1093 | static void ClientThink(SubgameEntity ent, usercmd_t ucmd, GameExportsImpl gameExports) { |
| 1094 | |
| 1095 | gameExports.level.current_entity = ent; |
| 1096 | gclient_t client = ent.getClient(); |
| 1097 | |
| 1098 | if (gameExports.level.intermissiontime != 0) { |
| 1099 | client.getPlayerState().pmove.pm_type = Defines.PM_FREEZE; |
| 1100 | // can exit intermission after five seconds |
| 1101 | if (gameExports.level.time > gameExports.level.intermissiontime + 5.0f |
| 1102 | && 0 != (ucmd.buttons & Defines.BUTTON_ANY)) |
| 1103 | gameExports.level.exitintermission = true; |
| 1104 | return; |
| 1105 | } |
| 1106 | |
| 1107 | gameExports.pm_passent = ent; |
| 1108 | |
| 1109 | SubgameEntity other; |
| 1110 | int i; |
| 1111 | if (client.chase_target != null) { |
| 1112 | |
| 1113 | client.resp.cmd_angles[0] = Math3D.SHORT2ANGLE(ucmd.angles[0]); |
| 1114 | client.resp.cmd_angles[1] = Math3D.SHORT2ANGLE(ucmd.angles[1]); |
| 1115 | client.resp.cmd_angles[2] = Math3D.SHORT2ANGLE(ucmd.angles[2]); |
| 1116 | |
| 1117 | } else { |
| 1118 | |
| 1119 | // set up for pmove |
| 1120 | pmove_t pm = new pmove_t(); |
| 1121 | |
| 1122 | if (ent.movetype == GameDefines.MOVETYPE_NOCLIP) |
| 1123 | client.getPlayerState().pmove.pm_type = Defines.PM_SPECTATOR; |
| 1124 | else if (ent.s.modelindex != 255) |
| 1125 | client.getPlayerState().pmove.pm_type = Defines.PM_GIB; |
| 1126 | else if (ent.deadflag != 0) |
| 1127 | client.getPlayerState().pmove.pm_type = Defines.PM_DEAD; |
| 1128 | else |
| 1129 | client.getPlayerState().pmove.pm_type = Defines.PM_NORMAL; |
| 1130 | |
| 1131 | client.getPlayerState().pmove.gravity = (short) gameExports.gameCvars.sv_gravity.value; |
| 1132 | pm.s.set(client.getPlayerState().pmove); |
| 1133 | |
| 1134 | for (i = 0; i < 3; i++) { |
| 1135 | pm.s.origin[i] = (short) (ent.s.origin[i] * 8); |
| 1136 | pm.s.velocity[i] = (short) (ent.velocity[i] * 8); |
| 1137 | } |
| 1138 | |
| 1139 | if (client.old_pmove.equals(pm.s)) { |
| 1140 | pm.snapinitial = true; |
| 1141 | // gi.dprintf ("pmove changed!\n"); |
| 1142 | } |
| 1143 | |
| 1144 | // this should be a copy |
| 1145 | pm.cmd.set(ucmd); |
| 1146 | |
| 1147 | // pmove doesn't need to know about passent and contentmask |
| 1148 | // adds default parms |
| 1149 | pm.trace = new pmove_t.TraceAdapter() { |
| 1150 |
no test coverage detected