강아지발 이야기

타일맵과 몬스터 배치를좀더 센스있게

멋지다재규어 2017. 6. 22. 00:17

하루에 몇시간 안나지만

그래도 재미를 붙인것같다.


일단 저번까지 타일맵생성에 몬스터 배치까지는 했는데

(포스팅은 안했지만 몬스터 인공지능도 일단 준비해서 넣어뒀다.)


이몬스터가 벽위에도 서고 막, 구멍에도 서있고 이건아니잖아..

그래서 언덕도,벽도,구멍도아닌 일반 타일에만 서있게 했다.


로직은 심플하다

일단 타일맵 매니저가 맵정보를 갖고있고, 몬스터를 어디에 배치할지 정하는데

몬스터를 어디다 배치를 할지를 정해야하니까

맵을 먼저 생성시키는데 이 맵타일이 둘래는 벽이고

벽 이외에는 일단 지금은 별생각없이 완전랜덤인데

각 타일은 tileType을 enum으로 갖게되는데

그중 일반타일만 따로 추스려서 List에 집어넣고

그 일반타일 리스트를 랜덤으로 돌려서 몬스터 마릿수만큼 뽑아내고,

각 몬스터들을 차례대로 배치시키는..


이번에 좀 생각했던건

Enum을 int형으로 겟셋할려고할때 어찌하나..하고 고민해서

        private MobiusEnumSet.TileType tileType;
        public int TileType{
            get{
                return (int)tileType;
            }
            set{
    tileType = (MobiusEnumSet.TileType)TileType;
        }

이랬더니

겟은 되는데 셋이 안되는걸..

죄다 0이 셋 되버리는거다..


그래서 또 여기저기 물어보고 찾아보고

한 결과

        private MobiusEnumSet.TileType tileType;
        public int TileType{
            get{
                return (int)tileType;
            }
            set{
                if(Enum.IsDefined(typeof(MobiusEnumSet.TileType),value)){
     tileType = (MobiusEnumSet.TileType)value;

                }else{
                    tileType = MobiusEnumSet.TileType.wall;
                }
            }
        }

요래 쓰면 되는거였다.

셋에들어있는 value가 결국 기본적으로 셋에서 쓰이는 인수며,

이때 셋 안에 들어갈 (위의경우)TileType는 생략?무시 된다고 생각하면 됨


결국 이걸로 잘 움직이게 되어서,

        public void setTileType(int setTileType){
            tileType = (MobiusEnumSet.TileType)setTileType;
        }

요 함수는 필요없게돼었다.

아,

덤으로 홀타일이 연속으로 아래위에 배치될경우

위의 홀은 밑으로 이어질수있는 그래픽으로 재구성하게했다.

요것도 별 어려울건없고,

타일배치가 끝난후 

한번 더 for문으로 홀타일을 검색해서 그 홀타일의 밑타일을 검색해서 위의 겟셋을 이용해서

tileType을 비교해서 같은 홀일경우엔 그래픽을 변경시키는걸로 완료~


오늘까진 이정도 진척~

맵타일 그래픽 좀 더 준비 함


이제 몬스터 인공지능

(현재 3초마다 뭘할건지 행동을 정해서 그 행동을 할 수있도록 준비시켜둠)

을 좀 다듬어야(아니 다듬는 중이다 벌써..)


이거 왠지 생각보다 테스트가 빨리 진행되겠는걸?

'강아지발 이야기' 카테고리의 다른 글

맵생성과 캐릭터클래스  (0) 2017.06.12
타일맵 배치 제작  (0) 2017.06.07
오랜만에 다시시작  (0) 2017.05.24