Mercurial > mm7
comparison DecalBuilder.cpp @ 1075:1e38e5c049f3
DecalBuilder cleaning and some type changes
author | zipi |
---|---|
date | Sat, 25 May 2013 14:07:26 +0100 |
parents | c45d51b3f4f4 |
children | 9b6e252658e8 |
comparison
equal
deleted
inserted
replaced
1074:d6bea22f8b53 | 1075:1e38e5c049f3 |
---|---|
544 } | 544 } |
545 return 1; | 545 return 1; |
546 } | 546 } |
547 | 547 |
548 //----- (0049BE8A) -------------------------------------------------------- | 548 //----- (0049BE8A) -------------------------------------------------------- |
549 bool DecalBuilder::_49BE8A(struct stru148 *a2, float a3, int a4, RenderVertexSoft *a5, unsigned int uStripType, char a7) | 549 bool DecalBuilder::_49BE8A(struct stru148 *a2, Vec3_float_ *_a3, float *a4, RenderVertexSoft *a5, unsigned int uStripType, char a7) |
550 { | 550 { |
551 bool result; // eax@1 | 551 bool result; // eax@1 |
552 RenderVertexSoft *v8; // edi@3 | 552 RenderVertexSoft *v8; // edi@3 |
553 float v9; // ebx@3 | 553 Vec3_float_ *v9; // ebx@3 |
554 char *v10; // esi@3 | 554 Bloodsplat *v10; // esi@3 |
555 float v11; // eax@5 | 555 float v11; // eax@5 |
556 float v12; // eax@6 | 556 float v12; // eax@6 |
557 double v13; // st7@13 | 557 double v13; // st7@13 |
558 double v14; // st7@19 | 558 double v14; // st7@19 |
559 int v15; // eax@20 | 559 short v15; // eax@20 |
560 int v16; // eax@22 | 560 int v16; // eax@22 |
561 int v17; // edx@24 | 561 int v17; // edx@24 |
562 DecalBuilder *v18; // eax@24 | 562 DecalBuilder *v18; // eax@24 |
563 std::string v19; // [sp-18h] [bp-54h]@12 | 563 std::string v19; // [sp-18h] [bp-54h]@12 |
564 const char *v20; // [sp-8h] [bp-44h]@12 | 564 const char *v20; // [sp-8h] [bp-44h]@12 |
572 float v28; // [sp+28h] [bp-14h]@13 | 572 float v28; // [sp+28h] [bp-14h]@13 |
573 float v29; // [sp+2Ch] [bp-10h]@7 | 573 float v29; // [sp+2Ch] [bp-10h]@7 |
574 float v30; // [sp+30h] [bp-Ch]@6 | 574 float v30; // [sp+30h] [bp-Ch]@6 |
575 float v31; // [sp+34h] [bp-8h]@6 | 575 float v31; // [sp+34h] [bp-8h]@6 |
576 bool v32; // [sp+38h] [bp-4h]@2 | 576 bool v32; // [sp+38h] [bp-4h]@2 |
577 float a3; | |
577 | 578 |
578 this->uNumDecals = 0; | 579 this->uNumDecals = 0; |
579 result = pBloodsplatContainer->std__vector_pBloodsplats_size; | 580 result = pBloodsplatContainer->std__vector_pBloodsplats_size; |
580 v24 = this; | 581 v24 = this; |
581 v23 = pBloodsplatContainer->std__vector_pBloodsplats_size; | 582 v23 = pBloodsplatContainer->std__vector_pBloodsplats_size; |
583 { | 584 { |
584 v32 = 0; | 585 v32 = 0; |
585 if ( (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 ) | 586 if ( (signed int)pBloodsplatContainer->std__vector_pBloodsplats_size > 0 ) |
586 { | 587 { |
587 v8 = a5; | 588 v8 = a5; |
588 v9 = a3; | 589 v9 = _a3; |
589 v10 = (char *)&pBloodsplatContainer->std__vector_pBloodsplats[0].y; | 590 v10 = pBloodsplatContainer->std__vector_pBloodsplats; |
590 while ( uStripType != 4 ) | 591 while ( v32 < (signed int)v23) |
591 { | 592 { |
592 if ( uStripType == 3 ) | 593 if ( uStripType == 4 ) |
594 { | |
595 a3 = v8->vWorldPosition.x; | |
596 v11 = v8[3].vWorldPosition.x; | |
597 v31 = v11; | |
598 v30 = v8[1].vWorldPosition.y; | |
599 v12 = v8->vWorldPosition.y; | |
600 v29 = v12; | |
601 } | |
602 else if ( uStripType == 3 ) | |
593 { | 603 { |
594 if ( a7 ) | 604 if ( a7 ) |
595 { | 605 { |
596 a3 = v8->vWorldPosition.x; | 606 a3 = v8->vWorldPosition.x; |
597 v31 = v8[2].vWorldPosition.x; | 607 v31 = v8[2].vWorldPosition.x; |
598 v30 = v8[1].vWorldPosition.y; | 608 v30 = v8[1].vWorldPosition.y; |
599 v12 = v8[2].vWorldPosition.y; | 609 v12 = v8[2].vWorldPosition.y; |
600 goto LABEL_7; | 610 v29 = v12; |
601 } | 611 } |
602 a3 = v8[1].vWorldPosition.x; | 612 else |
603 v11 = v8[2].vWorldPosition.x; | 613 { |
604 LABEL_6: | 614 a3 = v8[1].vWorldPosition.x; |
605 v31 = v11; | 615 v11 = v8[2].vWorldPosition.x; |
606 v30 = v8[1].vWorldPosition.y; | 616 v31 = v11; |
607 v12 = v8->vWorldPosition.y; | 617 v30 = v8[1].vWorldPosition.y; |
608 LABEL_7: | 618 v12 = v8->vWorldPosition.y; |
609 v29 = v12; | 619 v29 = v12; |
610 goto LABEL_13; | 620 } |
611 } | 621 } |
612 MessageBoxW(nullptr, L"Uknown strip type detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:434", 0); | 622 else |
613 LABEL_13: | 623 MessageBoxW(nullptr, L"Uknown strip type detected!", L"E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\PolyProjector.cpp:434", 0); |
614 v21 = uStripType; | 624 v21 = uStripType; |
615 v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType); | 625 v13 = pGame->pIndoorCameraD3D->GetPolygonMinZ(v8, uStripType); |
616 v21 = uStripType; | 626 v21 = uStripType; |
617 v28 = v13; | 627 v28 = v13; |
618 v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(v8, uStripType); | 628 v26 = pGame->pIndoorCameraD3D->GetPolygonMaxZ(v8, uStripType); |
619 if ( a3 - *((float *)v10 + 2) < *((float *)v10 - 1) ) | 629 if ( a3 - v10->radius < v10->x && |
630 v31 + v10->radius > v10->x && | |
631 v30 - v10->radius < v10->y && | |
632 v29 + v10->radius > v10->y && | |
633 v28 - v10->radius < v10->z && | |
634 v26 + v10->radius > v10->z ) | |
620 { | 635 { |
621 if ( v31 + *((float *)v10 + 2) > *((float *)v10 - 1) ) | 636 Vec3_float_::NegDot(&v8->vWorldPosition, v9, a4); |
622 { | 637 v26 = v9->y * v10->y |
623 if ( v30 - *((float *)v10 + 2) < *(float *)v10 ) | 638 + v9->z * v10->z |
624 { | 639 + v9->x * v10->x |
625 if ( v29 + *((float *)v10 + 2) > *(float *)v10 ) | 640 + *a4; |
626 { | 641 v22 = v26 + 6.7553994e15; |
627 if ( v28 - *((float *)v10 + 2) < *((float *)v10 + 1) ) | 642 v25 = LODWORD(v22); |
628 { | 643 v14 = (double)SLODWORD(v22); |
629 if ( v26 + *((float *)v10 + 2) > *((float *)v10 + 1) ) | 644 v28 = v14; |
630 { | 645 if ( v14 <= v10->radius ) |
631 Vec3_float_::NegDot(&v8->vWorldPosition, (Vec3_float_ *)LODWORD(v9), (float *)a4); | 646 { |
632 v26 = *(float *)(LODWORD(v9) + 4) * *(float *)v10 | 647 v15 = a2->flags; |
633 + *(float *)(LODWORD(v9) + 8) * *((float *)v10 + 1) | 648 if ( v15 & 2 || BYTE1(v15) & 1 ) |
634 + *(unsigned int *)LODWORD(v9) * *((float *)v10 - 1) | 649 { |
635 + *(float *)a4; | 650 v16 = v10->field_1C; |
636 v22 = v26 + 6.7553994e15; | 651 if ( !(v16 & 1) ) |
637 v25 = LODWORD(v22); | 652 { |
638 v14 = (double)SLODWORD(v22); | 653 LOBYTE(v16) = v16 | 1; |
639 v28 = v14; | 654 v10->field_1C = v16; |
640 if ( v14 <= *((float *)v10 + 2) ) | 655 v10->field_20 = pEventTimer->Time(); |
641 { | 656 } |
642 v15 = *(int *)&a2->flags; | 657 } |
643 if ( v15 & 2 || BYTE1(v15) & 1 ) | 658 v17 = v32; |
644 { | 659 v10->dot_dist = LODWORD(v28); |
645 v16 = *((int *)v10 + 5); | 660 v18 = v24; |
646 if ( !(v16 & 1) ) | 661 v24->std__vector_30B00C[v24->uNumDecals] = v17; |
647 { | 662 ++v18->uNumDecals; |
648 LOBYTE(v16) = v16 | 1; | 663 } |
649 *((int *)v10 + 5) = v16; | |
650 *((_QWORD *)v10 + 3) = pEventTimer->Time(); | |
651 } | |
652 } | |
653 v17 = v32; | |
654 *((int *)v10 + 3) = LODWORD(v28); | |
655 v18 = v24; | |
656 v24->std__vector_30B00C[v24->uNumDecals] = v17; | |
657 ++v18->uNumDecals; | |
658 } | |
659 } | |
660 } | |
661 } | |
662 } | |
663 } | |
664 } | 664 } |
665 ++v32; | 665 ++v32; |
666 v10 += 40; | 666 ++v10; |
667 result = v32; | 667 result = v32; |
668 if ( v32 >= (signed int)v23 ) | |
669 goto LABEL_26; | |
670 } | 668 } |
671 a3 = v8->vWorldPosition.x; | 669 } |
672 v11 = v8[3].vWorldPosition.x; | 670 } |
673 goto LABEL_6; | |
674 } | |
675 } | |
676 LABEL_26: | |
677 LOBYTE(result) = 1; | 671 LOBYTE(result) = 1; |
678 return result; | 672 return result; |
679 } | 673 } |
680 | 674 |
681 //----- (0049C095) -------------------------------------------------------- | 675 //----- (0049C095) -------------------------------------------------------- |
785 } | 779 } |
786 | 780 |
787 //----- (0049C550) -------------------------------------------------------- | 781 //----- (0049C550) -------------------------------------------------------- |
788 void DecalBuilder::DrawDecalDebugOutlines() | 782 void DecalBuilder::DrawDecalDebugOutlines() |
789 { | 783 { |
790 DecalBuilder *v1; // esi@1 | 784 for(int i = 0; i < std__vector_pDecals_size; i++) |
791 signed int v2; // ebx@1 | 785 pGame->pIndoorCameraD3D->debug_outline_sw(std__vector_pDecals[i].pVertices, std__vector_pDecals[i].uNumVertices, 0xC86400u, 0.0); |
792 RenderVertexSoft *v3; // edi@2 | |
793 | |
794 v1 = this; | |
795 v2 = 0; | |
796 if ( (signed int)this->std__vector_pDecals_size > 0 ) | |
797 { | |
798 v3 = this->std__vector_pDecals[0].pVertices; | |
799 do | |
800 { | |
801 pGame->pIndoorCameraD3D->debug_outline_sw(v3, *((int *)v3 - 1), 0xC86400u, 0.0); | |
802 ++v2; | |
803 v3 = (RenderVertexSoft *)((char *)v3 + 3104); | |
804 } | |
805 while ( v2 < (signed int)v1->std__vector_pDecals_size ); | |
806 } | |
807 } | 786 } |
808 | 787 |
809 //----- (0040E4C2) -------------------------------------------------------- | 788 //----- (0040E4C2) -------------------------------------------------------- |
810 void Decal::Decal_base_ctor() | 789 void Decal::Decal_base_ctor() |
811 { | 790 { |