Мне бы луа для актора, суть такова:
Нужно что бы от актора был лазерный прицел, как у нановинтовки техионов, куда смотришь, там и прицел, желательно из головы а не из тела.
Экспериментальный код:
Код
dofile("Base.rte/Constants.lua")
require("Actors/AI/NativeHumanAI")
function Create(self)
self.AI = NativeHumanAI:Create(self);
self.laserTimer = Timer();
self.laserLength = 800;
self.laserSpaceCheck = 5; -- For optimization purposes. Smaller value means a more accurate but slower check.
self.laserDensity = math.ceil(self.laserLength/self.laserSpaceCheck);
end
function Update(self)
if self.laserTimer:IsPastSimMS(50) then
self.laserTimer:Reset();
if self:GetController():IsState(Controller.AIM_SHARP) and self:IsPlayerControlled() == true then
local roughLandPos = self.EyePos + Vector(self.laserLength,0):RadRotate(self):GetAimAngle(true);
for i = 0, self.laserDensity do
local checkPos = self.EyePos + Vector(self.laserSpaceCheck*i,0):GetAimAngle(true);
if SceneMan.SceneWrapsX == true then
if checkPos.X > SceneMan.SceneWidth then
checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y);
elseif checkPos.X < 0 then
checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y);
end
end
local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y);
if terrCheck == 0 then
local moCheck = SceneMan:GetMOIDPixel(checkPos.X,checkPos.Y);
if moCheck ~= rte.NoMOID and MovableMan:GetMOFromID(moCheck).Team ~= self.Team then
roughLandPos = checkPos;
break;
end
else
roughLandPos = checkPos;
break;
end
end
local checkRoughLandPos = roughLandPos + Vector(self.laserSpaceCheck*-1,0):RadRotate(self):GetAimAngle(true);
for i = 0, self.laserSpaceCheck do
local checkPos = checkRoughLandPos + Vector(i,0):GetAimAngle(true);
if SceneMan.SceneWrapsX == true then
if checkPos.X > SceneMan.SceneWidth then
checkPos = Vector(checkPos.X - SceneMan.SceneWidth,checkPos.Y);
elseif checkPos.X < 0 then
checkPos = Vector(SceneMan.SceneWidth + checkPos.X,checkPos.Y);
end
end
local terrCheck = SceneMan:GetTerrMatter(checkPos.X,checkPos.Y);
if terrCheck == 0 then
local moCheck = SceneMan:GetMOIDPixel(checkPos.X,checkPos.Y);
if moCheck ~= 255 then
break;
end
else
break;
end
roughLandPos = checkPos;
end
local laserPar = CreateMOPixel("Nanorifle Laser Sight Glow");
laserPar.Pos = roughLandPos;
MovableMan:AddParticle(laserPar);
end
end
end
function UpdateAI(self)
self.AI:Update(self)
end
Не работает. В консоле ошибка:
ERROR: no overload of 'Vector:RadRotate' matched the arguments (Vector, AHuman)
candidates are:
Vector:RadRotate(custom [float])
Мне это не о чем не говорит.