ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/common/los.C
(Generate patch)

Comparing deliantra/server/common/los.C (file contents):
Revision 1.11 by root, Sat Dec 23 13:56:25 2006 UTC vs.
Revision 1.12 by root, Mon Dec 25 11:25:49 2006 UTC

507 } 507 }
508} 508}
509 509
510/* update all_map_los is like update_all_los below, 510/* update all_map_los is like update_all_los below,
511 * but updates everyone on the map, no matter where they 511 * but updates everyone on the map, no matter where they
512 * are. This generally should not be used, as a per 512 * are. This generally should not be used, as a per
513 * specific map change doesn't make much sense when tiling 513 * specific map change doesn't make much sense when tiling
514 * is considered (lowering darkness would certainly be a 514 * is considered (lowering darkness would certainly be a
515 * strange effect if done on a tile map, as it makes 515 * strange effect if done on a tile map, as it makes
516 * the distinction between maps much more obvious to the 516 * the distinction between maps much more obvious to the
517 * players, which is should not be. 517 * players, which is should not be.
520 */ 520 */
521void 521void
522update_all_map_los (maptile *map) 522update_all_map_los (maptile *map)
523{ 523{
524 for_all_players (pl) 524 for_all_players (pl)
525 if (pl->ob->map == map) 525 if (pl->ob && pl->ob->map == map)
526 pl->do_los = 1; 526 pl->do_los = 1;
527} 527}
528
529 528
530/* 529/*
531 * This function makes sure that update_los() will be called for all 530 * This function makes sure that update_los() will be called for all
532 * players on the given map within the next frame. 531 * players on the given map within the next frame.
533 * It is triggered by removal or inserting of objects which blocks 532 * It is triggered by removal or inserting of objects which blocks
537 * means that just being on the same map is not sufficient - the 536 * means that just being on the same map is not sufficient - the
538 * space that changes must be withing your viewable area. 537 * space that changes must be withing your viewable area.
539 * 538 *
540 * map is the map that changed, x and y are the coordinates. 539 * map is the map that changed, x and y are the coordinates.
541 */ 540 */
542
543void 541void
544update_all_los (const maptile *map, int x, int y) 542update_all_los (const maptile *map, int x, int y)
545{ 543{
546 for_all_players (pl) 544 for_all_players (pl)
547 { 545 {
548 /* Player should not have a null map, but do this 546 /* Player should not have a null map, but do this
549 * check as a safety 547 * check as a safety
550 */ 548 */
551 if (!pl->ob->map) 549 if (!pl->ob || !pl->ob->map || !pl->ns)
552 continue; 550 continue;
553 551
554 /* Same map is simple case - see if pl is close enough. 552 /* Same map is simple case - see if pl is close enough.
555 * Note in all cases, we did the check for same map first, 553 * Note in all cases, we did the check for same map first,
556 * and then see if the player is close enough and update 554 * and then see if the player is close enough and update
563 if (pl->ob->map == map) 561 if (pl->ob->map == map)
564 { 562 {
565 if ((abs (pl->ob->x - x) <= pl->ns->mapx / 2) && (abs (pl->ob->y - y) <= pl->ns->mapy / 2)) 563 if ((abs (pl->ob->x - x) <= pl->ns->mapx / 2) && (abs (pl->ob->y - y) <= pl->ns->mapy / 2))
566 pl->do_los = 1; 564 pl->do_los = 1;
567 } 565 }
566
568 /* Now we check to see if player is on adjacent 567 /* Now we check to see if player is on adjacent
569 * maps to the one that changed and also within 568 * maps to the one that changed and also within
570 * view. The tile_maps[] could be null, but in that 569 * view. The tile_maps[] could be null, but in that
571 * case it should never match the pl->ob->map, so 570 * case it should never match the pl->ob->map, so
572 * we want ever try to dereference any of the data in it. 571 * we want ever try to dereference any of the data in it.
573 */ 572 *
574
575 /* The logic for 0 and 3 is to see how far the player is 573 * The logic for 0 and 3 is to see how far the player is
576 * from the edge of the map (height/width) - pl->ob->(x,y) 574 * from the edge of the map (height/width) - pl->ob->(x,y)
577 * and to add current position on this map - that gives a 575 * and to add current position on this map - that gives a
578 * distance. 576 * distance.
579 * For 1 and 2, we check to see how far the given 577 * For 1 and 2, we check to see how far the given
580 * coordinate (x,y) is from the corresponding edge, 578 * coordinate (x,y) is from the corresponding edge,

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines