Приветствую. Мне в руки попал небольшой кусок кода, но для меня очень проблемный, так как я почти полный нуль в Lua.
Нужно сделать так, чтобы объект(точка) двигалась только по оси X и никогда не меняла положение по Y(ну или вектор шел только по X) и убрать повороты по angle. Исправил все, что мог, но после определенного времени точка начинает двигаться по Y
Спасибо.
Нужно сделать так, чтобы объект(точка) двигалась только по оси X и никогда не меняла положение по Y(ну или вектор шел только по X) и убрать повороты по angle. Исправил все, что мог, но после определенного времени точка начинает двигаться по Y
Спасибо.
Код |
---|
local wall = math.random(1, 2) if wall == 1 then return vmath.vector3(math.random(-320, 320), 0, 0) else return vmath.vector3(math.random(-640, 640), 0, 0) end end function init(self) self.target_id = nil self.target_position = random_position_on_wall() end function update(self, dt) local pos = go.get_world_position() local target_angle = -math.atan(self.target_position.x - pos.x) local target_quat = vmath.quat_rotation_z(target_angle) local current_quat = go.get_rotation() local q = vmath.slerp(1, current_quat, target_quat) go.set_rotation(q) local d = vmath.rotate(q, vmath.vector3(0, 1, 0)) go.set_position(pos + d * self.speed * dt) if self.target_id then self.target_position = random_position_on_wall() end self.target_id = nil end function on_message(self, message_id, message, sender) if message_id == COLLISION_RESPONSE then if message.group == HITMAN then local my_pos = go.get_world_position() local other_pos = go.get_world_position(message.other_id) local distance_to_target = vmath.length(my_pos - self.target_position) local distance_to_collision = vmath.length(my_pos - other_pos) if distance_to_collision < distance_to_target or not self.target_id then self.target_position = other_pos self.target_id = message.other_id end end elseif message_id == CONTACT_POINT_RESPONSE then if message.group == WALL then go.set_position(go.get_position() + message.normal * message.distance) self.target_position = random_position_on_wall() end end end |