Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub unsafe fn start_building_hook(
- builder: *mut bw::Unit,
- orig: &Fn(*mut bw::Unit)->u32,
- ) -> u32 {
- let result = orig(builder);
- let builder = match Unit::from_ptr(builder) {
- Some(s) => s,
- None => return result,
- };
- let game = Game::get();
- let globals = Globals::get("start building hook");
- let unit_search = UnitSearch::from_bw();
- let assume_pushing_units = globals.ai_mode[builder.player() as usize].move_from_baselayout;
- if builder.player()>=8 {
- return orig(builder);
- }
- if assume_pushing_units {
- let ok = check_placement(game, &unit_search, builder,
- ((*builder.0).order_target_pos.x as i16)/32,
- ((*builder.0).order_target_pos.y as i16)/32,
- builder.id(),
- assume_pushing_units,
- (*builder.0).order_target_pos);
- let area = bw::Rect {
- left: (builder.position().x).saturating_sub(32),
- top: (builder.position().y).saturating_sub(32),
- right: (builder.position().x) + (builder.id().placement().width as i16 / 2).saturating_add(32),
- bottom: (builder.position().y) + (builder.id().placement().height as i16 / 2).saturating_add(32),
- };
- let units = unit_search
- .search_iter(&area)
- .filter(|u| u.burrowed() && *u!=builder);
- for unit in units {
- bw::unburrow(unit.0);
- }
- if ok
- {
- return 1;
- }
- }
- result
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement