From 87f6ecce75b5407ac0fcf76b568a40c5eaf1473c Mon Sep 17 00:00:00 2001 From: zicodxx <> Date: Mon, 3 Nov 2008 11:39:56 +0000 Subject: [PATCH] Made move_towards_segment_center() use move_towards_vector() instead of just changing object position suddenly - smoother; Changed back the robot:controlcen collision back to original - the AI just relies to often on no-damage collisions, especially when our segment suddenly is a controlcen --- CHANGELOG.txt | 1 + main/ai.c | 17 +++++++++++++---- main/collide.c | 20 +++++++++----------- 3 files changed, 23 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index efa298c4f..5a318836a 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,7 @@ D1X-Rebirth Changelog 20081103 -------- misc/args.c: Fixed Typo +main/ai.c, main/collide.c: Made move_towards_segment_center() use move_towards_vector() instead of just changing object position suddenly - smoother; Changed back the robot:controlcen collision back to original - the AI just relies to often on no-damage collisions, especially when our segment suddenly is a controlcen 20081101 -------- diff --git a/main/ai.c b/main/ai.c index d427ee6b5..9e7ca1570 100644 --- a/main/ai.c +++ b/main/ai.c @@ -1597,6 +1597,18 @@ void move_object_to_legal_spot(object *objp) // If segment center is nearer than 2 radii, move it to center. void move_towards_segment_center(object *objp) { +/* ZICO's change of 20081103: + Make move to segment center smoother by using move_towards vector. + Bot's should not jump around and maybe even intersect with each other! + In case it breaks something what I do not see, yet, old code is still there. */ +#if 1 + int segnum = objp->segnum; + vms_vector vec_to_center, segment_center; + + compute_segment_center(&segment_center, &Segments[segnum]); + vm_vec_normalized_dir_quick(&vec_to_center, &segment_center, &objp->pos); + move_towards_vector(objp, &vec_to_center); +#else int segnum = objp->segnum; fix dist_to_center; vms_vector segment_center, goal_dir; @@ -1609,9 +1621,7 @@ void move_towards_segment_center(object *objp) if (dist_to_center < objp->size) { // Center is nearer than the distance we want to move, so move to center. objp->pos = segment_center; - con_printf(CON_DEBUG, "Object #%i moved to center of segment #%i (%7.3f %7.3f %7.3f)\n", objp-Objects, objp->segnum, f2fl(objp->pos.x), f2fl(objp->pos.y), f2fl(objp->pos.z)); if (object_intersects_wall(objp)) { - con_printf(CON_DEBUG, "Object #%i still illegal, trying trickier move.\n"); move_object_to_legal_spot(objp); } } else { @@ -1624,9 +1634,8 @@ void move_towards_segment_center(object *objp) objp->pos = segment_center; move_object_to_legal_spot(objp); } - con_printf(CON_DEBUG, "Obj %i moved twrds seg %i (%6.2f %6.2f %6.2f), dists: [%6.2f %6.2f]\n", objp-Objects, objp->segnum, f2fl(objp->pos.x), f2fl(objp->pos.y), f2fl(objp->pos.z), f2fl(vm_vec_dist_quick(&objp->pos, &segment_center)), f2fl(vm_vec_dist_quick(&objp->pos, &segment_center))); } - +#endif } // ----------------------------------------------------------------------------------------------------------- diff --git a/main/collide.c b/main/collide.c index f00822da0..adf079ad4 100644 --- a/main/collide.c +++ b/main/collide.c @@ -631,17 +631,15 @@ void collide_robot_and_robot( object * robot1, object * robot2, vms_vector *coll void collide_robot_and_controlcen( object * obj1, object * obj2, vms_vector *collision_point ) { - -// if (obj1->type == OBJ_ROBOT) { -// vms_vector hitvec; -// vm_vec_normalize_quick(vm_vec_sub(&hitvec, &obj2->pos, &obj1->pos)); -// bump_one_object(obj1, &hitvec, 0); -// } else { -// vms_vector hitvec; -// vm_vec_normalize_quick(vm_vec_sub(&hitvec, &obj1->pos, &obj2->pos)); -// bump_one_object(obj2, &hitvec, 0); -// } - bump_two_objects(obj1, obj2, 0); + if (obj1->type == OBJ_ROBOT) { + vms_vector hitvec; + vm_vec_normalize(vm_vec_sub(&hitvec, &obj2->pos, &obj1->pos)); + bump_one_object(obj1, &hitvec, 0); + } else { + vms_vector hitvec; + vm_vec_normalize(vm_vec_sub(&hitvec, &obj1->pos, &obj2->pos)); + bump_one_object(obj2, &hitvec, 0); + } } //##void collide_robot_and_hostage( object * robot, object * hostage, vms_vector *collision_point ) {