[[http://www.siedler-games.de|{{:sg-link.jpg|}}]] ==== Winkel zwischen zwei Punkten ==== [[http://www.siedler-portal.de/vb3/sendmessage.php?do=mailmember&u=2060|Robert]] Diese Funktion gibt den Winkel zwischen zwei Punkten an. Die Parameter (_Pos1,_Pos2) können sowohl Punkte, Entity_Name oder auch Entity_ID sein. Rückgabe ist der Winkel in Grad. Siehe Anwendungsbeispiel. function Winkel(_Pos1,_Pos2) local delta_X = 0; local delta_Y = 0; local alpha = 0 if type (_Pos1) == "string" or type (_Pos1) == "number" then _Pos1 = GetPosition(GetEntityId(_Pos1)); end if type (_Pos2) == "string" or type (_Pos2) == "number" then _Pos2 = GetPosition(GetEntityId(_Pos2)); end delta_X = _Pos1.X - _Pos2.X delta_Y = _Pos1.Y - _Pos2.Y if delta_X == 0 and delta_Y == 0 then -- Gleicher Punkt return 0 end alpha = math.deg(math.asin(math.abs(delta_X)/(math.sqrt(__pow(delta_X, 2)+__pow(delta_Y, 2))))) if delta_X >= 0 and delta_Y > 0 then alpha = 270 - alpha elseif delta_X < 0 and delta_Y > 0 then alpha = 270 + alpha elseif delta_X < 0 and delta_Y <= 0 then alpha = 90 - alpha elseif delta_X >= 0 and delta_Y <= 0 then alpha = 90 + alpha end return alpha end === Anwendungsbeispiel === Da Wasserfälle ja niemanden ansehen können ([[reference:LookAt]]), oder sich auch nicht drehen können ([[reference:RotateEntity]]), ich aber wollte, daß sie das tun, habe ich diese Funktion oben geschrieben. Einfach den Bauern in die Nähe des Wasserfalls bringen. Es gibt vielleicht auch sinnvolle Anwendungen dafür. -- dies hier in die FirstMapAction nBauer=CreateEntity (1,Entities.PU_Serf,{X=19000,Y=19000},"Bauer") nIDWasserfall=Logic.CreateEntity( Entities.XD_Waterfall4, 19500, 19500, 0, 1 ) for i = 1 ,10 do Logic.CreateEntity( Entities.XD_Waterfall4, 19500+i*40, 19500, 0, 1 ) end StartSimpleJob("Nassmachen") -- bis hier function Nassmachen() if IsNear("Bauer",nIDWasserfall,400) then DestroyEntity(nIDWasserfall) nIDWasserfall=Logic.CreateEntity( Entities.XD_Waterfall4, 19500, 19500, Winkel({X=19500, Y=19500},"Bauer")+90, 1 ) end end