MCPcopy Create free account
hub / github.com/DFHack/dfhack / CopyProjectiles

Function CopyProjectiles

plugins/remotefortressreader/remotefortressreader.cpp:1157–1219  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1155}
1156
1157void CopyProjectiles(RemoteFortressReader::MapBlock * NetBlock)
1158{
1159 for (auto proj = world->projectiles.all.next; proj != NULL; proj = proj->next)
1160 {
1161 STRICT_VIRTUAL_CAST_VAR(projectile, df::proj_itemst, proj->item);
1162 if (projectile == NULL)
1163 continue;
1164 auto NetItem = NetBlock->add_items();
1165 CopyItem(NetItem, projectile->item);
1166 NetItem->set_projectile(true);
1167 if (projectile->flags.bits.parabolic)
1168 {
1169 NetItem->set_subpos_x(projectile->pos_x / 100000.0);
1170 NetItem->set_subpos_y(projectile->pos_y / 100000.0);
1171 NetItem->set_subpos_z(projectile->pos_z / 140000.0);
1172 NetItem->set_velocity_x(projectile->speed_x / 100000.0);
1173 NetItem->set_velocity_y(projectile->speed_y / 100000.0);
1174 NetItem->set_velocity_z(projectile->speed_z / 140000.0);
1175 }
1176 else
1177 {
1178 DFCoord diff = projectile->target_pos - projectile->origin_pos;
1179 float max_dist = max(max(abs(diff.x), abs(diff.y)), abs(diff.z));
1180 NetItem->set_subpos_x(projectile->origin_pos.x + (diff.x / max_dist * projectile->distance_flown) - projectile->cur_pos.x);
1181 NetItem->set_subpos_y(projectile->origin_pos.y + (diff.y / max_dist * projectile->distance_flown) - projectile->cur_pos.y);
1182 NetItem->set_subpos_z(projectile->origin_pos.z + (diff.z / max_dist * projectile->distance_flown) - projectile->cur_pos.z);
1183 NetItem->set_velocity_x(diff.x / max_dist);
1184 NetItem->set_velocity_y(diff.y / max_dist);
1185 NetItem->set_velocity_z(diff.z / max_dist);
1186 }
1187 }
1188 for (size_t i = 0; i < world->vehicles.active.size(); i++)
1189 {
1190 bool isProj = false;
1191 auto vehicle = world->vehicles.active[i];
1192 for (auto proj = world->projectiles.all.next; proj != NULL; proj = proj->next)
1193 {
1194 STRICT_VIRTUAL_CAST_VAR(projectile, df::proj_itemst, proj->item);
1195 if (!projectile)
1196 continue;
1197 if (projectile->item->id == vehicle->item_id)
1198 {
1199 isProj = true;
1200 break;
1201 }
1202 }
1203 if (isProj)
1204 continue;
1205
1206 auto item = Items::findItemByID(vehicle->item_id);
1207 if (!item)
1208 continue;
1209 auto NetItem = NetBlock->add_items();
1210 CopyItem(NetItem, item);
1211 NetItem->set_subpos_x(vehicle->offset_x / 100000.0);
1212 NetItem->set_subpos_y(vehicle->offset_y / 100000.0);
1213 NetItem->set_subpos_z(vehicle->offset_z / 140000.0);
1214 NetItem->set_velocity_x(vehicle->speed_x / 100000.0);

Callers 1

GetBlockListFunction · 0.85

Calls 2

CopyItemFunction · 0.85
sizeMethod · 0.45

Tested by

no test coverage detected