• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

HandleSkill 내 Push(EnterGame, arrow) 함수 사용

20.10.01 11:41 작성 조회수 139

0

안녕하세요

HandleSkill함수는 PacketHandler.cs에서 room.Push(room.HandleSkill, player, skillPacket);에 의해서 호출되고 있는것 같습니다.

그렇다면 HandleSkill함수에 포함된 Push(EnterGame, arrow); 는 이미 Job으로 관리되고 있기 떄문에, (기존의 방식대로)  EnterGame(arrow); 로 호출해도 되는건지 궁금합니다~

public void HandleSkill(Player player, C_Skill skillPacket)

{

if (player == null)

return;

ObjectInfo info = player.Info;

if (info.PosInfo.State != CreatureState.Idle)

return;

// TODO : 스킬 사용 가능 여부 체크

info.PosInfo.State = CreatureState.Skill;

S_Skill skill = new S_Skill() { Info = new SkillInfo() };

skill.ObjectId = info.ObjectId;

skill.Info.SkillId = skillPacket.Info.SkillId;

Broadcast(skill);

Data.Skill skillData = null;

if (DataManager.SkillDict.TryGetValue(skillPacket.Info.SkillId, out skillData) == false)

return;

switch (skillData.skillType)

{

case SkillType.SkillAuto:

{

Vector2Int skillPos = player.GetFrontCellPos(info.PosInfo.MoveDir);

GameObject target = Map.Find(skillPos);

if (target != null)

{

Console.WriteLine("Hit GameObject !");

}

}

break;

case SkillType.SkillProjectile:

{

Arrow arrow = ObjectManager.Instance.Add<Arrow>();

if (arrow == null)

return;

arrow.Owner = player;

arrow.Data = skillData;

arrow.PosInfo.State = CreatureState.Moving;

arrow.PosInfo.MoveDir = player.PosInfo.MoveDir;

arrow.PosInfo.PosX = player.PosInfo.PosX;

arrow.PosInfo.PosY = player.PosInfo.PosY;

arrow.Speed = skillData.projectile.speed;

Push(EnterGame, arrow);

}

break;

}

}

답변 1

답변을 작성해보세요.

2

이미 Serializer에 의해 관리/실행되고 있는 함수 내부에서는
Push를 해서 새로운 Job으로 밀어넣어도 되고,
아니면 그냥 일반 함수처럼 호출해도 됩니다.
다만 이는 동일한 Serializer에서 실행하는 경우에만 그렇습니다.

지금은 간단한 규모/구조로 개발하고 있기 때문에
사실상 GameRoom 안에 1개의 Serializer가 있지만,
나중에 가면 하나의 GameRoom을 더 세부적인 영역으로 쪼개고
하나의 영역마다 Serializer를 배치하는 경우도 있고.
더 극단적으로는 하나의 객체(Player, Monster, NPC ...)마다
Serializer를 놓는 방식도 있습니다.

그런 경우에서 다른 Serializer로 일감을 넣고 싶으면
그냥 호출하면 안되고 무조건 Push를 해줘야겠죠.

그래서 일반적으로 실수의 여지를 줄이기 위해 그냥
Push를 하는 것이 더 좋다고 생각하지만,
이런 간단한 구조에서는 뭐로 해도 크게 상관 없습니다.