GearsOfWar3 에서의 SpecialMove 방식

기본적인 규칙은 GoW2 때의 방식과 같다. 하지만 GoW3 에서는 좀 더 예외처리를 강화하였다.

GoW2 의 것을 먼저 나열하고 GoW3 에서 보완된 점을 설명한다.

SpecialMove

GoW2 에서 SpecialMove 방식에 대해 설명한다.

함수

Pawn (GearPawn)

  • DoSpecialMove( … )
    • SpecialMove 를 수행한다.
    • caller 가 Client 인 경우 복제되지 않고 local 에서 SM 을 수행한다.
    • caller 가 Server 인 경우 복제가 된다. 이때 주체가 아닌 (bNetOwner==FALSE) 대상에게만 복제된다는 사실에 주의하자.
  • EndSpecialMove( … )
    • SpecialMove 를 종료한다.
    • 내부적으로 DoSpecialMove 를 이용하기 때문에 복제규칙은 DoSpecialMove 와 같다.
  • LocalEndSpecialMove( … )
    • (반드시) LocallyControlled 한 녀석의 SM 을 종료하기 위한 함수
    • caller 가 LocallyControlled 한 녀석에 대해서 복제가 고려되어 있는 함수
    • caller 가 Client 인 경우 local 에서 SM 을 수행하고 Server 로 함수복제를 통해 다른 Client 들에게 알린다.
    • caller 가 Server 인 경우 local 에서 SM 을 수행하고 그로인해 자동으로 다른 Client 들에게 복제된다.
  • ServerEndSpecialMove( … )
    • (반드시) Server 에서 SM 을 종료하기 위한 함수
    • caller 가 Server 인 녀석에 대해서 복제가 고려되어 있는 함수
    • caller 가 Client 일 수는 없다!!
    • caller 가 Server 인 경우 local 에서 SM 을 수행하고 그로인해 자동으로 다른 Client 들에게 복제된다.

PlayerController (GearPC)

  • DoSpecialMove( … )
    • SpecialMove 를 수행한다.
    • 모든 상황에 대한 복제가 고려되어 있는 함수
    • 이것을 엔트리 함수로 호출하면 보통 문제없이 복제된다.
  • EndSpecialMove()
    • SpecialMove 를 종료한다.
    • 모든 상황에 대한 복제가 고려되어 있는 함수
    • 이것을 엔트리 함수로 호출하면 보통 문제없이 복제된다.
  • ClientToServerDoSpecialMove( … )
    • Server 함수
    • Server 에 있는 자신의 Pawn 에게 SpecialMove 를 수행하도록 한다. (이 과정에서 자신이 아닌 다른 Client 들에게 복제하라는 의도도 포함되어 있다.)
    • caller 가 Client 인 경우 그 Client 는 local 에서 SM 을 별도로 수행해야 한다.
    • caller 가 Server 인 경우는 없어야 한다. 한가지 예외가 있는데 caller 가 Server 함수이고 그 함수의 caller 가 Client 인 경우이다. 이 때에는 주인인 Client 를 제외하고 나머지에게 복제하려는 의도로 사용된다. (무언가 오류를 바로잡기 위해.. GearPlayerController:RoadieServerMove 를 참조. 여기에서만 사용된다.)
  • ServerToClientDoSpecialMove( … )
    • Client 함수
    • Client 에 있는 Pawn 에게 SpecialMove 를 수행하도록 한다.
    • 어떠한 복제도 고려되어 있지 않고 오로지 Client 에게 시뮬레이션하기 위한 함수이다.
  • ServerDicateSpecialMove( … )
    • (반드시) Server 에서 SM 을 시작하기 위한 함수
    • caller 가 Server 인 녀석에 대해서 복제가 고려되어 있는 함수
    • caller 가 Client 일 수는 없다!!
    • caller 가 Server 인 경우 local 에서 SM 을 수행하고 그로인해 자동으로 다른 Client 들에게 복제된다.
    • Pawn.ServerEndSpecialMove 와 시나리오가 비슷하다.

정책

SpecialMove 사이의 연결

SM 에서 다른 SM 으로 연결하는 방식은 크게 두가지가 있다. 편의상 기존 SM 을 OldSM, 새로운 SM 을 NewSM 이라 칭하겠다.

  • 첫째는 OldSM 의 진행도중 NewSM 으로 Override 하는 방식 (override)
  • 둘째는 OldSM 을 모두 끝마친 후 바로 NewSM 을 수행하는 방식 (pending)

이 두가지 방식을 정의하는 것은 GearSpecialMove 클래스의 CanOverrideMoveWith, CanOverrideSpecialMove, CanChainMove 함수를 구현함으로써 가능하다.

  • CanOverrideMoveWith 는 OldSM 에서 정의하며, 파라메터로 들어오는 NewSM 로 대체 (override) 해도 괜찮은지를 정의한다.
  • CanOverrideSpecialMove 는 NewSM 에서 정의하며, 파라메터로 들어오는 OldSM 을 이것으로 대체 (override) 해도 괜찮은지를 정의한다.
  • CanChainMove 는 OldSM 에서 정의하며, 파라메터로 들어오는 NewSM 을 이어서 수행 (pending) 할지를 정의한다.

:!: 그리고 override 를 우선적으로 검사하고 만족하지 못할 경우에 pending 을 검사한다.

이에 관한 로직은 GearPawn::DoSpecialMove 에서 참조할 수 있다.

2011/05/16 23:03 · z3moon

GearsOfWar3 에서 보완된 점

추가보완된 함수

Pawn (GearPawn)

PlayerController (GearPC)

  • ClientVerifySpecialMove( … )ClientToServerDoSpecialMove( … ) 로부터 호출
    • client 가 server 에게 요청한 SM 이 실패한 경우 server 로부터 client 측으로 호출되는 복제함수
    • 즉 sync 가 맞지 않기 때문에 client 측에게 현재 SM 에 대하여 다시 전송을 요청하는 것이다.
  • ServerVerifySpecialMove( … )ServerToClientDoSpecialMove( … )
    • server 가 client 에게 요청한 SM 이 실패한 경우 client 로부터 server 측으로 호출되는 복제함수
    • server 가 여전히 그 SM 을 수행 중이라면 client 로 다시 전송한다.
  • ClientToServerUpdateSpecialMoveFlags( … )DoSpecialMove( … )
    • 규칙은 ClientToServerDoSpecialMove 와 같다.
    • server 에서 이미 수행중인 SM 의 flag 를 업데이트 한다. SM 이 중단되지 않았다는 것을 확인해야 한다.
  • ServerToClientUpdateSpecialMoveFlags( … )ServerDictateSpecialMove( … )
    • 규칙은 ServerToClientDoSpecialMove 와 같다.
    • client 에서 이미 수행중인 SM 의 flag 를 업데이트 한다. SM 이 중단되지 않았다는 것을 확인해야 한다.