Consistency/data/entities/animals/boss_robot/spell_eater.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