Ejemplo n.º 1
0
bool Bipedal::FollowGround(Object & object, World & world, Sint8 velocity){
	if(velocity == 0 || currentplatformid == 0){
		return true;
	}
	object.x += velocity;
	Platform * currentplatform = world.map.platformids[currentplatformid];
	Platform * oldplatform = currentplatform;
	object.y = currentplatform->XtoY(object.x);
	if(object.x > currentplatform->x2){
		velocity = object.x - currentplatform->x2;
		object.x = currentplatform->x2;
		currentplatform = currentplatform->adjacentr;
	}else
	if(object.x < currentplatform->x1){
		velocity = -(Sint8)(currentplatform->x1 - object.x);
		object.x = currentplatform->x1;
		currentplatform = currentplatform->adjacentl;
	}else{
		return true;
	}
	if(currentplatform){
		currentplatformid = currentplatform->id;
		return FollowGround(object, world, velocity);
	}else{
		Platform * collided = world.map.TestAABB(object.x, object.y - height, object.x, object.y, Platform::RECTANGLE | Platform::STAIRSUP | Platform::STAIRSDOWN, oldplatform);
		if(collided){
			return true;
		}
		return false;
	}
	return true;
}
Ejemplo n.º 2
0
bool Bipedal::FindCurrentPlatform(Object & object, World & world){
	if(currentplatformid){
		return true;
	}
	int xv2 = 0;
	int yv2 = 1;
	Platform * platform = world.map.TestIncr(object.x, object.y - height, object.x, object.y, &xv2, &yv2, Platform::RECTANGLE | Platform::STAIRSUP | Platform::STAIRSDOWN);
	if(platform){
		currentplatformid = platform->id;
		object.y = platform->XtoY(object.x);
		return true;
	}
	return false;
}