edit | blame | history | raw
local CONST     = require 'config.const'
local Suspicion = require 'systems.suspicion'
local Assassin  = require 'systems.assassination'
local Base      = require 'profession.base'

Base.register('shadow_blade', function(unit, ability)
    local facing = unit:get_facing()
    local pos    = unit:get_point()

    local rad    = math.rad(facing)
    local dx, dy = math.cos(rad) * 5, math.sin(rad) * 5
    local target_point = clicli.point.create(pos:get_x() + dx, pos:get_y() + dy)

    unit:blink(target_point)

    unit:add_state(CONST.STATE_INVISIBLE)
    unit:set_transparent_when_invisible(true)

    clicli.timer.wait(0.8, function()
        unit:remove_state(CONST.STATE_INVISIBLE)
    end)

    local dash_area = clicli.area.create_circle_area(target_point, 2.0)
    local units     = dash_area:get_all_unit_in_area()
    dash_area:remove()

    for _, u in ipairs(units) do
        if u ~= unit and u:is_alive() then
            unit:damage({
                target  = u,
                damage  = 105,
                type    = CONST.DAMAGE_TYPE_ASSASSINATE,
                no_miss = true,
            })
            if not u:is_alive() then
                Assassin.on_kill(unit, u)
            end
            break
        end
    end

    Suspicion.add(unit, 15)
end)

return Base