Commit 8197ba1d authored by Roque's avatar Roque

check collisions between drones

See merge request nexedi/erp5!1809
parents 038ac81c 3a71438f
Pipeline #29535 failed with stage
in 0 seconds
......@@ -13,6 +13,11 @@ var DroneLogAPI = /** @class */ (function () {
this._drone_info = drone_info;
this._flight_parameters = flight_parameters;
}
Object.defineProperty(DroneLogAPI.prototype, "isCollidable", {
get: function () { return false; },
enumerable: true,
configurable: true
});
/*
** Function called at start phase of the drone, just before onStart AI script
*/
......
......@@ -246,7 +246,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>1010.13157.33937.23381</string> </value>
<value> <string>1010.13501.40623.51950</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -266,7 +266,7 @@
</tuple>
<state>
<tuple>
<float>1691051883.97</float>
<float>1691588429.76</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -32,6 +32,11 @@ var FixedWingDroneAPI = /** @class */ (function () {
this._loiter_mode = false;
this._drone_dict_list = [];
}
Object.defineProperty(FixedWingDroneAPI.prototype, "isCollidable", {
get: function () { return true; },
enumerable: true,
configurable: true
});
/*
** Function called on start phase of the drone, just before onStart AI script
*/
......@@ -393,9 +398,7 @@ var FixedWingDroneAPI = /** @class */ (function () {
}
var processed_coordinates =
this._mapManager.convertToLocalCoordinates(lat, lon, z);
if (processed_coordinates.z > this._map_dict.start_AMSL) {
processed_coordinates.z -= this._map_dict.start_AMSL;
}
processed_coordinates.z -= this._map_dict.start_AMSL;
//this._last_altitude_point_reached = -1;
//this.takeoff_path = [];
return processed_coordinates;
......
......@@ -240,7 +240,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>1010.13155.61424.54442</string> </value>
<value> <string>1010.22099.47894.60006</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -260,7 +260,7 @@
</tuple>
<state>
<tuple>
<float>1691051762.91</float>
<float>1691588633.42</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -37,7 +37,7 @@ var DroneManager = /** @class */ (function () {
// Create the control mesh
this._controlMesh = BABYLON.Mesh.CreateBox(
"droneControl_" + id,
0.01,
1.55, // 155 cm long wingspan
this._scene
);
this._controlMesh.isVisible = false;
......@@ -421,7 +421,7 @@ var MapManager = /** @class */ (function () {
[map_dict.min_lat, map_dict.max_lon]),
max_height = this.latLonDistance([map_dict.min_lat, map_dict.min_lon],
[map_dict.max_lat, map_dict.min_lon]),
map_size = Math.ceil(Math.max(max_width, max_height)) * 0.6;
map_size = Math.ceil(Math.max(max_width, max_height));
this.map_info = {
"depth": map_size,
"height": map_dict.height,
......@@ -622,13 +622,14 @@ var GameManager = /** @class */ (function () {
this._flight_log[drone._id].push(error.stack);
};
GameManager.prototype._checkDroneRules = function (drone) {
//TODO move this to API methods.
//each type of drone should define its rules
if (drone.getCurrentPosition()) {
return drone.getCurrentPosition().z > 1;
GameManager.prototype._checkCollision = function (drone, other) {
if (drone.colliderMesh && other.colliderMesh &&
drone.colliderMesh.intersectsMesh(other.colliderMesh, false)) {
drone._internal_crash(new Error('Drone ' + drone.id +
' touched drone ' + other.id + '.'));
other._internal_crash(new Error('Drone ' + drone.id +
' touched drone ' + other.id + '.'));
}
return false;
};
GameManager.prototype._update = function (delta_time, fullscreen) {
......@@ -664,11 +665,19 @@ var GameManager = /** @class */ (function () {
this._droneList.forEach(function (drone) {
queue.push(function () {
drone._tick += 1;
if (_this._checkDroneRules(drone)) {
return drone.internal_update(delta_time);
if (drone._API.isCollidable && drone.can_play) {
if (drone.getCurrentPosition().z <= 0) {
drone._internal_crash(new Error('Drone ' + drone.id +
' touched the floor.'));
} else {
_this._droneList.forEach(function (other) {
if (other.can_play && drone.id !== other.id) {
_this._checkCollision(drone, other);
}
});
}
}
//TODO error must be defined by the api?
drone._internal_crash('Drone touched the floor');
return drone.internal_update(delta_time);
});
});
......
......@@ -240,7 +240,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>1010.13183.29224.8874</string> </value>
<value> <string>1010.42341.16308.11025</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -260,7 +260,7 @@
</tuple>
<state>
<tuple>
<float>1691053915.45</float>
<float>1692802878.6</float>
<string>UTC</string>
</tuple>
</state>
......
......@@ -63,7 +63,7 @@
' me.setTargetCoordinates(\n' +
' me.initialPosition.x + 0.01,\n' +
' me.initialPosition.y,\n' +
' me.initialPosition.z\n' +
' me.getAltitudeAbs()\n' +
' );\n' +
'};\n' +
'\n' +
......
......@@ -246,7 +246,7 @@
</item>
<item>
<key> <string>serial</string> </key>
<value> <string>1010.10621.5765.11161</string> </value>
<value> <string>1010.12196.1891.61832</string> </value>
</item>
<item>
<key> <string>state</string> </key>
......@@ -266,7 +266,7 @@
</tuple>
<state>
<tuple>
<float>1690900659.22</float>
<float>1691485888.5</float>
<string>UTC</string>
</tuple>
</state>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment