Ticket #1163: 1163.diff
File 1163.diff, 6.6 KB (added by , 9 years ago) |
---|
-
source/tools/atlas/AtlasUI/ScenarioEditor/Tools/PlaceObject.cpp
1 /* Copyright (C) 201 3Wildfire Games.1 /* Copyright (C) 2015 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 181 181 return true; 182 182 else if (evt.LeftUp()) 183 183 { 184 obj->m_Target = Position(evt.GetPosition()); 185 // Create the actual object 186 obj->SendObjectMsg(false); 184 AtlasMessage::qCanPlaceObject canPlaceObject; 185 canPlaceObject.Post(); 186 187 if (canPlaceObject.response) 188 { 189 obj->m_Target = Position(evt.GetPosition()); 190 // Create the actual object 191 obj->SendObjectMsg(false); 192 } 187 193 // Go back to preview mode 188 194 SET_STATE(Waiting); 189 195 obj->m_ObjPos = obj->m_ScreenPos = obj->m_Target; -
source/tools/atlas/AtlasUI/ScenarioEditor/Tools/TransformObject.cpp
1 /* Copyright (C) 201 4Wildfire Games.1 /* Copyright (C) 2015 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 366 366 { 367 367 if (evt.LeftUp()) 368 368 { 369 AtlasMessage::qCanPlaceObject canPlaceObject; 370 canPlaceObject.Post(); 371 372 if (!canPlaceObject.response) 373 { 374 ScenarioEditor::GetCommandProc().FinaliseLastCommand(); 375 ScenarioEditor::GetCommandProc().Undo(); 376 } 369 377 SET_STATE(Waiting); 370 378 return true; 371 379 } … … 536 544 } 537 545 else if (evt.LeftDown()) 538 546 { 539 //Place the object and update 540 obj->OnPasteEnd(false); 547 AtlasMessage::qCanPlaceObject canPlaceObject; 548 canPlaceObject.Post(); 549 550 if (canPlaceObject.response) 551 obj->OnPasteEnd(false); //Place the object and update 552 541 553 return true; 542 554 } 543 555 else -
source/tools/atlas/GameInterface/Handlers/ObjectHandlers.cpp
1 /* Copyright (C) 201 4Wildfire Games.1 /* Copyright (C) 2015 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 48 48 #include "simulation2/components/ICmpSelectable.h" 49 49 #include "simulation2/components/ICmpTemplateManager.h" 50 50 #include "simulation2/components/ICmpVisual.h" 51 #include "simulation2/components/ICmpObstruction.h" 51 52 #include "simulation2/helpers/Selection.h" 52 53 #include "ps/XML/XMLWriter.h" 53 54 … … 61 62 } 62 63 } 63 64 65 //Helpers for object constraints 66 bool CanPlaceObjectEntityHelper(entity_id_t ent) 67 { 68 CmpPtr<ICmpObstruction> cmpObstruction(*g_Game->GetSimulation2(), ent); 69 if (!cmpObstruction) 70 return true; 71 else 72 { 73 //use default passClasName. 74 ICmpObstruction::EFoundationCheck result = cmpObstruction->CheckFoundation("default"); 75 if (result != ICmpObstruction::FOUNDATION_CHECK_SUCCESS) 76 return false; 77 } 78 return true; 79 } 80 81 void CheckObstructionAndUpdateVisual(entity_id_t id) 82 { 83 //Check build Constraint 84 CmpPtr<ICmpVisual> cmpVisual(*g_Game->GetSimulation2(), id); 85 if(cmpVisual) 86 { 87 //use default passClasName and by false. 88 if (!CanPlaceObjectEntityHelper(id)) 89 cmpVisual->SetShadingColour(fixed::FromDouble(1.4), fixed::FromDouble(0.4), fixed::FromDouble(0.4), fixed::FromDouble(1)); 90 else 91 cmpVisual->SetShadingColour(fixed::FromDouble(1), fixed::FromDouble(1), fixed::FromDouble(1), fixed::FromDouble(1)); 92 } 93 } 94 95 bool CanPlaceObjectListHelper(std::vector<entity_id_t>::const_iterator start, std::vector<entity_id_t>::const_iterator end) 96 { 97 std::vector<entity_id_t>::const_iterator i; 98 for (i = start; i != end; i++) 99 { 100 entity_id_t ent = *i; 101 if (!CanPlaceObjectEntityHelper(ent)) 102 return false; 103 } 104 return true; 105 } 106 64 107 QUERYHANDLER(GetObjectsList) 65 108 { 66 109 std::vector<sObjectsListItem> objects; … … 375 418 msg->ids = g_Selection; 376 419 } 377 420 421 QUERYHANDLER(CanPlaceObject) 422 { 423 msg->response = true; //by default 424 425 if (g_PreviewEntitiesID.size() > 0) 426 { 427 msg->response = CanPlaceObjectListHelper(g_PreviewEntitiesID.begin(), g_PreviewEntitiesID.end()); 428 } 429 else if (g_Selection.size() > 0) 430 { 431 msg->response = CanPlaceObjectListHelper(g_Selection.begin(), g_Selection.end()); 432 } 433 } 434 378 435 MESSAGEHANDLER(ObjectPreviewToEntity) 379 436 { 380 437 UNUSED2(msg); … … 473 530 posFinal = posFixed + dir; 474 531 } 475 532 cmpPosition->JumpTo(posFinal.X, posFinal.Z); 533 534 //Check build Constraint 535 CheckObstructionAndUpdateVisual(id); 476 536 } 477 537 } 478 538 … … 543 603 CmpPtr<ICmpOwnership> cmpOwnership(*g_Game->GetSimulation2(), g_PreviewEntityID); 544 604 if (cmpOwnership) 545 605 cmpOwnership->SetOwner((player_id_t)msg->settings->player); 606 607 //Check build Constraint 608 CheckObstructionAndUpdateVisual(g_PreviewEntityID); 546 609 } 547 610 } 548 611 … … 736 799 ObjectPositionMap::iterator it; 737 800 for (it = map.begin(); it != map.end(); ++it) 738 801 { 739 CmpPtr<ICmpPosition> cmpPosition(*g_Game->GetSimulation2(), (entity_id_t)it->first); 802 entity_id_t id = (entity_id_t)it->first; 803 CmpPtr<ICmpPosition> cmpPosition(*g_Game->GetSimulation2(), id); 740 804 if (!cmpPosition) 741 805 return; 742 806 … … 743 807 // Set 2D position, ignoring height 744 808 CVector3D pos = it->second; 745 809 cmpPosition->JumpTo(entity_pos_t::FromFloat(pos.X), entity_pos_t::FromFloat(pos.Z)); 810 811 //Check build Constraint 812 CheckObstructionAndUpdateVisual(id); 746 813 } 747 814 } 748 815 -
source/tools/atlas/GameInterface/Messages.h
1 /* Copyright (C) 201 4Wildfire Games.1 /* Copyright (C) 2015 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * 4 4 * 0 A.D. is free software: you can redistribute it and/or modify … … 345 349 ((std::vector<ObjectID>, ids)) 346 350 ); 347 351 352 // Check if current preview(s) object(s) can create or current selection move can place 353 QUERY(CanPlaceObject, 354 , //No inputs 355 ((bool, response)) 356 ); 348 357 // Moving Preview(s) object together, default is using the firs element in vector 349 358 MESSAGE(MoveObjectPreview, 350 359 ((Position,pos))