70 lines
2.0 KiB
Lua
70 lines
2.0 KiB
Lua
|
dofile_once("data/scripts/lib/utilities.lua")
|
||
|
|
||
|
local entity_id = GetUpdatedEntityID()
|
||
|
local boss_id = EntityGetRootEntity( entity_id )
|
||
|
local x, y = EntityGetTransform( boss_id )
|
||
|
local distance_full = 36
|
||
|
local ax,ay = 0
|
||
|
|
||
|
local projectiles = EntityGetInRadiusWithTag( x, y, distance_full, "projectile" )
|
||
|
|
||
|
local varcomps = EntityGetComponent( boss_id, "VariableStorageComponent" )
|
||
|
local players = EntityGetWithTag( "player_unit" )
|
||
|
local player_id = players[1] or nil
|
||
|
|
||
|
local state = 0
|
||
|
|
||
|
if ( varcomps ~= nil ) then
|
||
|
for i,v in ipairs( varcomps ) do
|
||
|
local n = ComponentGetValue2( v, "name" )
|
||
|
if ( n == "spell_eater" ) then
|
||
|
state = ComponentGetValue2( v, "value_int" )
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if ( state == 0 ) then
|
||
|
EntitySetComponentsWithTagEnabled( entity_id, "boss_robot_spell_eater", false )
|
||
|
else
|
||
|
EntitySetComponentsWithTagEnabled( entity_id, "boss_robot_spell_eater", true )
|
||
|
if ( player_id ~= nil ) then
|
||
|
local plx,ply = EntityGetTransform( player_id )
|
||
|
ax,ay = x - plx, y - ply
|
||
|
local a = math.pi - math.atan2( ay, ax )
|
||
|
|
||
|
EntitySetTransform( entity_id, x, y, 0 - a )
|
||
|
|
||
|
if ( #projectiles > 0 ) then
|
||
|
for i,projectile_id in ipairs(projectiles) do
|
||
|
local px, py = EntityGetTransform( projectile_id )
|
||
|
|
||
|
local distance = get_distance( px, py, x, y )
|
||
|
local direction = get_direction( px, py, x, y )
|
||
|
|
||
|
local dirdelta = get_direction_difference( direction, a )
|
||
|
local dirdelta_deg = math.abs( math.deg( dirdelta ) )
|
||
|
|
||
|
if ( distance < distance_full ) and ( dirdelta_deg < 82.0 ) then
|
||
|
local pcomp = EntityGetFirstComponent( projectile_id, "ProjectileComponent" )
|
||
|
local valid = true
|
||
|
|
||
|
if ( pcomp ~= nil ) then
|
||
|
local whoshot = ComponentGetValue2( pcomp, "mWhoShot" )
|
||
|
|
||
|
if ( whoshot == boss_id ) then
|
||
|
valid = false
|
||
|
else
|
||
|
ComponentSetValue2( pcomp, "on_death_explode", false )
|
||
|
ComponentSetValue2( pcomp, "on_lifetime_out_explode", false )
|
||
|
end
|
||
|
end
|
||
|
|
||
|
if valid then
|
||
|
EntityKill( projectile_id )
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|