예제 #1
0
    public float getDoorY(roominfo info, constant.Direction dir)
    {
        switch (dir)
        {
        case constant.Direction.east:
            return(0.5f);

            break;

        case constant.Direction.north:
            return(0);

            break;

        case constant.Direction.south:
            return(1);

            break;

        case constant.Direction.west:
            return(0.5f);

            break;
        }
        return(0);
    }
예제 #2
0
    public roominfo getCurRoom()
    {
        if (mMapInfo == null)
        {
            return(null);
        }
        roominfo roomInfo = mMapInfo.getCurRoom();

        return(roomInfo);
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        maplogic logic = constant.getMapLogic();
        roominfo info  = logic.getCurRoom();

        if (info == null)
        {
            return;
        }
        tk2dTextMesh text = this.gameObject.GetComponent <tk2dTextMesh> ();

        text.text = "" + info.mId;
    }
예제 #4
0
 public roominfo getNextMainRoomInfo(roominfo info)
 {
     if (info.mDoorInfos != null)
     {
         foreach (doorinfo doorInfo in info.mDoorInfos)
         {
             if (doorInfo.mMain)
             {
                 return(getRoomInfo(doorInfo.mNextRoomId));
             }
         }
     }
     return(null);
 }
예제 #5
0
    void enterFirstRoom()
    {
        //GameObject.DontDestroyOnLoad (this.gameObject);
        //GameObject role = GameObject.FindGameObjectWithTag (constant.TAG_PLAYER);
        //DontDestroyOnLoad (role);
        GameObject role = GameObject.FindGameObjectWithTag(constant.TAG_PLAYER);

        if (role != null)
        {
            GameObject.DestroyImmediate(role);
        }
        roominfo roomInfo = mMapInfo.getFirstRoom();                         // mapfactory.getNextRoom (mMapInfo, doorInfo);

        loadRoom(roomInfo);
    }
예제 #6
0
    public void initCharPos()
    {
        roominfo roomInfo = mMapInfo.getCurRoom();

        float x = 0;
        float y = 0;

        doorinfo doorInfo = roomInfo.getDoorInfo(roomInfo.mEnterDoorId);

        if (doorInfo != null)
        {
            //Debug.Log ("roomInfoEnterDoorId: " + roomInfo.mEnterDoorId + ",doorInfo:" + doorInfo.mId);
            //Debug.Log ("doorInfo.mDir:" + doorInfo.mDir);

            switch (doorInfo.mDir)
            {
            case constant.Direction.east:
                x = 4;
                break;

            case constant.Direction.west:
                x = -4;
                break;

            case constant.Direction.south:
                y = -4;
                break;

            case constant.Direction.north:
                y = 4;
                break;
            }

            GameObject door = getDoorTouchObj(doorInfo.mId);



            if (door != null)
            {
                GameObject role = GameObject.FindGameObjectWithTag(constant.TAG_PLAYER);
                role.gameObject.transform.position = new Vector3(door.transform.position.x + x, door.transform.position.y + y, -1);
            }
        }
        else
        {
            //Debug.Log("error roomInfo.mEnterDoorId:" + roomInfo.mEnterDoorId );
        }
    }
예제 #7
0
    public void initRoomInfo()
    {
        Dictionary <string, constant.Direction> dic = new Dictionary <string, constant.Direction>();

        dic.Add("UpRoom", constant.Direction.south);
        dic.Add("DownRoom", constant.Direction.north);
        dic.Add("LeftRoom", constant.Direction.east);
        dic.Add("RightRoom", constant.Direction.west);

        roominfo        roomInfo  = mMapInfo.getCurRoom();
        List <doorinfo> doorinfos = roomInfo.mDoorInfos;

        foreach (KeyValuePair <string, constant.Direction> pair in dic)
        {
            GameObject[] objs = GameObject.FindGameObjectsWithTag(pair.Key);
            if (objs != null)
            {
                foreach (GameObject obj in objs)
                {
                    char_enter_script com = obj.GetComponent <char_enter_script>();
                    com.mDir = pair.Value;

                    //Debug.Log("obj:" + obj.name);

                    room_property pro = obj.GetComponent <room_property>();
                    //Debug.Log ("pro:" + pro.mX + "," + pro.mY + "," + (pro.mDoorInfo));
                    foreach (doorinfo info in doorinfos)
                    {
                        //Debug.Log ("info:" + info.mX + "," + info.mY);
                        if (pro.mX == info.mX && pro.mY == info.mY)
                        {
                            //Debug.Log("add roominfo");
                            pro.mDoorInfo = info;
                            //Debug.Log ("info:" + info);
                            //Debug.Log ("pro.mDoorInfo:" + pro.mDoorInfo.mX);
                            if (info.mNextRoomId != 0)
                            {
                                GameObject wall = obj.transform.parent.transform.Find("wall").gameObject;
                                wall.SetActive(false);
                            }
                        }
                    }
                }
            }
        }

        initRoomSceneInfo(roomInfo);
    }
예제 #8
0
    public mapinfo getFirstMap()
    {
        mapinfo mapInfo = new mapinfo();

        mapInfo.mRoomInfos = new List <roominfo> ();

        roominfo roomInfo = new roominfo();

        roomInfo.roomH = 1;
        roomInfo.roomW = 1;
        roomInfo.roomX = 4;
        roomInfo.roomY = 3;

        roomInfo.mSceneIndex = 0;
        roomInfo.mId         = 1;

        roomInfo.mDoorInfos = new List <doorinfo>();
        {
            doorinfo doorInfo = new doorinfo();
            doorInfo.mId         = 1;
            doorInfo.mDir        = constant.Direction.south;
            doorInfo.mNextDoorId = 2;
            doorInfo.mNextRoomId = 1;
            doorInfo.mX          = 0.5f;
            doorInfo.mY          = 1;
            roomInfo.mDoorInfos.Add(doorInfo);
        }
        {
            doorinfo doorInfo = new doorinfo();
            doorInfo.mId         = 2;
            doorInfo.mDir        = constant.Direction.north;
            doorInfo.mNextDoorId = 1;
            doorInfo.mNextRoomId = 1;
            doorInfo.mX          = 0.5f;
            doorInfo.mY          = 0;
            roomInfo.mDoorInfos.Add(doorInfo);
        }

        mapInfo.mRoomInfos.Add(roomInfo);

        mapInfo.mCurRoomId = 1;

        return(mapInfo);
    }
예제 #9
0
    public List <constant.Direction> getCanUseDirs(roominfo roomInfo)
    {
        List <constant.Direction> dirs     = getRemainDirs();
        List <constant.Direction> nextDirs = roomInfo.getRemainDirs();

        List <constant.Direction> getDirs = new List <constant.Direction> ();

        foreach (constant.Direction dir in dirs)
        {
            foreach (constant.Direction nextDir in nextDirs)
            {
                if (constant.Equals(dir, constant.getOppsiteDir(nextDir)))
                {
                    getDirs.Add(dir);
                    break;
                }
            }
        }

        return(getDirs);
    }
예제 #10
0
    public void enterRoom(GameObject door, GameObject role)
    {
        doorinfo doorInfo = door.GetComponent <room_property>().mDoorInfo;

        //Debug.Log ("enterRoom doorInfo:" + doorInfo.mX + ","
        //           + doorInfo.mY + ","
        //           + doorInfo.mDir + ","
        //           + doorInfo.mNextRoomId + ","
        //           + doorInfo.mNextDoorId );

        role.gameObject.rigidbody.velocity = new Vector3(0, 0, 0);
        //role.gameObject.transform.position = new Vector3 (-6, 0, -1);

        //char_enter_script enter = door.GetComponent<char_enter_script> ();
        //Debug.Log ("enterRoom dir:" + enter.mDir);

        //GameObject.DontDestroyOnLoad (this.gameObject);
        GameObject.DontDestroyOnLoad(role);
        roominfo roomInfo = constant.getMapFactory().getNextRoom(mMapInfo, doorInfo);

        loadRoom(roomInfo);
    }
예제 #11
0
    public void openDoor()
    {
        GameObject[] doors = GameObject.FindGameObjectsWithTag("normalDoors");
        roominfo     info  = constant.getMapLogic().getCurRoom();

        //Debug.Log ("openDoor");
        foreach (GameObject door in doors)
        {
            GameObject    doorTouch = door.transform.parent.Find("door_touch").gameObject;
            room_property pro       = doorTouch.GetComponent <room_property>();
            if (pro.mDoorInfo != null && pro.mDoorInfo.hasNext() && info.mEnterDoorId != pro.mDoorInfo.mId)
            {
                tk2dSpriteAnimator ani = door.GetComponent <tk2dSpriteAnimator>();
                //Debug.Log("openDoor:" + door.name);
                BoxCollider box = ani.gameObject.GetComponent <BoxCollider> ();
                if (!box.isTrigger)
                {
                    ani.Play("open");
                    ani.AnimationCompleted = playOpenDoorAni;
                }
            }
        }
    }
예제 #12
0
    //生成房间的道具或者怪物的prefabs的gameobject
    public void initRoomSceneInfo(roominfo info)
    {
        //Debug.Log ("info.mItemPrefabs:" +info.mItemPrefabs.Count);
        //Debug.Log ("info.mMonsterPrefabs:" +info.mMonsterPrefabs.Count);
        SceneTemplate scentemplate = constant.getMapFactory().getSceneTemplate(info.mSceneIndex);

        if (scentemplate.ScenePrefab != null)
        {
            GameObject clone = (GameObject)GameObject.Instantiate(Resources.Load(scentemplate.ScenePrefab), new Vector3(0, 0, 0), Quaternion.identity);
        }

        foreach (KeyValuePair <itemtemplate, Vector3> pair in info.mItemPrefabs)
        {
            Vector3    v     = pair.Value;
            GameObject clone = (GameObject)GameObject.Instantiate(Resources.Load(pair.Key.PrefabPath), v, Quaternion.identity);
        }

        foreach (KeyValuePair <monstertemplate, Vector3> pair in info.mMonsterPrefabs)
        {
            Vector3    v     = pair.Value;
            GameObject clone = (GameObject)GameObject.Instantiate(Resources.Load(pair.Key.PrefabPath), v, Quaternion.identity);
        }
    }
예제 #13
0
    public float getRoomInfoFAcc()
    {
        roominfo info = getCurRoom();

        return(info.mFAcc);
    }
예제 #14
0
    public monstertemplate getRandomTemplate(roominfo roomInfo, mapinfo mapInfo)
    {
        int index = Random.Range(0, mPrefabs.Length);

        return(mPrefabs [index]);
    }
예제 #15
0
 void loadRoom(roominfo info)
 {
     //Debug.Log ("enterRoom " + info.mId);
     Application.LoadLevel(info.mSceneIndex);
 }
예제 #16
0
    public mapinfo getRandomMap(maplogic logic)
    {
        mapinfo mapInfo = new mapinfo();

        mapInfo.mRoomInfos = new List <roominfo> ();

        int roomNum     = logic.getFloorTotalRoomNum();
        int itemRoomNum = roomNum / 4 + (Random.Range(-1, 1));

        if (itemRoomNum <= 0)
        {
            itemRoomNum = 1;
        }
        int roomId = 1;
        int doorId = 1;

        for (int i = 0; i < roomNum; ++i)
        {
            roominfo roomInfo = new roominfo();
            roomInfo.roomH = 1;
            roomInfo.roomW = 1;

            roomInfo.mRoomType = constant.RoomType.Monster;
            if (i == 0)
            {
                roomInfo.mRoomType = constant.RoomType.Start;
            }
            if (i == roomNum - 1)
            {
                roomInfo.mIsBossRoom = true;
            }

            roomInfo.mSceneIndex = 2;
            roomInfo.mId         = roomId;
            ++roomId;
            roomInfo.mDoorInfos = new List <doorinfo>();

            //左边门
            if (i > 0)
            {
                doorinfo doorInfo = new doorinfo();
                doorInfo.mId = doorId;
                ++doorId;

                doorInfo.mDir        = constant.Direction.east;
                doorInfo.mNextDoorId = doorId - 2;
                doorInfo.mNextRoomId = roomId - 2;
                doorInfo.mX          = 0f;
                doorInfo.mY          = 0.5f;
                roomInfo.mDoorInfos.Add(doorInfo);
            }

            //右边门
            if (i != roomNum - 1)
            {
                doorinfo doorInfo = new doorinfo();
                doorInfo.mId = doorId;
                ++doorId;

                doorInfo.mDir        = constant.Direction.west;
                doorInfo.mNextDoorId = doorId;
                doorInfo.mNextRoomId = roomId;
                doorInfo.mX          = 1f;
                doorInfo.mY          = 0.5f;
                doorInfo.mMain       = true;
                roomInfo.mDoorInfos.Add(doorInfo);
            }

            mapInfo.mRoomInfos.Add(roomInfo);
        }

        List <int> mMonsterRoomIds = new List <int>();

        for (int i = 1; i < roomId - 1; ++i)
        {
            mMonsterRoomIds.Add(i);
        }

        //创建几个到道具房间
        for (int i = 0; i < itemRoomNum; ++i)
        {
            //随机选择一个房间
            int nextRoomIndex = Random.Range(0, mMonsterRoomIds.Count - 1);
            int nextRoomId    = mMonsterRoomIds[nextRoomIndex];
            mMonsterRoomIds.RemoveAt(nextRoomIndex);
            roominfo nextRoomInfo = null;
            for (int j = 0; j < mapInfo.mRoomInfos.Count; ++j)
            {
                roominfo childInfo = mapInfo.mRoomInfos[j];
                if (childInfo.mId == nextRoomId)
                {
                    nextRoomInfo = childInfo;
                    break;
                }
            }

            if (nextRoomInfo != null)
            {
                roominfo roomInfo = new roominfo();
                roomInfo.roomH       = 1;
                roomInfo.roomW       = 1;
                roomInfo.mSceneIndex = 2;
                roomInfo.mRoomType   = constant.RoomType.Item;
                roomInfo.mId         = roomId;
                ++roomId;
                roomInfo.mDoorInfos = new List <doorinfo>();

                {
                    //随机选择一个门
                    List <constant.Direction> dirs     = nextRoomInfo.getRemainDirs();
                    constant.Direction        enterDir = dirs[Random.Range(0, dirs.Count - 1)];
                    Debug.Log("随机选择一个门:" + enterDir);
                    //加一个门给monster房间
                    {
                        doorinfo doorInfo = new doorinfo();
                        doorInfo.mId = doorId;
                        ++doorId;
                        doorInfo.mDir        = enterDir;
                        doorInfo.mNextDoorId = doorId;
                        doorInfo.mNextRoomId = roomInfo.mId;
                        //doorInfo.mX = 1f;
                        //doorInfo.mY = 0.5f;
                        doorInfo.mX = getDoorX(nextRoomInfo, doorInfo.mDir);
                        doorInfo.mY = getDoorY(nextRoomInfo, doorInfo.mDir);
                        nextRoomInfo.mDoorInfos.Add(doorInfo);
                    }

                    //加一个门给item房间指向上一个monster房间
                    {
                        doorinfo doorInfo = new doorinfo();
                        doorInfo.mId = doorId;
                        ++doorId;
                        doorInfo.mDir        = constant.getOppsiteDir(enterDir);                  //constant.Direction.west;
                        doorInfo.mNextDoorId = doorId - 2;
                        doorInfo.mNextRoomId = nextRoomInfo.mId;
                        doorInfo.mX          = getDoorX(roomInfo, doorInfo.mDir);
                        doorInfo.mY          = getDoorY(roomInfo, doorInfo.mDir);
                        roomInfo.mDoorInfos.Add(doorInfo);
                    }
                }

                {
                    roominfo nextNextRoomInfo = mapInfo.getNextMainRoomInfo(nextRoomInfo);
                    //随机选择一个门
                    List <constant.Direction> dirs     = roomInfo.getCanUseDirs(nextNextRoomInfo);
                    constant.Direction        enterDir = dirs[Random.Range(0, dirs.Count - 1)];
                    //加一个门给item房间指向下一个monster房间
                    {
                        doorinfo doorInfo = new doorinfo();
                        doorInfo.mId = doorId;
                        ++doorId;
                        doorInfo.mDir        = enterDir;
                        doorInfo.mNextDoorId = doorId;
                        doorInfo.mNextRoomId = nextNextRoomInfo.mId;
                        doorInfo.mX          = getDoorX(roomInfo, doorInfo.mDir);
                        doorInfo.mY          = getDoorY(roomInfo, doorInfo.mDir);
                        roomInfo.mDoorInfos.Add(doorInfo);
                    }

                    //加一个门给下一个monster房间
                    {
                        doorinfo doorInfo = new doorinfo();
                        doorInfo.mId = doorId;
                        ++doorId;
                        doorInfo.mDir        = constant.getOppsiteDir(enterDir);                  //constant.Direction.west;
                        doorInfo.mNextDoorId = doorId - 2;
                        doorInfo.mNextRoomId = roomInfo.mId;
                        doorInfo.mX          = getDoorX(nextNextRoomInfo, doorInfo.mDir);
                        doorInfo.mY          = getDoorY(nextNextRoomInfo, doorInfo.mDir);
                        nextNextRoomInfo.mDoorInfos.Add(doorInfo);
                    }
                }

                mapInfo.mRoomInfos.Add(roomInfo);
            }
        }

        mapInfo.mCurRoomId = 1;
        initMapScenes(mapInfo);

        return(mapInfo);
    }