• R/O
  • SSH
  • HTTPS

marathon: コミット


コミットメタ情報

リビジョン341 (tree)
日時2007-06-21 21:14:01
作者hogepiyo

ログメッセージ

*** empty log message ***

変更サマリ

差分

--- marathon/trunk/MapEditorOne/test/TestMathematics.cpp (revision 340)
+++ marathon/trunk/MapEditorOne/test/TestMathematics.cpp (revision 341)
@@ -15,7 +15,53 @@
1515 return r;
1616 }
1717
18+ const int NUM = 3;
19+std::vector<int> hogeVec;
20+std::list<int> hogeList;
21+std::map<int, int> hogeMap;
22+static void printLists(){
23+ printf("#Vector\n");
24+ for(int i = 0; i < hogeVec.size(); i ++){
25+ printf("%d:%d\n", i, &hogeVec[i]);
26+ }
27+ printf("#List\n");
28+ int counter = 0;
29+ for(std::list<int>::iterator it = hogeList.begin(); it != hogeList.end(); it ++){
30+ int* add = &(*it);
31+ printf("%d:%d\n", counter, add);
32+ counter ++;
33+ }
34+ printf("#Map\n");
35+ counter = 0;
36+ for(std::map<int,int>::iterator it = hogeMap.begin(); it != hogeMap.end(); it ++){
37+ int* add = &(*it).second;
38+ printf("%d:%d\n", counter, add);
39+ counter ++;
40+ }
41+}
1842 int main(int argc, char** argv){
43+
44+ for(int i = 0; i < NUM; i ++){
45+ hogeVec.push_back(i);
46+ hogeList.push_back(i);
47+ hogeMap[i] = i;
48+ }
49+
50+ //アドレスを表示してみる
51+ printLists();
52+
53+ //先頭を削除してみる
54+ std::vector<int>::iterator it = hogeVec.begin();
55+ it += 1;
56+ hogeVec.erase(it);
57+ hogeList.pop_front();
58+ hogeMap.erase(hogeMap.begin());
59+
60+ //また表示してみる
61+ printLists();
62+
63+ return 0;
64+
1965 //SDL初期化するよ
2066 SDL_Init(SDL_INIT_VIDEO);
2167
--- marathon/trunk/MapEditorOne/test/General.h (revision 340)
+++ marathon/trunk/MapEditorOne/test/General.h (revision 341)
@@ -10,6 +10,7 @@
1010 #include <string>
1111 #include <vector>
1212 #include <map>
13+#include <list>
1314
1415 #include <SDL_gfxPrimitives.h>
1516 #include "BounceBall.h"
--- marathon/trunk/MapEditorOne/src/MapEditorSDI.h (revision 340)
+++ marathon/trunk/MapEditorOne/src/MapEditorSDI.h (revision 341)
@@ -96,16 +96,7 @@
9696
9797 //map icons
9898
99-//point flags
100-enum
101-{
102- POINT_FLAG_SOLID = 1,
103- POINT_FLAG_MULTI_HIGHEST = 2,
104- POINT_FLAG_TRANSPARENCY = 4,
10599
106- NUMBER_OF_POINT_FLAGS
107-};
108-
109100 //選択したものの種類
110101 enum{
111102 _no_selected,
--- marathon/trunk/MapEditorWX/src/MapEditorWX.cpp (revision 340)
+++ marathon/trunk/MapEditorWX/src/MapEditorWX.cpp (revision 341)
@@ -183,37 +183,7 @@
183183 return true;
184184 }
185185
186-//ポリゴンが正しいかどうかを検査します(高速版)
187-bool MapEditorWX::isPolygonValidityStored(int polyIndex)
188-{
189- if(polyIndex < 0){
190- return false;
191- }else if(polyIndex >= (int)this->polygonValidity.size()){
192- //存在しないもの
193- //更新
194- updatePolygonValidityStored();
195- if(polyIndex >= (int)this->polygonValidity.size()){
196- //それでもやっぱりない→無視
197- return false;
198- }
199- }
200186
201- return this->polygonValidity[polyIndex];
202-}
203-
204-//ポリゴン整合性情報を更新します
205-void MapEditorWX::updatePolygonValidityStored()
206-{
207- this->polygonValidity.clear();
208- for(int i = 0; i < (int)PolygonList.size(); i ++){
209- bool isValid = hpl::aleph::map::isValidPolygon(i);
210- this->polygonValidity.push_back(isValid);
211- }
212-
213- //ついでに高さ順をソートする
214- //this->polygonDrawOrderByHeight.clear();
215-}
216-
217187 hpl::aleph::view::HPLViewGridManager* MapEditorWX::getViewGridManager()
218188 {
219189 return &this->viewGridManager;
@@ -223,6 +193,11 @@
223193 {
224194 return &this->eventManager;
225195 }
196+//ストックマネージャを取得します
197+hpl::aleph::HPLStockManager* MapEditorWX::getStockManager()
198+{
199+ return &this->stockManager;
200+}
226201
227202 //ビュー座標をワールド座標に直す操作の簡易版
228203 world_point2d MapEditorWX::getWorldPointFromViewPoint(int vx, int vy)
--- marathon/trunk/MapEditorWX/src/MainFrameDraw.cpp (revision 340)
+++ marathon/trunk/MapEditorWX/src/MainFrameDraw.cpp (revision 341)
@@ -97,7 +97,7 @@
9797 points[i].x = (int)polygonPoints[i][0];
9898 points[i].y = (int)polygonPoints[i][1];
9999 }
100- drawDC->DrawPolygon(points, n);
100+ drawDC->DrawPolygon(n, points);
101101 }
102102 }
103103
@@ -250,7 +250,7 @@
250250
251251 //ポリゴンチェック
252252 if(editMode == EditModeType::EM_DRAW &&
253- !wxGetApp().isPolygonValidityStored(i))
253+ !wxGetApp().getStockManager()->isPolygonValidityStored(i))
254254 {
255255 //不正なポリゴン
256256 dc->SetBrush(this->invalidBrush);
--- marathon/trunk/MapEditorWX/src/MainFrameEvent.cpp (revision 340)
+++ marathon/trunk/MapEditorWX/src/MainFrameEvent.cpp (revision 341)
@@ -397,6 +397,8 @@
397397 //選択解除
398398 wxGetApp().selectData.clear();
399399
400+ hpl::aleph::view::HPLViewGridManager* vmgr = wxGetApp().getViewGridManager();
401+
400402 int mx = ev.m_x;
401403 int my = ev.m_y;
402404 //世界座標にする
@@ -407,12 +409,15 @@
407409 hpl::aleph::HPLEventManager* emgr = wxGetApp().getEventManager();
408410
409411 int voffset[2];
410- wxGetApp().getViewGridManager()->getOffset(voffset);
412+ vmgr->getOffset(voffset);
411413 int div = wxGetApp().getViewGridManager()->getZoomDivision();
414+ int zMin = vmgr->getViewHeightMin();
415+ int zMax = vmgr->getViewHeightMax();
412416
413417 //重なる点があるかどうかチェック
414- int pointIndex = hpl::aleph::map::getSelectPointIndex(wpoint, POINT_DISTANCE_EPSILON);
418+ int pointIndex = hpl::aleph::map::getSelectPointIndex(wpoint, POINT_DISTANCE_EPSILON, zMin, zMax);
415419 //重なる線があるか判定する
420+ int lineIndex = hpl::aleph::map::getLineIndexFromOnPoint(wpoint, LINE_DISTANCE_EPSILON, zMin, zMax);
416421
417422 if(pointIndex != NONE)
418423 {
@@ -456,23 +461,62 @@
456461 wxGetApp().isFirstOfLineToAdd = false;
457462 }else{
458463 //線を踏んでいないかチェックします
459- bool onLine = false;
460- for(int i = 0; i < (int)LineList.size(); i ++){
461- line_data* line = get_line_data(i);
462- endpoint_data* begin = get_endpoint_data(line->endpoint_indexes[0]);
463- endpoint_data* end = get_endpoint_data(line->endpoint_indexes[1]);
464- if(hpl::aleph::map::isSelectLine(mx, my, begin->vertex.x, begin->vertex.y,
465- end->vertex.x, end->vertex.y, voffset[0], voffset[1], OFFSET_X_WORLD, OFFSET_Y_WORLD,
466- div, LINE_DISTANCE_EPSILON))
464+ if(lineIndex != NONE){
465+ /*
466+ 2:線の上でクリック
467+ 1:最初のクリック
468+ 1:ポリゴンに所属する線
469+ 警告を出して何もしない
470+ 2:所属しない線
471+ その線を削除
472+ 点を追加
473+ 線の始点→新点を終点とした新線を追加
474+ 新点→線の終点を終点とした新線を追加
475+ 前回クリック点の更新
476+ 2:二回目以降のクリック
477+ 同上
478+ */
479+ line_data* line = get_line_data(lineIndex);
480+ assert(line != NULL);
481+
482+ int newPointIndex = NONE;
483+ //ポリゴンに所属しているか確かめます
484+ if(line->clockwise_polygon_owner != NONE ||
485+ line->counterclockwise_polygon_owner != NONE)
467486 {
468- //線を踏んでいる
469- //TODO 切断します
470- //TODO 点を追加して接続しなおします
471- onLine = true;
472- break;
487+ //ポリゴンに属する線
488+ //警告を出す。線を分断したりしない
489+ hpl::error::caution("cannot divide line , because line belongs to polygon (line's index:%d, clockwise polygon's index:%d, counterclockwise polygon's index:%d)",
490+ lineIndex, line->clockwise_polygon_owner, line->counterclockwise_polygon_owner);
491+ //独立した点を追加する
492+ endpoint_data ep;
493+ hpl::aleph::map::createPoint(wpoint, &ep, POINT_DISTANCE_EPSILON);
494+ newPointIndex = hpl::aleph::map::addEndpoint(ep);
495+ assert(newPointIndex != NONE);
496+ }else{
497+ //始点、終点の情報取得
498+ //endpoint_data* begin = get_endpoint_data(line->endpoint_indexes[0]);
499+ //endpoint_data* end = get_endpoint_data(line->endpoint_indexes[1]);
500+
501+ //線を削除
502+ hpl::aleph::map::deleteLine(lineIndex);
503+ //点を追加
504+ endpoint_data ep;
505+ assert(hpl::aleph::map::createPoint(wpoint, &ep, POINT_DISTANCE_EPSILON));
506+ newPointIndex = hpl::aleph::map::addEndpoint(ep);
507+ assert(newPointIndex != NONE);
508+ endpoint_data *newEp = get_endpoint_data(newPointIndex);
509+
510+ //始点→点の線を追加
511+ line_data newLine1;
512+ assert(hpl::aleph::map::createLine(line->endpoint_indexes[0], line->endpoint_indexes[1], &newLine1));
513+ int newLine1Index = hpl::aleph::map::addLine(newLine1);
514+ assert(newLine1Index != NONE);
515+
516+ //点→終点の線を追加
517+ line_data newLine2;
518+
473519 }
474- }
475- if(onLine){
476520 }else{
477521 //新規追加
478522 if(wxGetApp().isFirstOfLineToAdd){
@@ -618,7 +662,7 @@
618662 emgr->setSelectingGroup(false);
619663
620664 //ポリゴン状態を更新します
621- wxGetApp().updatePolygonValidityStored();
665+ wxGetApp().getStockManager()->updatePolygonValidityStored();
622666 Refresh();
623667 }
624668
@@ -631,12 +675,12 @@
631675 hpl::aleph::view::HPLViewGridManager* vmgr = wxGetApp().getViewGridManager();
632676 hpl::aleph::HPLEventManager* emgr = wxGetApp().getEventManager();
633677
634- if(sel->isSelectOneObject){
678+ if(sel->isSelectOneObject()){
635679 //オブジェクトを選択していたら
636680 //オブジェクト情報ダイアログ表示
637681 //TODO
638682 this->objPropDialog.Show(true);
639- }else if(sel->isSelectOnePolygon){
683+ }else if(sel->isSelectOnePolygon()){
640684 //ポリゴン情報ダイアログ表示
641685 }
642686 //TODO
@@ -807,8 +851,8 @@
807851 int my = ev.m_y;
808852 if(ev.ButtonIsDown(wxMOUSE_BTN_LEFT)){
809853 if(updatePolygonValidityCount >= UPDATE_POLYGON_VALIDITY_INTERVAL){
810- //ポリゴン整合性
811- //TODO
854+ //ポリゴン整合性を更新
855+ wxGetApp().getStockManager()->updatePolygonValidityStored();
812856 }
813857
814858 //左ボタンを押しながら動いている
@@ -931,6 +975,9 @@
931975 hpl::aleph::view::HPLViewGridManager* vmgr = wxGetApp().getViewGridManager();
932976 int div = vmgr->getZoomDivision();
933977
978+ int mx = ev.m_x;
979+ int my = ev.m_y;
980+
934981 if(sel->isSelected()){
935982 //選択中
936983 //選択物の移動
@@ -989,14 +1036,20 @@
9891036 }
9901037 void MapEditorMainFrame::doMouseMotionOnLineTool(wxMouseEvent& ev)
9911038 {
1039+ hpl::aleph::view::HPLViewGridManager* vmgr = wxGetApp().getViewGridManager();
1040+
1041+ int voffset[2];
1042+ vmgr->getOffset(voffset);
9921043 //点を踏んでいないか確認
9931044 int endpointIndex = NONE;
9941045 bool found = false;
1046+ int div = vmgr->getZoomDivision();
1047+
9951048 world_point2d wmp = wxGetApp().getWorldPointFromViewPoint(ev.m_x, ev.m_y);
9961049 for(int i = 0; i < (int)EndpointList.size(); i ++){
9971050 endpoint_data* ep = get_endpoint_data(i);
9981051 if(!wxGetApp().getViewGridManager()->isValidHeight(
999- ep->highest_adjacent_floor_height, ep->lowest_adjacent_ceiling_height)
1052+ ep->highest_adjacent_floor_height, ep->lowest_adjacent_ceiling_height))
10001053 {
10011054 continue;
10021055 }
--- marathon/trunk/MapEditorWX/src/MapEditorWX.h (revision 340)
+++ marathon/trunk/MapEditorWX/src/MapEditorWX.h (revision 341)
@@ -192,14 +192,13 @@
192192 /** ビュー&グリッドマネージャー */
193193 hpl::aleph::view::HPLViewGridManager viewGridManager;
194194
195-
196195 //イベント管理
197196 hpl::aleph::HPLEventManager eventManager;
198197
199- //ポリゴンを高さ順に表示する際の順番
200- //TODO poly height order
201- std::vector<int> polygonDrawOrderByHeight;
198+ //ストック情報管理
199+ hpl::aleph::HPLStockManager stockManager;
202200
201+
203202 //ツールごとのカーソル
204203 wxCursor cursors[ToolType::NUMBER_OF_TOOLS];
205204
@@ -221,19 +220,13 @@
221220 */
222221 bool initialize();
223222
224- //////////////////////////
225- // ポリゴン整合性
226- //ポリゴンが正しいかどうかを検査します(高速版)
227- bool isPolygonValidityStored(int polyIndex);
228223
229- //ポリゴン整合性情報を更新します
230- void updatePolygonValidityStored();
231-
232- std::vector<bool> polygonValidity;
233-
234224 //イベントマネージャーを取得します
235225 hpl::aleph::HPLEventManager* getEventManager();
236226
227+ //ストックマネージャを取得します
228+ hpl::aleph::HPLStockManager* getStockManager();
229+
237230 //ビュー座標をワールド座標に直す操作の簡易版
238231 world_point2d getWorldPointFromViewPoint(int vx, int vy);
239232 //
--- marathon/trunk/MapEditorWX/src/MainFrameMenuEvent.cpp (revision 340)
+++ marathon/trunk/MapEditorWX/src/MainFrameMenuEvent.cpp (revision 341)
@@ -30,13 +30,6 @@
3030 wxGetApp().isChanged = false;
3131
3232 //ついでにレベル設定
33- this->OnNewLevel(ev);
34-
35- Refresh();
36-}
37-void MapEditorMainFrame::OnNewLevel(wxCommandEvent& ev)
38-{
39- //新規レベルの追加
4033 //TODO
4134 //レベル設定ダイアログ表示
4235 LevelInfoDialog dlg;
@@ -44,8 +37,21 @@
4437 dlg.ShowModal();
4538 //内容をマップデータに反映
4639 //TODO
40+
41+ //削除対象の覚え書きを初期化
42+ wxGetApp().getStockManager()->toDeleteList.clear();
43+
44+ Refresh();
4745 }
46+void MapEditorMainFrame::OnNewLevel(wxCommandEvent& ev)
47+{
48+ //新規レベル作成
49+ //TODO 不要?
50+ //マージされているマップは保存できない
4851
52+
53+}
54+
4955 void MapEditorMainFrame::OnOpen(wxCommandEvent& WXUNUSED(ev))
5056 {
5157 //TODO 未セーブチェック
--- marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 340)
+++ marathon/trunk/MapEditorWX/WXTODOリスト.txt (revision 341)
@@ -120,3 +120,25 @@
120120 ?u?O??N???b?N?_?v?̍X?V
121121
122122 TODO ??ɏ????????̒lj????????쐬
123+
124+???^??
125+std::map<int,int>?̗v?f????폜(erase)?????ꍇ?A?e?v?f?̃|?C???^?i???????ʒu?j?͂ǂ??Ȃ?̂??H
126+?܂?vector,list?́H
127+???폜?ł??邪?A?|?C???^?͑????ŕω????Ă??܂??B
128+
129+???폜?E?lj?
130+?E?lj?
131+?lj??͂????R?ɁBdynamic_world?̒l???ύX????
132+?E?폜
133+?폜???Ă??܂??Ə??Ԃ??΂?΂?ɂȂ??Ă??܂??B
134+?폜?⏇?Ԃ̐????͕ۑ????Ȃǂɂ܂Ƃ߂čs???悤?ɂ???B
135+???̂??߂ɂ͍폜?\??̃t???O??ʌ‚ŗp?ӂ???K?v??????B
136+
137+????(fix)????^?C?~???O??
138+?P?F?ۑ???
139+?Q?F?ҏW????i????????
140+?R?F
141+
142+?\?????͍폜?Ώۂ??X?L?b?v????΂悢?B
143+Fix???ɏ??Ԑ?????????
144+
--- marathon/trunk/MapEditorCommonSrc/MapEditorOneSetting.h (revision 340)
+++ marathon/trunk/MapEditorCommonSrc/MapEditorOneSetting.h (revision 341)
@@ -71,6 +71,17 @@
7171 static char* TAG_NAME_FILE_PATH = "data/InnerSettingTagList.ini";
7272 static char* INNER_DATA_FILE_PATH = "data/InnerSetting.ini";
7373
74+//point flags
75+enum
76+{
77+ POINT_FLAG_SOLID = 1,
78+ POINT_FLAG_MULTI_HIGHEST = 2,
79+ POINT_FLAG_TRANSPARENCY = 4,
80+
81+ NUMBER_OF_POINT_FLAGS
82+};
83+
84+
7485 #include <vector>
7586 #include <string>
7687 #include <cstdio>
--- marathon/trunk/HPLLib/HPLViewGridManager.cpp (revision 340)
+++ marathon/trunk/HPLLib/HPLViewGridManager.cpp (revision 341)
@@ -3,6 +3,7 @@
33 #include "HPLMath.h"
44 #include <limits.h>
55 #include "HPLError.h"
6+#include "HPLMapTool.h"
67
78 /**
89 ビューの次元
@@ -173,10 +174,7 @@
173174 //高さチェック
174175 bool hpl::aleph::view::HPLViewGridManager::isValidHeight(int zMin, int zMax)
175176 {
176- if(zMin > this->getViewHeightMax() ||
177- zMax < this->getViewHeightMin())
178- {
179- return false;
180- }
181- return true;
177+ //高さチェック
178+ bool result = hpl::aleph::map::isValidHeight(zMin, zMax, this->getViewHeightMin(), this->getViewHeightMax());
179+ return result;
182180 }
--- marathon/trunk/HPLLib/HPLMapTool.cpp (revision 340)
+++ marathon/trunk/HPLLib/HPLMapTool.cpp (revision 341)
@@ -132,19 +132,63 @@
132132 @return その場所に点があればそのインデックスがかえります。
133133 なければNONE
134134 */
135-int hpl::aleph::map::getSelectPointIndex(world_point2d& wpoint, int threshold)
135+int hpl::aleph::map::getSelectPointIndex(world_point2d& wpoint, int threshold, int zMin, int zMax)
136136 {
137- int pointIndex = NONE;
138137 for(int i = 0; i < (int)EndpointList.size(); i ++){
139138 endpoint_data* ep = get_endpoint_data(i);
139+ //高さチェック
140+ if(!hpl::aleph::map::isValidHeight(ep->highest_adjacent_floor_height, ep->lowest_adjacent_ceiling_height, zMin, zMax)){
141+ continue;
142+ }
140143 if(hpl::aleph::map::isSelectPoint(wpoint, ep->vertex, threshold)){
141- pointIndex = i;
142- break;
144+ return i;
143145 }
144146 }
145- return pointIndex;
147+ return NONE;
146148 }
147149
150+/**
151+ ある高さが規定範囲内にあるかを確かめます
152+ @return ある高度の範囲が規定範囲と共有する部分を持たない場合負
153+*/
154+bool hpl::aleph::map::isValidHeight(int checkMin, int checkMax, int validMin, int validMax)
155+{
156+ if(checkMin > checkMax || checkMin > validMax || checkMax < validMin){
157+ //・高さ指定が逆
158+ //・床が許容範囲より上にある
159+ //・天井が許容範囲より下にある
160+ //→以上の場合規定範囲外(不正)とみなす
161+ return false;
162+ }else{
163+ return true;
164+ }
165+}
166+/**
167+ 指定した点が線を踏んでいる場合、その点
168+*/
169+int hpl::aleph::map::getSelectLineIndex(world_point2d& wpoint, int threshold, int zMin, int zMax)
170+{
171+ for(int i = 0; i < (int)LineList.size(); i ++){
172+ line_data* line = get_line_data(i);
173+ //高さチェック
174+ if(!hpl::aleph::map::isValidHeight(line->highest_adjacent_floor, line->lowest_adjacent_ceiling,
175+ zMin, zMax))
176+ {
177+ continue;
178+ }
179+
180+ endpoint_data* begin = get_endpoint_data(line->endpoint_indexes[0]);
181+ endpoint_data* end = get_endpoint_data(line->endpoint_indexes[1]);
182+
183+ //選択しているか判定
184+ if(hpl::aleph::map::isSelectLine(wpoint, begin->vertex, end->vertex, threshold)){
185+ //選択できている(online)
186+ return i;
187+ }
188+ }
189+ return NONE;
190+}
191+
148192 /////////////////////// Lines ////////////////////////////////////////////
149193
150194 bool hpl::aleph::map::isSelectLine(int viewPX, int viewPY,
@@ -865,12 +909,13 @@
865909 int threshold)
866910 {
867911 //TODO
868- ep->flags = POINT_FLAG_SOLID;
912+ ep->flags = 1;
869913 ep->vertex.x = wpoint.x;
870914 ep->vertex.y = wpoint.y;
871915
872916 //他の点を踏んでいないか確認
873- int pIndex = hpl::aleph::map::getSelectPointIndex(wpoint, threshold);
917+ int pIndex = hpl::aleph::map::getSelectPointIndex(wpoint, threshold,
918+ -SHRT_MIN, SHRT_MAX);
874919 if(pIndex != NONE){
875920 //踏んでる
876921 //→作成できない
@@ -884,14 +929,14 @@
884929 /**
885930 @param polyIndex 載せるポリゴンのインデックス
886931 */
887-bool hpl::aleph::map::createObject(worldpoint2d& wpoint, int polyIndex, map_object* obj,
932+bool hpl::aleph::map::createObject(world_point2d& wpoint, int polyIndex, map_object* obj,
888933 int flags)
889934 {
890935 //TODO
891- obj->polygon_index = polygonIndex;
936+ obj->polygon_index = polyIndex;
892937 obj->location.x = wpoint.x;
893938 obj->location.y = wpoint.y;
894- polygon_data* poly = get_polygon_data(polygonIndex);
939+ polygon_data* poly = get_polygon_data(polyIndex);
895940 if(poly == NULL){
896941 return false;
897942 }
--- marathon/trunk/HPLLib/HPLStockManager.cpp (nonexistent)
+++ marathon/trunk/HPLLib/HPLStockManager.cpp (revision 341)
@@ -0,0 +1,82 @@
1+#include "HPLStockManager.h"
2+
3+#include "map.h"
4+
5+hpl::aleph::HPLStockManagerHPLStockManager()
6+{
7+}
8+hpl::aleph::HPLStockManager~HPLStockManager()
9+{
10+}
11+
12+//ポリゴンが正しいかどうかを検査します(高速版)
13+bool hpl::aleph::HPLStockManager::isPolygonValidityStored(int polyIndex)
14+{
15+ if(polyIndex < 0){
16+ return false;
17+ }else if(polyIndex >= (int)this->polygonValidity.size()){
18+ //存在しないもの
19+ //更新
20+ updatePolygonValidityStored();
21+ if(polyIndex >= (int)this->polygonValidity.size()){
22+ //それでもやっぱりない→無視
23+ return false;
24+ }
25+ }
26+
27+ return this->polygonValidity[polyIndex];
28+}
29+
30+//ポリゴン整合性情報を更新します
31+void hpl::aleph::HPLStockManager::updatePolygonValidityStored()
32+{
33+ this->polygonValidity.clear();
34+ for(int i = 0; i < (int)PolygonList.size(); i ++){
35+ bool isValid = hpl::aleph::map::isValidPolygon(i);
36+ this->polygonValidity.push_back(isValid);
37+ }
38+
39+ //ついでに高さ順をソートする
40+ //this->polygonDrawOrderByHeight.clear();
41+}
42+
43+/**
44+ 削除情報を更新します。
45+ 具体的にはdynamic_worldの値に合わせて要素数を増加させます
46+ 増加分は削除対象ではないのですべてfalseです。
47+*/
48+void hpl::aleph::HPLStockManager::updateDeletes()
49+{
50+ //points
51+ for(int i = delPoints.size(); i < dynamic_world->endpoint_count; i ++){
52+
53+ }
54+}
55+
56+/**
57+ 削除情報を初期化
58+ 実際にはclearした後にdaupteDeletes()を呼んでるだけ
59+*/
60+void hpl::aleph::HPLStockManager::resetDeletes()
61+{
62+}
63+
64+bool hpl::aleph::HPLStockManager::deletePoint(int index)
65+{
66+ if(get_endpoint_data(index) == NULL){
67+ return false;
68+ }
69+ this->delPoints[index] = true;
70+}
71+bool hpl::aleph::HPLStockManager::deleteLine(int index)
72+{
73+}
74+bool hpl::aleph::HPLStockManager::deletePolygon(int index)
75+{
76+}
77+bool hpl::aleph::HPLStockManager::deleteSide(int index)
78+{
79+}
80+bool hpl::aleph::HPLStockManager::deleteObject(int index)
81+{
82+}
--- marathon/trunk/HPLLib/HPLSelectData.h (revision 340)
+++ marathon/trunk/HPLLib/HPLSelectData.h (revision 341)
@@ -8,6 +8,7 @@
88 #include "map.h"
99 #include "wad.h"
1010 #include <vector>
11+//#include <set>
1112
1213 namespace hpl{
1314 namespace aleph{
--- marathon/trunk/HPLLib/HPLMapTool.h (revision 340)
+++ marathon/trunk/HPLLib/HPLMapTool.h (revision 341)
@@ -123,11 +123,25 @@
123123
124124 /**
125125 指定した場所に点があるかどうかを得ます
126+ @param wpoint ワールド座標の点
127+ @param threshold 点との距離がこれ以下ならば近いと見なす
128+ @param zMin, zMax 高さチェック用
126129 @return その場所に点があればそのインデックスがかえります。
127130 なければNONE
128131 */
129- int getSelectPointIndex(world_point2d& wpoint, int threshold);
132+ int getSelectPointIndex(world_point2d& wpoint, int threshold, int zMin, int zMax);
133+
134+ /**
135+ ある高さが規定範囲内にあるかを確かめます
136+ @return ある高度の範囲が規定範囲と共有する部分を持たない場合負
137+ */
138+ bool isValidHeight(int checkMin, int checkMax, int validMin, int validMax);
130139
140+ /**
141+ 指定した点が線を踏んでいる場合、その点
142+ */
143+ int getSelectLineIndex(world_point2d& wpoint, int threshold, int zMin, int zMax);
144+
131145 /////////////////////// Lines ////////////////////////////////////////////
132146 /**
133147 指定した点を用いたときに線を選択できているかを判定
@@ -313,6 +327,9 @@
313327 int addMapSavedObject(map_object object);
314328 int addAnnotation(map_annotation annotation);
315329
330+ //TODO
331+ int getEndpointIndexFromAddress(endpoint_data* ep);
332+
316333 /**
317334 簡略バージョン
318335 */
@@ -321,7 +338,7 @@
321338 /**
322339 @param polyIndex 載せるポリゴンのインデックス
323340 */
324- bool createObject(worldpoint2d& wpoint, int polyIndex, map_object* obj,
341+ bool createObject(world_point2d& wpoint, int polyIndex, map_object* obj,
325342 int flags);
326343
327344 /**
@@ -336,12 +353,27 @@
336353 @param index 削除対象のインデックス
337354 @return 削除失敗時に偽。インデックスが正しくない場合など
338355 */
356+ /*
339357 bool deleteEndpoint(int index);
340358 bool deleteLine(int index);
341359 bool deleteSide(int index);
342360 bool deletePolygon(int index);
343361 bool deleteMapSavedObject(int index);
362+ */
363+ /**
364+ マップアイテム(点・線・Side・ポリゴン・オブジェクト)
365+ を削除します
366+ 手法としては、
367+ 1:線の端点など、参照元が削除対象となっている場合、
368+ ・参照をNONEにする
369+ ・自分自身も削除対象とする
370+ 2:
344371
372+ @param
373+ */
374+ bool deleteMapItems(std::vector<bool>* delPoints, std::vector<bool>* delLines, std::vector<bool>* delSides,
375+ std::vector<bool>* delPolygons, std::vector<bool>* delObjects);
376+
345377 /**
346378 ポリゴン情報を修正します
347379 TODO
--- marathon/trunk/HPLLib/HPLStockManager.h (nonexistent)
+++ marathon/trunk/HPLLib/HPLStockManager.h (revision 341)
@@ -0,0 +1,71 @@
1+#ifndef _HPL_STOCK_MANAGER_
2+#define _HPL_STOCK_MANAGER_
3+
4+#include <vector>
5+//#include <set>
6+
7+#include "HPLSelectData.h"
8+
9+namespace hpl{
10+namespace aleph{
11+ /**
12+ マップデータについての情報を蓄えておくクラス
13+ ・ポリゴンの整合性情報
14+ ・削除予定のマップアイテム
15+ */
16+ class HPLStockManager{
17+ private:
18+ /**ポリゴンの整合性*/
19+ std::vector<bool> polygonValidity;
20+
21+ //ポリゴンを高さ順に表示する際の順番
22+ //TODO poly height order
23+ std::vector<int> polygonDrawOrderByHeight;
24+
25+ //線の順番を高さ順にしたもの
26+ //TODO
27+
28+ std::vector<bool> delPoints;
29+ std::vector<bool> delLines;
30+ std::vector<bool> delPolygons;
31+ std::vector<bool> delSides;
32+ std::vector<bool> delObjects;
33+ public:
34+ HPLStockManager();
35+ ~HPLStockManager();
36+
37+ //////////////////////////
38+ // ポリゴン整合性
39+ //ポリゴンが正しいかどうかを検査します(高速版)
40+ bool isPolygonValidityStored(int polyIndex);
41+
42+ //ポリゴン整合性情報を更新します
43+ void updatePolygonValidityStored();
44+
45+ //削除対象の覚え書き
46+ //hpl::aleph::map::HPLSelectData toDeleteList;
47+
48+ /**
49+ 削除情報を更新します。
50+ 具体的にはdynamic_worldの値に合わせて要素数を増加させます
51+ 増加分は削除対象ではないのですべてfalseです。
52+ */
53+ void updateDeletes();
54+
55+ /**
56+ 削除情報を初期化
57+ 実際にはclearした後にdaupteDeletes()を呼んでるだけ
58+ */
59+ void resetDeletes();
60+
61+ bool deletePoint(int index);
62+ bool deleteLine(int index);
63+ bool deletePolygon(int index);
64+ bool deleteSide(int index);
65+ bool deleteObject(int index);
66+
67+ };
68+};
69+};
70+
71+#endif
--- marathon/trunk/HPLLib/HPLAlephLib.h (revision 340)
+++ marathon/trunk/HPLLib/HPLAlephLib.h (revision 341)
@@ -7,6 +7,7 @@
77 #include "HPLDoneHistory.h"
88 #include "HPLViewGridManager.h"
99 #include "HPLEventManager.h"
10+#include "HPLStockManager.h"
1011
1112 //一般向け
1213 #include "HPLMath.h"
--- marathon/trunk/HPLLib/HPLError.cpp (revision 340)
+++ marathon/trunk/HPLLib/HPLError.cpp (revision 341)
@@ -1,12 +1,19 @@
11 #include "HPLError.h"
22 #include "stdarg.h"
3+#include <cstdio>
4+#include <cstdlib>
35
46 const int BUF_MAX = 1024;
57
68 #ifdef WX
9+
710 #include <wx/wx.h>
8-#elif define(WIN32)
11+
12+#endif
13+#ifdef WIN32
14+
915 #include <windows.h>
16+
1017 #endif
1118
1219 /**
@@ -28,7 +35,8 @@
2835 #else
2936 wxMessageBox(message);
3037 #endif
31-#elif define(WIN32)
38+#endif
39+#ifdef WIN32
3240 // MessageBox(NULL,
3341 #endif
3442 fprintf(stderr, message);
旧リポジトリブラウザで表示