-
Notifications
You must be signed in to change notification settings - Fork 17
/
Copy pathsurvivIoAim.js
103 lines (82 loc) · 2.96 KB
/
survivIoAim.js
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
103
var detectEnemies = function() {
var result = [];
if(!game.playerBarn.playerInfo[game.activeId]) return result;
var selfTeamId = game.playerBarn.playerInfo[game.activeId].teamId;
var selfId = game.activeId;
var objectIds = Object.keys(game.objectCreator.idToObj);
var playerIds = Object.keys(game.playerBarn.playerInfo);
for(var i = 0; i < playerIds.length; i++) {
if( game.objectCreator.idToObj[playerIds[i]] &&
(!game.objectCreator.idToObj[playerIds[i]].netData.dead) &&
game.playerBarn.playerInfo[playerIds[i]].teamId != selfTeamId) {
if(playerIds[i] != selfId) {
result.push(game.objectCreator.idToObj[playerIds[i]]);
}
}
}
return result;
}
var getSelfPos = function() {
if(game.activePlayer) {
return game.activePlayer.pos
} else {
return false;
}
}
var calculateRadianAngle = function(cx, cy, ex, ey) {
var dy = ey - cy;
var dx = ex - cx;
var theta = Math.atan2(dy, dx); // range (-PI, PI]
// theta *= 180 / Math.PI; // rads to degs, range (-180, 180]
// if (theta < 0) theta = 360 + theta; // range [0, 360)
return theta;
}
var getMinimalDistanceIndex = function(enemyDistances) {
return enemyDistances.indexOf(Math.min.apply(null, enemyDistances));
}
var iterate = function() {
var enemyDistances = [];
var enemyRadianAngles = [];
var enemies = detectEnemies();
var selfPos = getSelfPos();
if(!selfPos) return;
for(var i = 0; i < enemies.length; i++) {
var enemyPos = enemies[i].pos;
var distance = Math.sqrt(Math.pow(Math.abs(selfPos.x - enemyPos.x), 2) + Math.pow(Math.abs(selfPos.y - enemyPos.y), 2));
var radianAngle = calculateRadianAngle(selfPos.x, selfPos.y, enemyPos.x, enemyPos.y);
enemyDistances.push(distance);
enemyRadianAngles.push(radianAngle);
}
var minimalDistanceIndex = getMinimalDistanceIndex(enemyDistances);
// Delete self distance index
// enemyDistances.splice(minimalDistanceIndex, 1);
// enemyRadianAngles.splice(minimalDistanceIndex, 1);
var minimalDistanceIndex = getMinimalDistanceIndex(enemyDistances);
var minimalDistance = enemyDistances[minimalDistanceIndex];
var minimalDistanceRadianAngle = enemyRadianAngles[minimalDistanceIndex];
var halfScreenWidth = game.camera.screenWidth/2;
var halfScreenHeight = game.camera.screenHeight/2;
var minScreenCircleRadius = halfScreenHeight > halfScreenWidth ? halfScreenWidth : halfScreenHeight;
minScreenCircleRadius = Math.floor(minScreenCircleRadius - 1);
var targetMousePosition = {};
targetMousePosition.x = halfScreenWidth + minScreenCircleRadius * Math.cos(minimalDistanceRadianAngle);
targetMousePosition.y = halfScreenHeight - minScreenCircleRadius * Math.sin(minimalDistanceRadianAngle);
if(targetMousePosition.x && targetMousePosition.y) {
game.input.mousePos = {
x: targetMousePosition.x,
y: targetMousePosition.y,
}
}
}
var timer = {};
function ticker() {
iterate();
timer = setTimeout(ticker, 30);
}
function reload() {
if(timer) clearTimeout(timer);
ticker();
}
function stop() {
if(timer) clearTimeout(timer);
}