Exemplo n.º 1
0
 public int GetKeyType(Map.EWSN door_dir)
 {
     foreach (var door in doors)
     {
         if (door.door_dir == door_dir)
         {
             return(door.KeyType);
         }
     }
     Debug.LogError("The room doesn't the door having the " + door_dir + " door.");
     return(-1);
 }
Exemplo n.º 2
0
    // ================================================================ //

    // 문의 방향을 각도로 한다.
    protected float         door_dir_to_y_angle(Map.EWSN door_dir)
    {
        float y_angle = 0.0f;

        switch (door_dir)
        {
        case Map.EWSN.NORTH:    y_angle = 0.0f;       break;

        case Map.EWSN.SOUTH:    y_angle = 180.0f;       break;

        case Map.EWSN.EAST:             y_angle = 90.0f;       break;

        case Map.EWSN.WEST:             y_angle = -90.0f;       break;
        }

        return(y_angle);
    }
Exemplo n.º 3
0
    public void RegisterRoomWall(Map.EWSN dir, GameObject roomWallGO)
    {
        switch (dir)
        {
        case Map.EWSN.NORTH:
            northRoomWalls.Add(roomWallGO);
            break;

        case Map.EWSN.EAST:
            eastRoomWalls.Add(roomWallGO);
            break;

        case Map.EWSN.SOUTH:
            southRoomWalls.Add(roomWallGO);
            break;

        case Map.EWSN.WEST:
            westRoomWalls.Add(roomWallGO);
            break;
        }
    }
Exemplo n.º 4
0
    public void             dbArrowSetVisible(Map.BlockIndex bi, Map.EWSN ewsn, bool is_visible)
    {
        string arrow_name = "";

        switch (ewsn)
        {
        case Map.EWSN.EAST:             arrow_name = "DebugE";  break;

        case Map.EWSN.WEST:             arrow_name = "DebugW";  break;

        case Map.EWSN.SOUTH:    arrow_name = "DebugS";  break;

        case Map.EWSN.NORTH:    arrow_name = "DebugN";  break;
        }

        if (arrow_name != "")
        {
            GameObject arrow_go = this.floor_objects[bi.x, bi.z].findChildGameObject(arrow_name);

            arrow_go.SetActive(is_visible);
        }
    }
Exemplo n.º 5
0
    // 방 사이의 벽을 가져온다.
    public List <RoomWallControl> GetRoomWalls(Map.EWSN dir)
    {
        List <RoomWallControl> walls    = new List <RoomWallControl>();
        List <GameObject>      wall_gos = null;

        switch (dir)
        {
        case Map.EWSN.NORTH:
            wall_gos = northRoomWalls;
            break;

        case Map.EWSN.EAST:
            wall_gos = eastRoomWalls;
            break;

        case Map.EWSN.SOUTH:
            wall_gos = southRoomWalls;
            break;

        case Map.EWSN.WEST:
            wall_gos = westRoomWalls;
            break;
        }

        if (wall_gos != null)
        {
            foreach (var go in wall_gos)
            {
                if (go.GetComponent <RoomWallControl>() != null)
                {
                    walls.Add(go.GetComponent <RoomWallControl>());
                }
            }
        }
        return(walls);
    }
Exemplo n.º 6
0
    //룸 안에 초기 배치할 적을 만든다.
    public void             createRoomEnemies(RoomController room)
    {
#if true
        MapCreator map_creater   = MapCreator.get();
        Vector3    room_position = map_creater.getRoomCenterPosition(room.getIndex());

        string room_index = room.getIndex().x.ToString("D1") + room.getIndex().z.ToString("D1");
        string item_type, item_name;

        Room level_room = this.rooms[room.getIndex().x, room.getIndex().z];

        level_room.items.Clear();

        List <Map.BlockIndex> lair_places = map_creater.getLairPlacesRoom(room.getIndex());

        // FieldGenerator가 설정한 랜덤한 위치에 제네레이터를 배치.

        int n = 0;

        foreach (var lair_place in lair_places)
        {
            string enemy_name = "Enemy_Lair" + "." + room_index + "." + n.ToString("D3");

            chrBehaviorEnemy behavior = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name);

            if (behavior == null)
            {
                continue;
            }

            chrController chr = behavior.control;

            chrBehaviorEnemy_Lair lair = chr.behavior as chrBehaviorEnemy_Lair;

            // 쓰러뜨렸을 때 나타날 아이템.

            object item_option0 = null;

            if (n == 0)
            {
                item_type = "ice00";

                // 당첨, 탈락 추첨.
                item_option0 = this.item_lot.ice_atari.draw(this.rand.getRandom());
            }
            else
            {
                item_type = "cake00";
            }

            item_name = item_type + "_" + room_index + "_" + level_room.enter_count + "_" + n.ToString("D2");

            lair.setRewardItem(item_type, item_name, item_option0);
            level_room.items.Add(item_name);

            // 스폰할 적.

            chrBehaviorEnemy_Lair.SpawnEnemy spawn;

            spawn             = lair.resisterSpawnEnemy();
            spawn.enemy_name  = "Enemy_Obake";
            spawn.behave_kind = Enemy.BEHAVE_KIND.UROURO;
            spawn.behave_desc = null;
            spawn.frequency   = 1.0f;

            spawn             = lair.resisterSpawnEnemy();
            spawn.enemy_name  = "Enemy_Kumasan";
            spawn.behave_kind = Enemy.BEHAVE_KIND.TOTUGEKI;
            spawn.behave_desc = null;
            spawn.frequency   = 0.5f;

            spawn             = lair.resisterSpawnEnemy();
            spawn.enemy_name  = "Enemy_Obake";
            spawn.behave_kind = Enemy.BEHAVE_KIND.WARP_DE_FIRE;
            spawn.behave_desc = null;
            spawn.frequency   = 0.5f;

            spawn             = lair.resisterSpawnEnemy();
            spawn.enemy_name  = "Enemy_Kumasan";
            spawn.behave_kind = Enemy.BEHAVE_KIND.JUMBO;
            spawn.behave_desc = null;
            spawn.frequency   = 0.5f;

            spawn             = lair.resisterSpawnEnemy();
            spawn.enemy_name  = "Enemy_Obake";
            spawn.behave_kind = Enemy.BEHAVE_KIND.GOROGORO;
            spawn.behave_desc = null;
            spawn.frequency   = 0.5f;

            Vector3 position = map_creater.getBlockCenterPosition(lair_place);

            lair.control.cmdSetPositionAnon(room_position + position);
            lair.control.cmdSetDirectionAnon(135.0f);

            n++;
        }

        // 도어 앞에 파수꾼처럼 배치.
        for (int i = 0; i < (int)Map.EWSN.NUM; i++)
        {
            DoorControl door = room.getDoor((Map.EWSN)i);

            if (door == null)
            {
                continue;
            }

            string enemy_name = "Enemy_Kumasan" + "." + room_index + "." + i.ToString("D3");

            chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name);

            Map.RoomIndex  ri;
            Map.BlockIndex bi;

            map_creater.getBlockIndexFromPosition(out ri, out bi, door.getPosition());

            Vector3 position = door.getPosition();
            float   angle    = 0.0f;

            Map.EWSN eswn = door.door_dir;

            for (int j = 0; j < 4; j++)
            {
                if (map_creater.isPracticable(ri, bi, eswn))
                {
                    break;
                }
                eswn = Map.eswn.next_cw(eswn);
            }

            float offset = 7.0f;

            switch (eswn)
            {
            case Map.EWSN.NORTH:
            {
                position += Vector3.forward * offset;
                angle     = 180.0f;
            }
            break;

            case Map.EWSN.SOUTH:
            {
                position += Vector3.back * offset;
                angle     = 0.0f;
            }
            break;

            case Map.EWSN.EAST:
            {
                position += Vector3.right * offset;
                angle     = 90.0f;
            }
            break;

            case Map.EWSN.WEST:
            {
                position += Vector3.left * offset;
                angle     = -90.0f;
            }
            break;
            }

            enemy.control.cmdSetPositionAnon(position);
            enemy.control.cmdSetDirectionAnon(angle);

            var desc = new Character.OufukuAction.Desc();

            Vector3 line = Quaternion.AngleAxis(angle, Vector3.up) * Vector3.right;

            desc.position0 = position + line * 2.0f;
            desc.position1 = position - line * 2.0f;

            enemy.setBehaveKind(Enemy.BEHAVE_KIND.OUFUKU, desc);
        }

        // 그 자리에서 총을 쏘는 몬스터 / 무기 체인지 아이템.

        int item_place    = this.rand.getRandomInt(level_room.places.Count);
        int shot_item_sel = this.rand.getRandomInt(10) % 2;

        for (int i = 0; i < level_room.places.Count; i++)
        {
            var place = level_room.places[i];

            Vector3 position = room_position + map_creater.getBlockCenterPosition(place);

            if (i == item_place)
            {
                // 무기 체인지 아이템.

                if (shot_item_sel == 0)
                {
                    item_type = "shot_negi";
                }
                else
                {
                    item_type = "shot_yuzu";
                }

                item_name = item_type + "_" + room_index + "_" + level_room.enter_count + "_" + n.ToString("D2");

                level_room.items.Add(item_name);

                ItemManager.get().createItem(item_type, item_name, PartyControl.get().getLocalPlayer().getAcountID());

                ItemManager.get().setPositionToItem(item_name, position);
            }
            else
            {
                // 그 자리에서 총을 쏘는 몬스터.

                string enemy_name = "Enemy_Obake" + "." + room_index + "." + i.ToString("D3");

                chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, enemy_name);

                if (enemy == null)
                {
                    continue;
                }

                enemy.setBehaveKind(Enemy.BEHAVE_KIND.SONOBA_DE_FIRE);

                enemy.control.cmdSetPositionAnon(position);
            }
        }
#else
        #if false
        chrController chr0 = this.createRoomEnemy <chrBehaviorEnemy>(room, "Enemy_Lair").control;
        //chrController	chr1 = this.createRoomEnemy<chrBehaviorEnemy>(room, "Enemy_Lair").control;

        chrBehaviorEnemy_Lair lair0 = chr0.behavior as chrBehaviorEnemy_Lair;
        //chrBehaviorEnemy_Lair	lair1 = chr1.behavior as chrBehaviorEnemy_Lair;

        lair0.name += "00";

        //lair0.setRewardItem("cake00", "cake01");
        //lair1.setRewardItem("ice00" , "ice01");

        chrBehaviorEnemy_Lair.SpawnEnemy spawn;

        spawn             = lair0.resisterSpawnEnemy();
        spawn.enemy_name  = "Enemy_Kumasan";
        spawn.behave_kind = Enemy.BEHAVE_KIND.JUMBO;
        spawn.behave_desc = null;
        spawn.frequency   = 1.0f;

        //spawn = lair0.resisterSpawnEnemy();
        //spawn.enemy_name  = "Enemy_Kumasan";
        //spawn.behave_kind = Enemy.BEHAVE_KIND.TOTUGEKI;
        //spawn.behave_desc = null;
        //spawn.frequency   = 0.5f;

        //lair0.spawn_enemy.enemy_name  = "Enemy_Obake";
        //lair0.spawn_enemy.behave_kind = Enemy.BEHAVE_KIND.UROURO;
        //lair1.spawn_enemy = "Enemy_Obake";

        Vector3 player_position = room.gameObject.transform.position;

        lair0.control.cmdSetPositionAnon(player_position + Vector3.forward * 2.0f);
        //lair1.control.cmdSetPositionAnon(player_position + Vector3.forward*2.0f + Vector3.right*4.0f);

        lair0.control.cmdSetDirectionAnon(135.0f);
        //lair1.control.cmdSetDirectionAnon(135.0f);



        //

        if (room.getIndex().x == 2 && room.getIndex().z == 1)
        {
            player_position = MapCreator.get().getPlayerStartPosition();

            lair0.control.cmdSetPositionAnon(player_position + Vector3.forward * 4.0f);
            //lair1.control.cmdSetPositionAnon(player_position + Vector3.forward*2.0f + Vector3.right*4.0f);
        }
        #else
        for (int i = 0; i < 2; i++)
        {
            chrBehaviorEnemy enemy = this.createRoomEnemy <chrBehaviorEnemy>(room, i == 0 ? "Enemy_Obake" : "Enemy_Kumasan");
            //chrController	obake = this.createRoomEnemy<chrBehaviorEnemy>(room, "Enemy_Lair").controll;


            //

            Vector3 player_position = room.gameObject.transform.position;

            enemy.control.cmdSetPositionAnon(player_position + Vector3.forward * 3.0f);
            enemy.control.cmdSetDirectionAnon(180.0f - 45.0f);

            if (room.getIndex().x == 2 && room.getIndex().z == 1)
            {
                player_position = MapCreator.get().getPlayerStartPosition();

                enemy.control.cmdSetPositionAnon(player_position + Vector3.forward * 2.0f + Vector3.right * 2.0f * (float)i);
            }

            if (i == 0)
            {
                //var		desc = new Character.OufukuAction.Desc();

                //Vector3		line = Quaternion.AngleAxis(180.0f, Vector3.up)*Vector3.back;

                //desc.position0 = player_position + line*2.0f;
                //desc.position1 = player_position - line*2.0f;

                enemy.setBehaveKind(Enemy.BEHAVE_KIND.GOROGORO);
                break;
            }
            else
            {
                enemy.setBehaveKind(Enemy.BEHAVE_KIND.TOTUGEKI);
            }
        }
        #endif
#endif
    }
Exemplo n.º 7
0
 // 문을 가져온다.
 public DoorControl      getDoor(Map.EWSN dir)
 {
     return(this.doors.Find(x => x.door_dir == dir));
 }
Exemplo n.º 8
0
	// ================================================================ //

	// 룸 이동 후에 호출되고 싶다.
	public void		onRoomChanged(RoomController room)
	{
		// 열쇠 아이콘을 대응하는 도어 방향으로 표시한다.

		if(room != null) {

			Map.EWSN[]		key_dir = new Map.EWSN[4];
	
			for(int i = 0;i < 4;i++) {
	
				key_dir[i] = Map.EWSN.NONE;
			}
			for(int i = 0;i < (int)Map.EWSN.NUM;i++) {
	
				DoorControl	door = room.getDoor((Map.EWSN)i);
	
				if(door == null) {
	
					continue;
				}
	
				int	key_type = door.KeyType;

				if(key_type >= 4) {

					continue;
				}
				key_dir[key_type] = (Map.EWSN)i;
			}
	
			Vector2		base_pos = BASE_POS;
			Vector2		pos;
	
			base_pos.x += KEY_ICON_SIZE.x;
			base_pos.y += KEY_ICON_SIZE.y;

			for(int i = 0;i < 4;i++) {
	
				pos = base_pos - WINDOW_SIZE/2.0f;

				this.sprite_key[i].setVisible(true);

				// 도어가 없을 때는 비표시로.
				if(key_dir[i] == Map.EWSN.NONE) {
	
					this.sprite_key[i].setVisible(false);
					continue;
				}

				// 언락되지 않음 = 열쇠를 아직 줍지 않았으면 비표시.
				DoorControl	door = room.getDoor(key_dir[i]);

				if(!door.IsUnlocked()) {

					this.sprite_key[i].setVisible(false);
				}

				//

				float	offset = KEY_ICON_SIZE.x*0.6f;

				switch(key_dir[i]) {

					case Map.EWSN.NORTH:	pos += new Vector2(0.0f,  offset);	break;
					case Map.EWSN.SOUTH:	pos += new Vector2(0.0f, -offset);	break;
					case Map.EWSN.EAST:		pos += new Vector2( offset, 0.0f);	break;
					case Map.EWSN.WEST:		pos += new Vector2(-offset, 0.0f);	break;
				}
				this.sprite_key[i].setPosition(pos);
			}

		}
	}
Exemplo n.º 9
0
    // ================================================================ //

    // 룸 이동 후에 호출되고 싶다.
    public void             onRoomChanged(RoomController room)
    {
        // 열쇠 아이콘을 대응하는 도어 방향으로 표시한다.

        if (room != null)
        {
            Map.EWSN[] key_dir = new Map.EWSN[4];

            for (int i = 0; i < 4; i++)
            {
                key_dir[i] = Map.EWSN.NONE;
            }
            for (int i = 0; i < (int)Map.EWSN.NUM; i++)
            {
                DoorControl door = room.getDoor((Map.EWSN)i);

                if (door == null)
                {
                    continue;
                }

                int key_type = door.KeyType;

                if (key_type >= 4)
                {
                    continue;
                }
                key_dir[key_type] = (Map.EWSN)i;
            }

            Vector2 base_pos = BASE_POS;
            Vector2 pos;

            base_pos.x += KEY_ICON_SIZE.x;
            base_pos.y += KEY_ICON_SIZE.y;

            for (int i = 0; i < 4; i++)
            {
                pos = base_pos - WINDOW_SIZE / 2.0f;

                this.sprite_key[i].setVisible(true);

                // 도어가 없을 때는 비표시로.
                if (key_dir[i] == Map.EWSN.NONE)
                {
                    this.sprite_key[i].setVisible(false);
                    continue;
                }

                // 언락되지 않음 = 열쇠를 아직 줍지 않았으면 비표시.
                DoorControl door = room.getDoor(key_dir[i]);

                if (!door.IsUnlocked())
                {
                    this.sprite_key[i].setVisible(false);
                }

                //

                float offset = KEY_ICON_SIZE.x * 0.6f;

                switch (key_dir[i])
                {
                case Map.EWSN.NORTH:    pos += new Vector2(0.0f, offset);      break;

                case Map.EWSN.SOUTH:    pos += new Vector2(0.0f, -offset);      break;

                case Map.EWSN.EAST:             pos += new Vector2(offset, 0.0f);      break;

                case Map.EWSN.WEST:             pos += new Vector2(-offset, 0.0f);      break;
                }
                this.sprite_key[i].setPosition(pos);
            }
        }
    }