From e252951f9ca8b02b4e25700f6e731e06cc859c93 Mon Sep 17 00:00:00 2001 From: Charles Date: Wed, 6 Jun 2001 20:23:44 +0000 Subject: [PATCH] --- source/hazard/hcswitch.cpp | 16 +++++++++++- source/hazard/hcswitch.h | 1 + source/level/level.cpp | 51 ++++++++++++++++++++++++++++++++++++++ source/level/level.h | 2 ++ tools/MapEdit/Hazard.ini | 4 +-- 5 files changed, 71 insertions(+), 3 deletions(-) diff --git a/source/hazard/hcswitch.cpp b/source/hazard/hcswitch.cpp index 7a45549dd..31c76d0ad 100644 --- a/source/hazard/hcswitch.cpp +++ b/source/hazard/hcswitch.cpp @@ -23,6 +23,10 @@ #include "utils\utils.h" #endif +#ifndef __GAME_GAME_H__ +#include "game\game.h" +#endif + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -92,8 +96,15 @@ void CNpcConveyorSwitchHazard::setWaypoints( sThingHazard *ThisHazard ) CHazardTrigger *trigger; trigger=(CHazardTrigger*)CTrigger::Create(CTrigger::TRIGGER_HAZARD); - trigger->setPositionAndSize( ( newXPos << 4 ) + 8, ( newYPos << 4 ) + 16, 100, 0 ); + trigger->setPositionAndSize( ( newXPos << 4 ) + 8 - 50, ( newYPos << 4 ) + 16, 100, 0 ); trigger->setHazard( this ); + + newXPos = (u16) *PntList; + PntList++; + newYPos = (u16) *PntList; + PntList++; + m_conveyorPos.vx = ( newXPos << 4 ) + 8; + m_conveyorPos.vy = ( newYPos << 4 ) + 8; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -101,4 +112,7 @@ void CNpcConveyorSwitchHazard::setWaypoints( sThingHazard *ThisHazard ) void CNpcConveyorSwitchHazard::trigger() { m_reversed = !m_reversed; + + CLevel &level = GameScene.GetLevel(); + level.reverseMapConveyor( m_conveyorPos ); } \ No newline at end of file diff --git a/source/hazard/hcswitch.h b/source/hazard/hcswitch.h index f4e61b543..27efba2cc 100644 --- a/source/hazard/hcswitch.h +++ b/source/hazard/hcswitch.h @@ -29,6 +29,7 @@ protected: virtual void collidedWith(CThing *_thisThing) {} u8 m_reversed; + DVECTOR m_conveyorPos; }; #endif \ No newline at end of file diff --git a/source/level/level.cpp b/source/level/level.cpp index 3bbc99e52..e262249d3 100644 --- a/source/level/level.cpp +++ b/source/level/level.cpp @@ -708,6 +708,57 @@ DVECTOR DP; } } +/*****************************************************************************/ +/*****************************************************************************/ +/*****************************************************************************/ +void CLevel::reverseMapConveyor(DVECTOR const &Pos) +{ +DVECTOR TL,BR; + + + TL.vx=Pos.vx&-16;; + TL.vy=Pos.vy&-16;; + BR=TL; + +int ColT=CollisionLayer->getCollisionBlock(TL.vx,TL.vy)>>COLLISION_TYPE_FLAG_SHIFT; + +// if (CollisionLayer->getCollisionBlock(TL.vx,TL.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT)printf ("!!"); + +// Left + while (CollisionLayer->getCollisionBlock(TL.vx-16,TL.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT) TL.vx-=16; +// Top + while (CollisionLayer->getCollisionBlock(TL.vx,TL.vy-16)>>COLLISION_TYPE_FLAG_SHIFT==ColT) TL.vy-=16; +// Right + while (CollisionLayer->getCollisionBlock(BR.vx+16,BR.vy)>>COLLISION_TYPE_FLAG_SHIFT==ColT) BR.vx+=16; +// Bottom + while (CollisionLayer->getCollisionBlock(BR.vx,BR.vy+16)>>COLLISION_TYPE_FLAG_SHIFT==ColT) BR.vy+=16; + +DVECTOR DP; + + for (DP.vy=TL.vy; DP.vy<=BR.vy; DP.vy+=16) + { + for (DP.vx=TL.vx; DP.vx<=BR.vx; DP.vx+=16) + { + u8 *ColElem=CollisionLayer->getMapPtr(DP.vx,DP.vy); + + if (*ColElem>>COLLISION_TYPE_FLAG_SHIFT==ColT) + { + if ( ColT == COLLISION_TYPE_MOVE_LEFT ) + { + *ColElem &= ~COLLISION_TYPE_FLAG_MOVE_LEFT; + *ColElem |= COLLISION_TYPE_FLAG_MOVE_RIGHT; + } + else if ( ColT == COLLISION_TYPE_MOVE_RIGHT ) + { + *ColElem &= ~COLLISION_TYPE_FLAG_MOVE_RIGHT; + *ColElem |= COLLISION_TYPE_FLAG_MOVE_LEFT; + } + } + + } + } +} + /*****************************************************************************/ void CLevel::destroyMapTile(DVECTOR const &Pos) { diff --git a/source/level/level.h b/source/level/level.h index cb1f4f89c..3d10e3cbf 100644 --- a/source/level/level.h +++ b/source/level/level.h @@ -46,6 +46,8 @@ static int getTotalSpatCount() {return( LvlTable[s_globalLevelSelectThin void destroyMapArea(DVECTOR const &Pos); void destroyMapTile(DVECTOR const &Pos); + void reverseMapConveyor(DVECTOR const &Pos); + int getActorCount() {return ActorCount;} sThingActor **getActorList() {return ActorList;} int getPlatformCount() {return PlatformCount;} diff --git a/tools/MapEdit/Hazard.ini b/tools/MapEdit/Hazard.ini index 4ffe877e7..6588aac74 100644 --- a/tools/MapEdit/Hazard.ini +++ b/tools/MapEdit/Hazard.ini @@ -261,8 +261,8 @@ AttackStrength=0 Respawn=1 [ConveyorSwitch] -Gfx=..\..\graphics\hazards\water_bucket\water_bucket.gin -WayPoints=0 +Gfx=..\..\graphics\hazards\redswitch\redswitch.gin +WayPoints=2 Speed=0 TurnRate=0 Collision=0