[4080] | 1 | -- Get objects from orxonox |
---|
| 2 | thisscript:addObject("GenericNPC","guard") |
---|
| 3 | thisscript:addObject("FPSPlayer", "Player") |
---|
| 4 | |
---|
[3945] | 5 | -- Global Variables |
---|
[3947] | 6 | walkingRouteOne = true -- True if thestranger is walking route one |
---|
[3945] | 7 | exitPositionReached = false |
---|
| 8 | playerInLock = false |
---|
| 9 | hangarReached = false |
---|
[4080] | 10 | guardStopped = false |
---|
[3945] | 11 | |
---|
[4080] | 12 | height = 34 |
---|
[3962] | 13 | |
---|
[3946] | 14 | -- Returns the distance between (x1,x2,x3) and (y1,y2,y3) |
---|
| 15 | function dist( x1,x2,x3, y1,y2,y3 ) |
---|
| 16 | return math.sqrt( (x1-y1)^2 + (x2-y2)^2 + (x3-y3)^2 ) |
---|
| 17 | end |
---|
| 18 | |
---|
[3945] | 19 | |
---|
[3946] | 20 | function observePlayer() |
---|
[4080] | 21 | |
---|
| 22 | guardX = guard:getAbsCoorX() |
---|
| 23 | guardY = guard:getAbsCoorY() |
---|
| 24 | guardZ = guard:getAbsCoorZ() |
---|
| 25 | |
---|
[3946] | 26 | playerX = Player:getAbsCoorX() |
---|
| 27 | playerY = Player:getAbsCoorY() |
---|
| 28 | playerZ = Player:getAbsCoorZ() |
---|
| 29 | |
---|
[4080] | 30 | |
---|
| 31 | distance = dist( guardX,guardY,guardZ,playerX, playerY, playerZ) |
---|
| 32 | |
---|
| 33 | if distance > 250 and hangarRouteProgrammed and not guardStopped then |
---|
| 34 | guard:stop() |
---|
| 35 | guardStopped = true |
---|
| 36 | end |
---|
| 37 | |
---|
| 38 | if distance < 250 and hangarRouteProgrammed and guardStopped then |
---|
| 39 | guard:resume() |
---|
| 40 | guardStopped = false |
---|
| 41 | end |
---|
| 42 | |
---|
| 43 | if dist( playerX,playerY,playerZ,167.361526,29,483.163818 ) < 200 then |
---|
[3947] | 44 | playerInLock = true |
---|
[3945] | 45 | end |
---|
| 46 | |
---|
[3947] | 47 | end |
---|
| 48 | |
---|
| 49 | routeOneProgrammed = false |
---|
[3945] | 50 | function walkRouteOne(timestep) |
---|
| 51 | |
---|
[3947] | 52 | if not routeOneProgrammed then |
---|
[3964] | 53 | guard:walkTo( 266.396362, height, 241.398544) |
---|
| 54 | guard:walkTo( 254.577255, height, 241.159897) |
---|
| 55 | guard:walkTo( 221.120651, height, 240.484360) |
---|
| 56 | guard:walkTo( 187.732651, height, 239.810196) |
---|
| 57 | guard:walkTo( 165.661865, height, 239.364563) |
---|
| 58 | guard:walkTo( 148.642044, height, 239.020889) |
---|
| 59 | guard:walkTo( 128.012802, height, 238.604340) |
---|
| 60 | guard:walkTo( 65.664688, height, 237.345383) |
---|
| 61 | guard:walkTo( 30.099592, height, 236.627243) |
---|
| 62 | guard:walkTo( -14.031926, height, 236.483414) |
---|
| 63 | guard:walkTo( -52.224205, height, 241.776978) |
---|
| 64 | guard:walkTo( -83.528168, height, 245.757629) |
---|
| 65 | guard:walkTo( -98.730980, height, 247.394043) |
---|
| 66 | guard:walkTo( -111.666504, height, 246.585648) |
---|
| 67 | guard:walkTo( -111.666504, height, 246.585648) |
---|
| 68 | guard:walkTo( -114.805542, height, 246.144440) |
---|
| 69 | guard:walkTo( -119.267967, height, 245.360168) |
---|
| 70 | guard:walkTo( -138.284515, height, 239.281021) |
---|
| 71 | guard:walkTo( -146.166840, height, 234.512054) |
---|
| 72 | guard:walkTo( -157.210480, height, 222.620941) |
---|
| 73 | guard:walkTo( -158.519867, height, 219.674301) |
---|
| 74 | guard:walkTo( -158.519867, height, 219.674301) |
---|
| 75 | guard:walkTo( -158.478958, height, 213.490570) |
---|
| 76 | guard:walkTo( -158.478958, height, 213.490570) |
---|
| 77 | guard:walkTo( -155.965332, height, 210.303101) |
---|
| 78 | guard:walkTo( -150.804489, height, 203.959869) |
---|
| 79 | guard:walkTo( -148.853012, height, 201.561295) |
---|
| 80 | guard:walkTo( -145.451157, height, 197.554382) |
---|
| 81 | guard:walkTo( -143.694107, height, 196.373535) |
---|
| 82 | guard:walkTo( -139.281479, height, 193.407990) |
---|
| 83 | guard:walkTo( -137.526047, height, 192.228226) |
---|
| 84 | guard:walkTo( -103.046753, height, 182.510071) |
---|
[3965] | 85 | guard:runTo( -14.992087, height, 181.910767) |
---|
| 86 | guard:runTo( 46.347664, height, 181.493317) |
---|
| 87 | guard:runTo( 86.343376, height, 181.221130) |
---|
| 88 | guard:runTo( 124.465179, height, 194.251617) |
---|
| 89 | guard:runTo( 136.548996, height, 219.682953) |
---|
| 90 | guard:runTo( 145.162140, height, 244.268982) |
---|
| 91 | guard:runTo( 149.328720, height, 256.993256) |
---|
| 92 | guard:runTo( 162.649582, height, 268.181732) |
---|
[3951] | 93 | |
---|
[3947] | 94 | routeOneProgrammed = true |
---|
| 95 | end |
---|
[3945] | 96 | |
---|
[3951] | 97 | if guard:finalGoalReached() then |
---|
| 98 | return false |
---|
[3945] | 99 | end |
---|
| 100 | |
---|
[3951] | 101 | return true |
---|
| 102 | end |
---|
| 103 | |
---|
| 104 | |
---|
| 105 | exitRouteProgrammed = false |
---|
[3945] | 106 | function goToExitPosition(timestep) |
---|
| 107 | |
---|
[3951] | 108 | if not exitRouteProgrammed then |
---|
[4080] | 109 | --guard:runTo( 162.096558, height, 274.944366) |
---|
| 110 | --guard:runTo( 161.519516, height, 286.673370) |
---|
| 111 | --guard:runTo( 161.098618, height, 295.228699) |
---|
| 112 | --guard:runTo( 160.568466, height, 306.004486) |
---|
| 113 | guard:runTo( 160.151169, height, 314.486572) |
---|
| 114 | guard:runTo( 159.416641, height, 324.925232) |
---|
[3962] | 115 | guard:walkTo( 158.700073, height, 335.108154) |
---|
| 116 | guard:walkTo( 157.943298, height, 345.862610) |
---|
| 117 | guard:walkTo( 157.418381, height, 356.131256) |
---|
| 118 | guard:walkTo( 156.908035, height, 366.115417) |
---|
| 119 | guard:walkTo( 156.940308, height, 377.467712) |
---|
| 120 | guard:walkTo( 156.965408, height, 386.287933) |
---|
| 121 | guard:walkTo( 156.924698, height, 394.296417) |
---|
| 122 | guard:walkTo( 156.816116, height, 401.564911) |
---|
| 123 | guard:walkTo( 156.147583, height, 446.314850) |
---|
| 124 | guard:walkTo( 155.145660, height, 515.473877) |
---|
| 125 | guard:walkTo( 148.450058, height, 524.572571) |
---|
| 126 | guard:walkTo( 135.599609, height, 533.407166) |
---|
| 127 | guard:walkTo( 119.772217, height, 539.609192) |
---|
| 128 | guard:walkTo( 108.926720, height, 537.174927) |
---|
| 129 | guard:walkTo( 100.885788, height, 524.737793) |
---|
| 130 | guard:walkTo( 99.870834, height, 512.540100) |
---|
| 131 | guard:walkTo( 108.219215, height, 502.064178) |
---|
| 132 | |
---|
[3951] | 133 | exitRouteProgrammed = true |
---|
| 134 | end |
---|
| 135 | |
---|
| 136 | if guard:finalGoalReached() and playerInLock then |
---|
| 137 | return true |
---|
| 138 | end |
---|
| 139 | |
---|
[3945] | 140 | return false |
---|
| 141 | end |
---|
| 142 | |
---|
| 143 | |
---|
[3951] | 144 | hangarRouteProgrammed = false |
---|
[3945] | 145 | function goToHangar(timestep) |
---|
| 146 | |
---|
[3964] | 147 | if not hangarRouteProgrammed and playerInLock then |
---|
[4080] | 148 | |
---|
| 149 | guard:walkTo( 133.354797, height, 504.669128) |
---|
| 150 | guard:walkTo( 147.490158, height, 507.034393) |
---|
| 151 | guard:walkTo( 157.640610, height, 508.901001) |
---|
| 152 | guard:walkTo( 168.830688, height, 510.958710) |
---|
| 153 | guard:walkTo( 185.020630, height, 512.736206) |
---|
| 154 | guard:walkTo( 201.232452, height, 513.413818) |
---|
| 155 | guard:walkTo( 265.666138, height, 513.736023) |
---|
| 156 | guard:walkTo( 362.377960, height, 515.575806) |
---|
| 157 | guard:walkTo( 426.176392, height, 515.666748) |
---|
| 158 | guard:walkTo( 500.031677, height, 515.197266) |
---|
| 159 | guard:walkTo( 551.294250, height, 514.430237) |
---|
| 160 | guard:walkTo( 604.974731, height, 515.106323) |
---|
| 161 | guard:walkTo( 651.117920, height, 516.026550) |
---|
| 162 | guard:walkTo( 664.581909, height, 516.295227) |
---|
| 163 | guard:walkTo( 683.122803, height, 516.665100) |
---|
| 164 | guard:walkTo( 694.547485, height, 516.892944) |
---|
| 165 | guard:walkTo( 704.408569, height, 517.089539) |
---|
| 166 | guard:walkTo( 714.413208, height, 517.289185) |
---|
| 167 | guard:walkTo( 739.045288, height, 515.581970) |
---|
| 168 | guard:walkTo( 763.904541, height, 497.281738) |
---|
| 169 | guard:walkTo( 767.672791, height, 481.974457) |
---|
| 170 | guard:walkTo( 769.436951, height, 468.704559) |
---|
| 171 | guard:walkTo( 770.490967, height, 453.283386) |
---|
| 172 | guard:walkTo( 771.185303, height, 435.960114) |
---|
| 173 | guard:walkTo( 771.952820, height, 379.502045) |
---|
| 174 | guard:walkTo( 771.938293, height, 310.049042) |
---|
| 175 | guard:walkTo( 772.514526, height, 231.579498) |
---|
| 176 | guard:walkTo( 773.601074, height, 135.177933) |
---|
| 177 | guard:walkTo( 773.790771, height, 50.675163) |
---|
| 178 | guard:walkTo( 773.316162, height, -36.961666) |
---|
| 179 | guard:walkTo( 772.885986, height, -116.407944) |
---|
| 180 | guard:walkTo( 772.841309, height, -124.651726) |
---|
| 181 | guard:walkTo( 772.491333, height, -137.742279) |
---|
| 182 | guard:walkTo( 770.644775, height, -153.245926) |
---|
| 183 | guard:walkTo( 768.774414, height, -163.767120) |
---|
| 184 | guard:walkTo( 766.336426, height, -174.224228) |
---|
| 185 | guard:walkTo( 762.794128, height, -187.312271) |
---|
| 186 | guard:walkTo( 733.548279, height, -274.004791) |
---|
| 187 | guard:walkTo( 713.113647, height, -329.657959) |
---|
| 188 | guard:walkTo( 694.801819, height, -379.530243) |
---|
| 189 | guard:walkTo( 681.276062, height, -422.047028) |
---|
| 190 | guard:walkTo( 672.579102, height, -458.540985) |
---|
| 191 | guard:walkTo( 670.843384, height, -465.824615) |
---|
| 192 | guard:walkTo( 669.948364, height, -480.910645) |
---|
| 193 | guard:walkTo( 669.361511, height, -493.648529) |
---|
| 194 | guard:walkTo( 669.686829, height, -501.598572) |
---|
| 195 | guard:walkTo( 674.055664, height, -582.077637) |
---|
| 196 | guard:walkTo( 676.046387, height, -630.403809) |
---|
| 197 | guard:walkTo( 677.839050, height, -674.209534) |
---|
| 198 | guard:walkTo( 680.754944, height, -765.965515) |
---|
| 199 | guard:walkTo( 681.034180, height, -803.351135) |
---|
| 200 | guard:walkTo( 680.088806, height, -844.069031) |
---|
| 201 | guard:walkTo( 677.801514, height, -899.952148) |
---|
| 202 | guard:walkTo( 675.205627, height, -950.496460) |
---|
| 203 | guard:walkTo( 672.847778, height, -996.413574) |
---|
| 204 | guard:walkTo( 676.204041, height, -1043.556274) |
---|
| 205 | guard:walkTo( 691.304382, height, -1088.596558) |
---|
| 206 | guard:walkTo( 705.101318, height, -1128.320312) |
---|
| 207 | guard:walkTo( 720.476013, height, -1164.364380) |
---|
| 208 | guard:walkTo( 729.216797, height, -1183.948364) |
---|
| 209 | guard:walkTo( 740.145203, height, -1212.598267) |
---|
| 210 | guard:walkTo( 746.547363, height, -1238.340576) |
---|
| 211 | guard:walkTo( 756.866211, height, -1280.605347) |
---|
| 212 | guard:walkTo( 763.380554, height, -1314.622314) |
---|
| 213 | guard:walkTo( 768.731506, height, -1347.977539) |
---|
| 214 | guard:walkTo( 772.446655, height, -1381.641479) |
---|
| 215 | guard:walkTo( 772.721069, height, -1421.184937) |
---|
| 216 | guard:walkTo( 772.414734, height, -1457.349121) |
---|
| 217 | guard:walkTo( 772.803284, height, -1489.560913) |
---|
| 218 | |
---|
[3951] | 219 | hangarRouteProgrammed = true |
---|
| 220 | end |
---|
| 221 | |
---|
| 222 | if guard:finalGoalReached() then |
---|
| 223 | return true |
---|
| 224 | end |
---|
| 225 | |
---|
[3945] | 226 | return false |
---|
| 227 | end |
---|
| 228 | |
---|
| 229 | |
---|
| 230 | function waveToSpaceship(timestep) |
---|
| 231 | |
---|
| 232 | end |
---|
| 233 | |
---|
| 234 | |
---|
| 235 | function tick(timestep) |
---|
[3946] | 236 | --io.write("Guard called \n") |
---|
| 237 | observePlayer() |
---|
[3945] | 238 | |
---|
| 239 | if walkingRouteOne then |
---|
[3951] | 240 | walkingRouteOne = walkRouteOne(timestep) |
---|
[3945] | 241 | end |
---|
| 242 | |
---|
| 243 | if not walkingRouteOne and not exitPositionReached then |
---|
| 244 | exitPositionReached = goToExitPosition(timestep) |
---|
| 245 | end |
---|
| 246 | |
---|
[3964] | 247 | if not hangarReached and exitPositionReached then |
---|
[3945] | 248 | hangarReached = goToHangar(timestep) |
---|
| 249 | end |
---|
| 250 | |
---|
| 251 | if hangarReached then |
---|
| 252 | waveToSpaceship(timestep) |
---|
| 253 | end |
---|
| 254 | |
---|
| 255 | return false |
---|
| 256 | end |
---|
| 257 | |
---|