forked from LeagueSharp/LeagueSharp.Common
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDash.cs
More file actions
102 lines (88 loc) · 3.87 KB
/
Dash.cs
File metadata and controls
102 lines (88 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#region LICENSE
/*
Copyright 2014 - 2014 LeagueSharp
Dash.cs is part of LeagueSharp.Common.
LeagueSharp.Common is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
LeagueSharp.Common is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with LeagueSharp.Common. If not, see <http://www.gnu.org/licenses/>.
*/
#endregion
#region
using System;
using System.Collections.Generic;
using System.Linq;
using SharpDX;
#endregion
namespace LeagueSharp.Common
{
public static class Dash
{
private static readonly Dictionary<int, DashItem> DetectedDashes = new Dictionary<int, DashItem>();
static Dash()
{
Obj_AI_Hero.OnNewPath += ObjAiHeroOnOnNewPath;
}
private static void ObjAiHeroOnOnNewPath(Obj_AI_Base sender, GameObjectNewPathEventArgs args)
{
if (sender.IsValid<Obj_AI_Hero>() && args.IsDash)
{
if (!DetectedDashes.ContainsKey(sender.NetworkId))
{
DetectedDashes.Add(sender.NetworkId, new DashItem());
}
var path = new List<Vector2> { sender.ServerPosition.To2D() };
path.AddRange(args.Path.ToList().To2D());
DetectedDashes[sender.NetworkId].StartTick = Utils.TickCount - Game.Ping / 2;
DetectedDashes[sender.NetworkId].Speed = args.Speed;
DetectedDashes[sender.NetworkId].StartPos = sender.ServerPosition.To2D();
DetectedDashes[sender.NetworkId].Unit = sender;
DetectedDashes[sender.NetworkId].Path = path;
DetectedDashes[sender.NetworkId].EndPos = DetectedDashes[sender.NetworkId].Path.Last();
DetectedDashes[sender.NetworkId].EndTick = DetectedDashes[sender.NetworkId].StartTick +
(int)
(1000 *
(DetectedDashes[sender.NetworkId].EndPos.Distance(
DetectedDashes[sender.NetworkId].StartPos) / DetectedDashes[sender.NetworkId].Speed));
DetectedDashes[sender.NetworkId].Duration = DetectedDashes[sender.NetworkId].EndTick - DetectedDashes[sender.NetworkId].StartTick;
CustomEvents.Unit.TriggerOnDash(DetectedDashes[sender.NetworkId].Unit, DetectedDashes[sender.NetworkId]);
}
}
/// <summary>
/// Returns true if the unit is dashing.
/// </summary>
public static bool IsDashing(this Obj_AI_Base unit)
{
if (DetectedDashes.ContainsKey(unit.NetworkId))
{
return DetectedDashes[unit.NetworkId].EndTick > Utils.TickCount;
}
return false;
}
/// <summary>
/// Gets the speed of the dashing unit if it is dashing.
/// </summary>
public static DashItem GetDashInfo(this Obj_AI_Base unit)
{
return DetectedDashes.ContainsKey(unit.NetworkId) ? DetectedDashes[unit.NetworkId] : new DashItem();
}
public class DashItem
{
public int Duration;
public Vector2 EndPos;
public int EndTick;
public List<Vector2> Path;
public float Speed;
public Vector2 StartPos;
public int StartTick;
public Obj_AI_Base Unit;
public bool IsBlink;
}
}
}