Violet Vreath is Shooter Game for Windows XP+(個人制作シューティングゲーム)
修订版 | 254ce538eff881cb218a76775564d6464a64680e (tree) |
---|---|
时间 | 2022-12-03 00:27:50 |
作者 | gecchi <gecchi@192....> |
Commiter | gecchi |
VVViewerかいぞう
@@ -34,11 +34,6 @@ public: | ||
34 | 34 | static pixcoord RENDER_TARGET_BUFFER_HEIGHT; |
35 | 35 | |
36 | 36 | /** [r] 描画先サーフェイス(RENDER_TARGET_BUFFER)の中から、実際にゲームに表示する画面領域(クリッピング) */ |
37 | -// static pixcoord RENDER_BUFFER_SOURCE1_LEFT; | |
38 | -// static pixcoord RENDER_BUFFER_SOURCE1_TOP; | |
39 | -// static pixcoord RENDER_BUFFER_SOURCE1_WIDTH; | |
40 | -// static pixcoord RENDER_BUFFER_SOURCE1_HEIGHT; | |
41 | - | |
42 | 37 | static pixcoord RENDER_BUFFER_SOURCE1_LEFT; |
43 | 38 | static pixcoord RENDER_BUFFER_SOURCE1_TOP; |
44 | 39 | static pixcoord RENDER_BUFFER_SOURCE1_WIDTH; |
@@ -0,0 +1,15 @@ | ||
1 | +xof 0303txt 0032 | |
2 | + | |
3 | +SpriteModelDef HitBoard { | |
4 | + 128.0; # FLOAT Width | |
5 | + 128.0; # FLOAT Height | |
6 | + "Cursor.png"; # STRING TextureFile | |
7 | + 2; # DWORD TextureSplitRows | |
8 | + 2; # DWORD TextureSplitCols | |
9 | + 8; #DrawSetNum | |
10 | + 1.000000, 0.000000, 0.000000, 0.000000, | |
11 | + 0.000000, 1.000000, 0.000000, 0.000000, | |
12 | + 0.000000, 0.000000, 1.000000, 0.000000, | |
13 | + 0.000000, 0.000000, 0.000000, 1.000000; | |
14 | +} | |
15 | + |
@@ -32,6 +32,10 @@ FULL_SCREEN=false | ||
32 | 32 | #true=2画面モード/false=1画面モード(初期値:false) |
33 | 33 | DUAL_VIEW=false |
34 | 34 | |
35 | +WINDOW1_WIDTH=200 | |
36 | +WINDOW1_HEIGHT=100 | |
37 | + | |
38 | + | |
35 | 39 | #表示領域サイズ可変時、表示領域アスペクト比をゲームバッファの縦横比で固定にするかどうか(true=固定/false=固定にしない) |
36 | 40 | FIXED_GAME_VIEW_ASPECT=true |
37 | 41 | #画面1のゲーム表示と、画面2のゲーム表示を入れ変える(true=入れ替える/false=表示を入れ替えない) |
@@ -10,7 +10,7 @@ | ||
10 | 10 | |
11 | 11 | #include "GgafLibCommonHeader.h" |
12 | 12 | |
13 | -#define KIND_POINTER_RAY (0x4U) // 00000000 00000000 00000000 00000100 | |
13 | +#define KIND_POINTER (0x4U) // 00000000 00000000 00000000 00000100 | |
14 | 14 | #define KIND_ACTOR (0x8U) // 00000000 00000000 00000000 00001000 |
15 | 15 | |
16 | 16 | namespace VVViewer { |
@@ -21,7 +21,12 @@ VvvMousePointer::VvvMousePointer(const char* prm_name) : | ||
21 | 21 | MousePointerActor(prm_name, "VvvMousePointer") { |
22 | 22 | _class_name = "VvvMousePointer"; |
23 | 23 | |
24 | + | |
24 | 25 | setAlign(ALIGN_CENTER, VALIGN_MIDDLE); |
26 | + ViewCollisionChecker* pChecker = getWorldCollisionChecker(); | |
27 | + pChecker->createCollisionArea(1); | |
28 | + pChecker->setColliSquare(0, PX_C(16)); | |
29 | + setHitAble(true); | |
25 | 30 | } |
26 | 31 | |
27 | 32 | void VvvMousePointer::onCreateModel() { |
@@ -19,8 +19,8 @@ void VvvSpacetime::initialize() { | ||
19 | 19 | |
20 | 20 | void VvvSpacetime::processBehavior() { |
21 | 21 | |
22 | - executeWorldHitCheck(KIND_POINTER_RAY, KIND_ACTOR); | |
23 | - | |
22 | + executeWorldHitCheck(KIND_POINTER, KIND_ACTOR); | |
23 | + executeViewHitCheck(KIND_POINTER, KIND_ACTOR); | |
24 | 24 | } |
25 | 25 | |
26 | 26 | VvvSpacetime::~VvvSpacetime() { |
@@ -17,6 +17,7 @@ | ||
17 | 17 | #include "jp/ggaf/lib/LibConfig.h" |
18 | 18 | #include "jp/ggaf/lib/util/VirtualButton.h" |
19 | 19 | #include "jp/ggaf/lib/util/WorldCollisionChecker.h" |
20 | +#include "jp/ggaf/lib/util/ViewCollisionChecker.h" | |
20 | 21 | #include "VvvCaretaker.h" |
21 | 22 | #include "actor/CamWorker/VvvCamWorker.h" |
22 | 23 | #include "actor/VvvCursor.h" |
@@ -31,6 +32,64 @@ using namespace GgafLib; | ||
31 | 32 | using namespace VVViewer; |
32 | 33 | using namespace std; |
33 | 34 | |
35 | + | |
36 | + | |
37 | + | |
38 | +template<class T> | |
39 | +class VvvActor : public T { | |
40 | +public: | |
41 | + GgafLib::DefaultBoardActor* pHitActor_; | |
42 | + VvvWorld* pWorld_; | |
43 | +public: | |
44 | + VvvActor(const char* prm_name, const char* prm_model) | |
45 | + : T(prm_name, prm_model) { | |
46 | + pHitActor_ = nullptr; | |
47 | + pWorld_ = (VvvWorld*)(pCARETAKER->getSpacetime()->pWorld_); | |
48 | + } | |
49 | + | |
50 | + virtual void initialize() override { | |
51 | + pHitActor_ = desireActor(GgafLib::DefaultBoardActor, "HitArea", "HitBoard"); | |
52 | + pHitActor_->setAlign(ALIGN_CENTER, VALIGN_MIDDLE); | |
53 | + ViewCollisionChecker* pChecker = pHitActor_->getWorldCollisionChecker(); | |
54 | + pChecker->createCollisionArea(1); | |
55 | + pChecker->setColliAABox(0, 0.5); | |
56 | + pHitActor_->setHitAble(true); | |
57 | + T::appendGroupChild(KIND_ACTOR, pHitActor_); | |
58 | + } | |
59 | + | |
60 | + virtual void processBehavior() override { | |
61 | + dxcoord len_left = (-T::_dest_from_vppln_left); | |
62 | + dxcoord len_rigth = (-T::_dest_from_vppln_right); | |
63 | + | |
64 | + dxcoord width = len_left + len_rigth; | |
65 | + | |
66 | + dxcoord len_top = (-T::_dest_from_vppln_top); | |
67 | + dxcoord len_bottom = (-T::_dest_from_vppln_bottom); | |
68 | + | |
69 | + dxcoord height = len_top + len_bottom; | |
70 | + | |
71 | + dxcoord x = ( PX_DX(pWorld_->_buffer_width1) / width) * len_left; | |
72 | + dxcoord y = PX_DX(pWorld_->_buffer_height1) - (( PX_DX(pWorld_->_buffer_height1) / height)* len_top); | |
73 | + // - PX_DX(pWorld_->_buffer_height1/2) | |
74 | + //len_left / len_rigth; | |
75 | +// RCNV(); | |
76 | + pHitActor_->setPosition(DX_C(x), DX_C(y)); | |
77 | + } | |
78 | + /** | |
79 | + * 範囲中のある値について、範囲を変換した場合の相対値を取得 . | |
80 | + * 範囲 min_a 〜 max_a の a の値を、範囲 min_b 〜 max_b に変換した場合の a に対応する値(b) を得る<br> | |
81 | + */ | |
82 | + static inline double _rcnv_(double max_a, double a, double max_b) { | |
83 | + return ( max_b / max_a) * a; | |
84 | + } | |
85 | + | |
86 | + | |
87 | + | |
88 | + virtual ~VvvActor() { | |
89 | + } | |
90 | +}; | |
91 | + | |
92 | + | |
34 | 93 | VvvWorld::VvvWorld(const char* prm_name) : GgafLib::DefaultScene(prm_name) { |
35 | 94 | pCamWorker_ = NEW VvvCamWorker("VvvCamWorker", pCARETAKER->getSpacetime()->getCamera()); |
36 | 95 | bringSceneMediator()->appendGroupChild(pCamWorker_); |
@@ -46,12 +105,22 @@ VvvWorld::VvvWorld(const char* prm_name) : GgafLib::DefaultScene(prm_name) { | ||
46 | 105 | view_help_ = true; |
47 | 106 | view_info_ = true; |
48 | 107 | pVvvMousePointer_= nullptr; |
108 | + | |
109 | + _w_r = 1.0 * CONFIG::GAME_BUFFER_WIDTH / CONFIG::RENDER_TARGET_BUFFER_WIDTH; | |
110 | + _h_r = 1.0 * CONFIG::GAME_BUFFER_HEIGHT / CONFIG::RENDER_TARGET_BUFFER_HEIGHT; | |
111 | + | |
112 | + _buffer_left1 = CONFIG::RENDER_BUFFER_SOURCE1_LEFT*_w_r; | |
113 | + _buffer_top1 = CONFIG::RENDER_BUFFER_SOURCE1_TOP*_h_r; | |
114 | + _buffer_width1 = CONFIG::RENDER_BUFFER_SOURCE1_WIDTH*_w_r; | |
115 | + _buffer_height1 = CONFIG::RENDER_BUFFER_SOURCE1_HEIGHT*_h_r; | |
116 | + | |
117 | + | |
49 | 118 | } |
50 | 119 | |
51 | 120 | void VvvWorld::initialize() { |
52 | 121 | pVvvMousePointer_ = desireActor(VvvMousePointer); |
53 | 122 | // pVvvMousePointer_->setDefaultKind(KIND_2DFIX_MOUSE_POINTER); |
54 | - bringSceneMediator()->appendGroupChild(pVvvMousePointer_); | |
123 | + bringSceneMediator()->appendGroupChild(KIND_POINTER, pVvvMousePointer_); | |
55 | 124 | |
56 | 125 | pFont01_help_->setAlign(ALIGN_LEFT, VALIGN_TOP); |
57 | 126 | pFont01_help_->setMaterialColor(1.0,0.5,0.2); |
@@ -538,7 +607,7 @@ void VvvWorld::processBehavior() { | ||
538 | 607 | pModelManager->obtainMeshModelInfo(&xdata, model_def_filepath); |
539 | 608 | if (xdata.XFileNum >= 2) { |
540 | 609 | GgafLib::DefaultMorphMeshActor* pDefaultMorphMeshActor = |
541 | - desireActor(GgafLib::DefaultMorphMeshActor, "actor", model.c_str()); | |
610 | + desireActor(VvvActor<GgafLib::DefaultMorphMeshActor>, "actor", model.c_str()); | |
542 | 611 | pActor = pDefaultMorphMeshActor; |
543 | 612 | pChecker = pDefaultMorphMeshActor->getWorldCollisionChecker(); |
544 | 613 | } else { |
@@ -546,7 +615,7 @@ void VvvWorld::processBehavior() { | ||
546 | 615 | // pActor = desireActor(GgafLib::WorldBoundActor, "actor", filename); |
547 | 616 | // } else { |
548 | 617 | GgafLib::DefaultMeshActor* pDefaultMeshActor = |
549 | - desireActor(GgafLib::DefaultMeshActor, "actor", model.c_str()); | |
618 | + desireActor(VvvActor<GgafLib::DefaultMeshActor>, "actor", model.c_str()); | |
550 | 619 | pActor = pDefaultMeshActor; |
551 | 620 | pChecker = pDefaultMeshActor->getWorldCollisionChecker(); |
552 | 621 | // } |
@@ -557,28 +626,28 @@ void VvvWorld::processBehavior() { | ||
557 | 626 | } |
558 | 627 | } else if (ext == "SPRX") { |
559 | 628 | GgafLib::DefaultSpriteActor* pDefaultSpriteActor = |
560 | - desireActor(GgafLib::DefaultSpriteActor, "actor", model.c_str()); | |
629 | + desireActor(VvvActor<GgafLib::DefaultSpriteActor>, "actor", model.c_str()); | |
561 | 630 | pActor = pDefaultSpriteActor; |
562 | 631 | pChecker = pDefaultSpriteActor->getWorldCollisionChecker(); |
563 | 632 | } else if (ext == "PSPRX") { |
564 | 633 | GgafLib::DefaultPointSpriteActor* pDefaultPointSpriteActor = |
565 | - desireActor(GgafLib::DefaultPointSpriteActor, "actor", model.c_str()); | |
634 | + desireActor(VvvActor<GgafLib::DefaultPointSpriteActor>, "actor", model.c_str()); | |
566 | 635 | pActor = pDefaultPointSpriteActor; |
567 | 636 | pChecker = pDefaultPointSpriteActor->getWorldCollisionChecker(); |
568 | 637 | } else if (ext == "FSPRX") { |
569 | 638 | GgafLib::DefaultFramedSpriteActor* pDefaultFramedSpriteActor = |
570 | - desireActor(GgafLib::DefaultFramedSpriteActor, "actor", model.c_str()); | |
639 | + desireActor(VvvActor<GgafLib::DefaultFramedSpriteActor>, "actor", model.c_str()); | |
571 | 640 | pActor = pDefaultFramedSpriteActor; |
572 | 641 | pChecker = pDefaultFramedSpriteActor->getWorldCollisionChecker(); |
573 | 642 | } else if (ext == "RSPRX") { |
574 | 643 | GgafLib::DefaultRegularPolygonSpriteActor* pDefaultRegularPolygonSpriteActor = |
575 | - desireActor(GgafLib::DefaultRegularPolygonSpriteActor, "actor", model.c_str()); | |
644 | + desireActor(VvvActor<GgafLib::DefaultRegularPolygonSpriteActor>, "actor", model.c_str()); | |
576 | 645 | pActor = pDefaultRegularPolygonSpriteActor; |
577 | 646 | pChecker = pDefaultRegularPolygonSpriteActor->getWorldCollisionChecker(); |
578 | 647 | } else if (ext == "X") { |
579 | 648 | //DefaultMeshActor のみ x ファイル直接でも大丈夫 |
580 | 649 | GgafLib::DefaultMeshActor* pDefaultMeshActor = |
581 | - desireActor(GgafLib::DefaultMeshActor, "actor", model.c_str()); | |
650 | + desireActor(VvvActor<GgafLib::DefaultMeshActor>, "actor", model.c_str()); | |
582 | 651 | pActor = pDefaultMeshActor; |
583 | 652 | pChecker = pDefaultMeshActor->getWorldCollisionChecker(); |
584 | 653 | } |
@@ -588,16 +657,24 @@ void VvvWorld::processBehavior() { | ||
588 | 657 | pChecker->createCollisionArea(1); |
589 | 658 | pChecker->setColliSphere(0, DX_C(bound)); |
590 | 659 | pActor->setHitAble(true); |
591 | - | |
592 | 660 | bringSceneMediator()->appendGroupChild(KIND_ACTOR, pActor); |
661 | + | |
662 | + | |
663 | +// GgafLib::DefaultBoardActor* pDefaultBoardActor = | |
664 | +// desireActor(GgafLib::DefaultBoardActor, "HitArea", "HitBoard"); | |
665 | +// pActor->appendGroupChild(KIND_ACTOR, pDefaultBoardActor); | |
666 | + | |
667 | + | |
668 | + | |
593 | 669 | ActorInfo* pActorInfo = NEW ActorInfo(pActor, pChecker, string(VvvCaretaker::dropfiles_)); |
594 | 670 | listActorInfo_.addLast(pActorInfo); |
595 | 671 | listActorInfo_.createIndex(); |
596 | 672 | listActorInfo_.last(); //カレントをlastへ |
597 | - VvvCamera* pCam = pCARETAKER->getSpacetime()->getCamera(); | |
598 | 673 | |
599 | - GgafDx::GeometricActor* p = pCam->getCameraViewPoint(); | |
600 | - pActor->setPositionAt(p); | |
674 | + | |
675 | + VvvCamera* pCam = pCARETAKER->getSpacetime()->getCamera(); | |
676 | + GgafDx::GeometricActor* pCameraViewPoint = pCam->getCameraViewPoint(); | |
677 | + pActor->setPositionAt(pCameraViewPoint); | |
601 | 678 | } |
602 | 679 | |
603 | 680 |
@@ -619,7 +696,7 @@ void VvvWorld::processBehavior() { | ||
619 | 696 | CONFIG::DIR_TEXTURE[2] = was_dropfile_dir; |
620 | 697 | string was_model = UTIL::getFileBaseNameWithoutExt(listActorInfo_.getCurrent()->modelfile_.c_str()); |
621 | 698 | GgafLib::CubeMapMeshActor* pCubeMapMeshActor = |
622 | - desireActor(GgafLib::CubeMapMeshActor, "actor", was_model.c_str()); | |
699 | + desireActor(VvvActor<GgafLib::CubeMapMeshActor>, "actor", was_model.c_str()); | |
623 | 700 | CONFIG::DIR_TEXTURE[0] = dir_texture_user; //dir_texture_userはシステムスキンディレクトリ |
624 | 701 | CONFIG::DIR_TEXTURE[1] = dropfile_dir + "/../" + CONFIG::DIRNAME_RESOURCE_SKIN_XXX_TEXTURE + "/"; |
625 | 702 | CONFIG::DIR_TEXTURE[2] = dropfile_dir; |
@@ -634,7 +711,7 @@ void VvvWorld::processBehavior() { | ||
634 | 711 | CONFIG::DIR_TEXTURE[1] = was_dropfile_dir + "/../" + CONFIG::DIRNAME_RESOURCE_SKIN_XXX_TEXTURE + "/"; |
635 | 712 | CONFIG::DIR_TEXTURE[2] = was_dropfile_dir; |
636 | 713 | GgafLib::CubeMapMorphMeshActor* pCubeMapMorphMeshActor = |
637 | - desireActor(GgafLib::CubeMapMorphMeshActor, "actor", pCurrentActor->getModel()->getName()); | |
714 | + desireActor(VvvActor<GgafLib::CubeMapMorphMeshActor>, "actor", pCurrentActor->getModel()->getName()); | |
638 | 715 | CONFIG::DIR_TEXTURE[0] = dir_texture_user; //dir_texture_userはシステムスキンディレクトリ |
639 | 716 | CONFIG::DIR_TEXTURE[1] = dropfile_dir + "/../" + CONFIG::DIRNAME_RESOURCE_SKIN_XXX_TEXTURE + "/"; |
640 | 717 | CONFIG::DIR_TEXTURE[2] = dropfile_dir; |
@@ -50,6 +50,13 @@ public: | ||
50 | 50 | bool view_help_; |
51 | 51 | VvvMousePointer* pVvvMousePointer_; |
52 | 52 | |
53 | + double _w_r; | |
54 | + double _h_r; | |
55 | + pixcoord _buffer_left1; | |
56 | + pixcoord _buffer_top1; | |
57 | + pixcoord _buffer_width1; | |
58 | + pixcoord _buffer_height1; | |
59 | + | |
53 | 60 | /** |
54 | 61 | * コンストラクタ . |
55 | 62 | * @param prm_name 名称 |
@@ -1 +1 @@ | ||
1 | -#define VERSION "VER 0.30.7097" | |
1 | +#define VERSION "VER 0.30.7105" |