Перейти к контенту

Прозекторская


Рекомендуемые сообщения

Пост к вот этому: http://www.amk-team.ru/forum/index.php?showtopic=13078&p=893616

просто слегка перекидываю кой-чего кое-куда. dc

 

Странный стиль программирования, т.е. форматирования, моск слегка зависает когда видишь несколько end-ов в одной строке.

В общем, жизнь показала что алгоритм удара, в оригинальном скрипте в принципе инвалидный и глючный, заменил своим из скрипта "гранаты с УДЗ", работает без ошибок и быстрей.

 

 

 

 

function track_item(delta)
	local item = thrown_id and lobj_by_id( thrown_id )
	local pos, ps
	if item then
		pos = item:position()
		-- if check_on_level( pos ) then
		if level.get_bounding_volume().min.y < pos.y then 
			ps = item:get_physics_shell()
		else
			local obj = sim:object( thrown_id )	-- улетел за пределы уровня, удаляем
			if obj then sim:release( obj, true ) end
		end	
	end

	if ps and ( thrown_upd >= global_time_ms ) then
		-- v_lin, v_ang = vector(), vector()	-- странное и загадочное, но иначе не работает
		ps:get_linear_vel(v_lin)
		if not lv_lin or (throw_time and time_global() < throw_time + 200) then	-- предохранитель
			lv_lin = vector():set(v_lin)	--, vector():set( v_ang )
			return
		end
		-- ловим ускорения (отрицательное)
		local vel = vector()
		vel.x = v_lin.x - lv_lin.x
		vel.y = v_lin.y - lv_lin.y
		vel.z = v_lin.z - lv_lin.z -- так быстрей
		local acc = vel:magnitude()/(delta * 0.001)
		--log("скорость предмета-("..lvel_mag..")ускорение-("..acc..")ID-("..id..")time-("..time_global()..")")
		if acc > udar  then -- основной показатель удара - динамическое ускорение (торможение) 
			local sect = item:section()
			if string_find( sect, "explosive" ) then 
				item:explode()
			elseif t_af[sect] then 
				af_activate( sect, thrown_id )
			end
			-- все, упали
		else
			lv_lin:set( v_lin )--; lv_ang:set( v_ang )
			return	-- продолжаем лететь
		end	
	end
	thrown_id, thrown_upd = false, 0
	lv_lin = false
end

 

Главное можно силу удара регулировать, а то ветка, и арт или СВУ срабатывают, так же если в верх выстрелить, то в верхней точки так же иногда срабатывает. Странно что кираг с маландринусом до такого просто алгоритма не додумались.

Ах да, там не сколько не обычное вычисление разницы векторов, странно но так гораздо быстрей, ну их в болото со своей векторной арифметикой.

https://yadi.sk/d/XBIXdIv6eDTNo

 

Не бага, а фича. Они изменение траектории ловят. Но, да, наверное, не нужно.

Форматирование - так выделяется "законченный" блок. Когда часто пользуешься - удобнее.

 

P.S. комментарии перенес прямо в этот пост, для компактности. dc

Изменено пользователем Dennis_Chikin
  • Спасибо 1
  • Полезно 1

...в конце концов, важен лишь, машинный код.

СТАЛКЕР только для ПК!

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...