# Prediction

# 说明

Prediction命名空间提供了技能预判功能,可以预测敌方英雄的位置,以便精准命中技能。

# 如何使用

// 基本预测用法
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    PredictionOutput pred = Prediction::GetPrediction(target, 0.25f, 80.0f, 1600.0f);
    if (pred.Hitchance >= eHitChance::High) {
        // 使用预测位置释放技能
        Vector castPos = pred.CastPosition();
        // 施放技能...
    }
}

// 使用自定义预测输入
PredictionInput input;
input.Unit = target;
input.Delay = 0.25f;
input.Radius = 80.0f;
input.Speed = 1600.0f;
input.Type = eSkillshotType::SkillshotLine;
input.Collision = true;
input.CollisionObjects = { eCollisionableObjects::Minions, eCollisionableObjects::YasuoWall };

PredictionOutput pred = Prediction::GetPrediction(input);

# GetPrediction

PredictionOutput GetPrediction(AIBaseClient* unit, float delay)

获取目标的位置预测,只考虑延迟。

参数名 参数类型 描述
unit AIBaseClient* 目标单位
delay float 技能释放延迟(秒)
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    PredictionOutput pred = Prediction::GetPrediction(target, 0.25f);
    if (pred.Hitchance >= eHitChance::High) {
        // 使用预测位置释放技能
    }
}

# GetPrediction

PredictionOutput GetPrediction(AIBaseClient* unit, float delay, float radius)

获取目标的位置预测,考虑延迟和技能半径。

参数名 参数类型 描述
unit AIBaseClient* 目标单位
delay float 技能释放延迟(秒)
radius float 技能半径
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    PredictionOutput pred = Prediction::GetPrediction(target, 0.25f, 80.0f);
    if (pred.Hitchance >= eHitChance::High) {
        // 使用预测位置释放技能
    }
}

# GetPrediction

PredictionOutput GetPrediction(AIBaseClient* unit, float delay, float radius, float speed)

获取目标的位置预测,考虑延迟、技能半径和速度。

参数名 参数类型 描述
unit AIBaseClient* 目标单位
delay float 技能释放延迟(秒)
radius float 技能半径
speed float 技能飞行速度
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    PredictionOutput pred = Prediction::GetPrediction(target, 0.25f, 80.0f, 1600.0f);
    if (pred.Hitchance >= eHitChance::High) {
        // 使用预测位置释放技能
    }
}

# GetPrediction

PredictionOutput GetPrediction(AIBaseClient* unit, float delay, float radius, float speed, std::vector<eCollisionableObjects> const& collisionable)

获取目标的位置预测,考虑延迟、技能半径、速度和碰撞检测。

参数名 参数类型 描述
unit AIBaseClient* 目标单位
delay float 技能释放延迟(秒)
radius float 技能半径
speed float 技能飞行速度
collisionable std::vector const& 碰撞检测对象
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    std::vector<eCollisionableObjects> collisionObjects = { eCollisionableObjects::Minions, eCollisionableObjects::YasuoWall };
    PredictionOutput pred = Prediction::GetPrediction(target, 0.25f, 80.0f, 1600.0f, collisionObjects);
    if (pred.Hitchance >= eHitChance::High && pred.CollisionObjects.empty()) {
        // 使用预测位置释放技能,且没有碰撞
    }
}

# GetPrediction

PredictionOutput GetPrediction(PredictionInput const& input)

使用自定义的PredictionInput获取目标的位置预测。

参数名 参数类型 描述
input PredictionInput const& 预测输入参数
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target) {
    PredictionInput input;
    input.Unit = target;
    input.Delay = 0.25f;
    input.Radius = 80.0f;
    input.Speed = 1600.0f;
    input.Type = eSkillshotType::SkillshotLine;
    input.Collision = true;
    input.CollisionObjects = { eCollisionableObjects::Minions, eCollisionableObjects::YasuoWall };
    
    PredictionOutput pred = Prediction::GetPrediction(input);
    if (pred.Hitchance >= eHitChance::High && pred.CollisionObjects.empty()) {
        // 使用预测位置释放技能,且没有碰撞
    }
}

# 类:PredictionInput

预测功能的输入参数类。

// 创建预测输入对象
PredictionInput input;
input.Unit = target;
input.Delay = 0.25f;
input.Radius = 80.0f;
input.Speed = 1600.0f;
input.Type = eSkillshotType::SkillshotLine;

# PredictionInput.AddHitBox

是否考虑目标的碰撞体积。

input.AddHitBox = true; // 考虑目标的碰撞体积

# PredictionInput.Aoe

预测是否为范围技能。

input.Aoe = true; // 设置为范围技能

# PredictionInput.Collision

预测是否需要进行碰撞检测。

input.Collision = true; // 开启碰撞检测

# PredictionInput.CollisionObjects

预测时要检测的碰撞对象列表。

input.CollisionObjects = { eCollisionableObjects::Minions, eCollisionableObjects::YasuoWall };

# PredictionInput.Delay

技能释放延迟(秒)。

input.Delay = 0.25f; // 设置技能延迟为0.25秒

# PredictionInput.From

Vector From() const

获取技能释放位置。

Vector castPosition = input.From();

# PredictionInput.From_Set

void From_Set(Vector const& value)

设置技能释放位置。

参数名 参数类型 描述
value Vector const& 释放位置
Vector myPosition = ObjectManager::Player()->ServerPosition();
input.From_Set(myPosition);

# PredictionInput.Radius

技能半径。

input.Radius = 80.0f; // 设置技能半径为80单位

# PredictionInput.Range

技能最大射程。

input.Range = 900.0f; // 设置技能射程为900单位

# PredictionInput.RangeCheckFrom

Vector RangeCheckFrom() const

获取技能射程检测起点。

Vector rangeCheckPos = input.RangeCheckFrom();

# PredictionInput.RangeCheckFrom_Set

void RangeCheckFrom_Set(Vector const& value)

设置技能射程检测起点。

参数名 参数类型 描述
value Vector const& 检测起点
Vector myPosition = ObjectManager::Player()->ServerPosition();
input.RangeCheckFrom_Set(myPosition);

# PredictionInput.RealRadius

float RealRadius() const

获取考虑了目标碰撞体积后的实际技能半径。

float actualRadius = input.RealRadius();

# PredictionInput.Speed

技能飞行速度。

input.Speed = 1600.0f; // 设置技能速度为1600单位/秒

# PredictionInput.Type

技能类型。

input.Type = eSkillshotType::SkillshotLine; // 设置为直线技能

# PredictionInput.Unit

预测的目标单位。

input.Unit = target; // 设置预测目标

# 类:PredictionOutput

预测功能的输出结果类。

// 获取预测结果
PredictionOutput output = Prediction::GetPrediction(input);
// 使用预测结果
if (output.Hitchance >= eHitChance::High) {
    // 使用预测位置
}

# PredictionOutput.AoeTargetsHit

预测的范围技能可能命中的目标列表。

std::vector<AIBaseClient*> hitTargets = output.AoeTargetsHit;

# PredictionOutput.AoeTargetsHitCount

int AoeTargetsHitCount() const

获取范围技能可能命中的目标数量。

int hitCount = output.AoeTargetsHitCount();
if (hitCount >= 3) {
    // 可能命中3个或更多目标,值得释放技能
}

# PredictionOutput.CastPosition

Vector CastPosition() const

获取建议的技能释放位置。

Vector castPos = output.CastPosition();

# PredictionOutput.CastPosition_Set

void CastPosition_Set(Vector const& value)

设置建议的技能释放位置。

参数名 参数类型 描述
value Vector const& 释放位置
Vector bestPosition = Vector(1000.0f, 500.0f, 0.0f);
output.CastPosition_Set(bestPosition);

# PredictionOutput.CollisionObjects

预测技能路径上的碰撞对象列表。

if (output.CollisionObjects.empty()) {
    // 没有碰撞,可以释放技能
}

# PredictionOutput.Hitchance

预测的命中几率。

if (output.Hitchance >= eHitChance::High) {
    // 命中几率高,可以释放技能
}

# PredictionOutput.Input

用于生成此预测结果的输入参数。

PredictionInput originalInput = output.Input;

# PredictionOutput.UnitPosition

Vector UnitPosition() const

获取预测的目标单位位置。

Vector predictedPos = output.UnitPosition();

# PredictionOutput.UnitPosition_Set

void UnitPosition_Set(Vector const& value)

设置预测的目标单位位置。

参数名 参数类型 描述
value Vector const& 单位位置
Vector predictedPosition = Vector(1000.0f, 500.0f, 0.0f);
output.UnitPosition_Set(predictedPosition);