Example #1
0
    // 네트 플레이어 만들기.
    public void             createNetPlayer(int account_global_index)
    {
        chrBehaviorLocal local_player = this.players[0].GetComponent <chrBehaviorLocal>();

        chrBehaviorNet net_player = null;

        int local_index = this.players.Count;

        AccountData account_data = AccountManager.get().getAccountData(account_global_index);

        string avator_name = "Player_" + account_data.avator_id;

        net_player = CharacterRoot.getInstance().createPlayerAsNet(avator_name).GetComponent <chrBehaviorNet>();

        net_player.control.local_index  = local_index;
        net_player.control.global_index = account_global_index;
        net_player.local_player         = local_player;

        net_player.position_in_formation = this.getInFormationOffset(account_global_index);

        SHOT_TYPE shot_type = GlobalParam.get().shot_type[account_global_index];

        net_player.changeBulletShooter(shot_type);

        net_player.transform.Translate(this.getLocalPlayer().control.getPosition() + net_player.position_in_formation);

        this.players.Add(net_player);
    }
Example #2
0
    public void OnReceivePrizeResultPacket(int node, PacketId id, byte[] data)
    {
        PrizeResultPacket packet = new PrizeResultPacket(data);
        PrizeResultData   result = packet.GetPacket();

        Debug.Log("[CLIENT] ReceivePrizeResultPacket");

        for (int i = 0; i < result.cakeDataNum; ++i)
        {
            this.cake_counts[i] = result.cakeNum[i];

            Debug.Log("[CLIENT] Cake num[" + i + "]:" + result.cakeNum[i]);
        }

        chrBehaviorLocal local_player = PartyControl.get().getLocalPlayer();

        QueryCakeCount query = QueryManager.get().findQuery <QueryCakeCount>(x => x.account_id == local_player.getAcountID());

        if (query != null)
        {
            Debug.Log("[CLIENT]QueryCakeCount done");
            query.set_done(true);
            query.set_success(true);
        }
    }
Example #3
0
	// 게임 시작 시에 한 번만 호출된다.
	public override void	start()
	{
		this.player = PartyControl.get().getLocalPlayer();

		this.camera_control = CameraControl.get();

		// ---------------------------------------------------------------- //

		this.control.GetComponent<Rigidbody>().isKinematic = true;
		this.control.GetComponent<Rigidbody>().Sleep();

		this.control.setVisible(false);

		this.hover.gravity     = Physics.gravity.y*0.1f;
		this.hover.accel_scale = 2.0f;

		this.hover.zero_level = 3.0f;
		this.hover.hard_limit.max = 100.0f;

		this.radius = 5.0f;

		//

		this.step.set_next(STEP.IDLE);
	}
Example #4
0
    // 게임 시작 시에 한 번만 호출된다.
    public override void    start()
    {
        this.player = PartyControl.get().getLocalPlayer();

        this.camera_control = CameraControl.get();

        // ---------------------------------------------------------------- //

        this.control.rigidbody.isKinematic = true;
        this.control.rigidbody.Sleep();

        this.control.setVisible(false);

        this.hover.gravity     = Physics.gravity.y * 0.1f;
        this.hover.accel_scale = 2.0f;

        this.hover.zero_level     = 3.0f;
        this.hover.hard_limit.max = 100.0f;

        this.radius = 5.0f;

        //

        this.step.set_next(STEP.IDLE);
    }
Example #5
0
    public override void initializeMap(GameRoot game_root)
    {
        MapCreator   map_creator   = MapCreator.get();
        PartyControl party_control = PartyControl.get();

        map_creator.setRoomNum(1, 1);

        map_creator.floor_root_go = new GameObject("Floor");

        // 방 만들기.
        RoomController room = map_creator.createRoomFloor(new Map.RoomIndex(0, 0));

        // 더미 방 만들기.
        map_creator.createVacancy(new Map.RoomIndex(0, -1));

        // 방을 구분하는 벽을 만든다.
        map_creator.createRoomWall();

        // 외벽을 만든다.
        map_creator.createOuterWalls();

        GameRoot.get().createLocalPlayer();
        GameRoot.get().createNetPlayers();

        // 플레이어 위치 설정.

        chrBehaviorLocal local_player = PartyControl.get().getLocalPlayer();

        Vector3 playerStartPosition = Vector3.zero;

        local_player.transform.position = playerStartPosition + PartyControl.get().getPositionOffset(local_player.control.global_index);

        for (int i = 0; i < PartyControl.get().getFriendCount(); i++)
        {
            chrBehaviorPlayer friend = PartyControl.get().getFriend(i);

            friend.control.cmdSetPositionAnon(playerStartPosition + PartyControl.get().getPositionOffset(friend.control.global_index));
        }

        party_control.setCurrentRoom(room);

        // ボスの作成.

        chrControllerEnemyBase enemy;

        if (UsesHumanControlForBoss)
        {
            enemy = CharacterRoot.get().createEnemy("Boss1", "chrControllerEnemyBoss", "chrBehaviorEnemyBoss_Human") as chrControllerEnemyBase;
        }
        else
        {
            enemy = CharacterRoot.get().createEnemy("Boss1", "chrControllerEnemyBoss", "chrBehaviorEnemyBoss") as chrControllerEnemyBase;
        }

        enemy.cmdSetPosition(new Vector3(0.0f, 0.0f, 20.0f));

        // 스테이터스 창.

        Navi.get().createStatusWindows();
    }
Example #6
0
    void    OnTriggerEnter(Collider other)
    {
        do
        {
            var player = other.gameObject.GetComponent <chrBehaviorLocal>();

            if (player == null)
            {
                break;
            }

            // 이사 중엔 맵 이동을 할 수 없습니다.
            if (player.isNowHouseMoving())
            {
                break;
            }

            // 통신 상대와 접속할 때까지 이동할 수 없습니다.
            if (GameRoot.get().isConnected() == false)
            {
                break;
            }

            this.player = player;
        } while(false);
    }
Example #7
0
    // 애니메이션에서 호출되는 이벤트 퀵 공격이 성공한 순간.
    public void     NotifyQuickAttack_Impact()
    {
        chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

        if (Vector3.Distance(player.control.getPosition(), this.getPosition()) < 6.0f * this.getScale())
        {
            player.control.causeDamage(vital.getAttackPower(), -1);
            player.beginBlowOut(this.getPosition(), 3.0f * this.getScale());
        }
    }
    // 레벨 시작 시에 호출.
    public override void            start()
    {
        this.player  = PartyControl.get().getLocalPlayer();
        this.kabusan = CharacterRoot.get().findCharacter <chrBehaviorKabu>("NPC_Kabu_San");

        // 스포트 라이트.
        this.spotlight_player  = this.spotlight_prefab.instantiate();
        this.spotlight_kabusan = this.spotlight_kabusan_prefab.instantiate();

        this.spotlight_items = new GameObject[2];
        for (int i = 0; i < 2; i++)
        {
            this.spotlight_items[i] = this.spotlight_prefab.instantiate();
        }
        this.spotlight_items[0].setPosition(WeaponSelectMapInitializer.getNegiItemPosition().Y(4.0f));
        this.spotlight_items[1].setPosition(WeaponSelectMapInitializer.getYuzuItemPosition().Y(4.0f));

        this.spotlight_key = this.spotlight_key_prefab.instantiate();
        this.spotlight_key.SetActive(false);

        // 플래그 - 각 플레이어의 선택이 끝났는가?.

        this.select_done_players = new bool[NetConfig.PLAYER_MAX];

        for (int i = 0; i < this.select_done_players.Length; i++)
        {
            if (GameRoot.get().isConnected(i))
            {
                this.select_done_players[i] = false;
            }
            else
            {
                // 참가하지 않은 플레이어는 '선택완료'로 해 둔다.
                this.select_done_players[i] = true;
            }
        }

        // 다른 플레이어의 상황을 나타내는 아이콘 생성하다.
        this.create_selecting_icons();

        // Network 클래스의 컴포넌트를 획득.
        GameObject obj = GameObject.Find("Network");

        if (obj != null)
        {
            this.m_network = obj.GetComponent <Network>();

            if (this.m_network != null)
            {
                m_network.RegisterReceiveNotification(PacketId.GameSyncInfo, OnReceiveSyncPacket);
            }
        }

        this.step.set_next(STEP.DEMO0);
    }
Example #9
0
        public override void    execute()
        {
            if (this.finish_child())
            {
                this.step.set_next(STEP.BOTTACHI);
            }

            // ---------------------------------------------------------------- //
            // 다음 상태로 이동할지 체크합니다.

            switch (this.step.do_transition())
            {
            // 서있기.
            case STEP.BOTTACHI:
            {
                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                if (this.behavior.isInAttackRange(player.control))
                {
                    this.push(this.melee_attack);
                    this.step.sleep();
                }
            }
            break;
            }

            // ---------------------------------------------------------------- //
            // 상태가 전환됐을 때의 초기화.

            while (this.step.get_next() != STEP.NONE)
            {
                switch (this.step.do_initialize())
                {
                case STEP.BOTTACHI:
                {
                }
                break;
                }
            }

            // ---------------------------------------------------------------- //
            // 각 상태에서의 실행 처리.

            switch (this.step.do_execution(Time.deltaTime))
            {
            case STEP.BOTTACHI:
            {
            }
            break;
            }

            // ---------------------------------------------------------------- //

            this.execute_child();
        }
Example #10
0
    // 로컬 플레이어 획득.
    public chrBehaviorLocal         getLocalPlayer()
    {
        chrBehaviorLocal player = null;

        if (this.players.Count > 0)
        {
            player = this.players[0].GetComponent <chrBehaviorLocal>();
        }

        return(player);
    }
	// 레벨 시작 시에 호출.
	public override void		start()
	{
		this.player = PartyControl.get().getLocalPlayer();
		this.kabusan = CharacterRoot.get().findCharacter<chrBehaviorKabu>("NPC_Kabu_San");

		// 스포트 라이트.
		this.spotlight_player  = this.spotlight_prefab.instantiate();
		this.spotlight_kabusan = this.spotlight_kabusan_prefab.instantiate();

		this.spotlight_items = new GameObject[2];
		for(int i = 0;i < 2;i++) {
			this.spotlight_items[i] = this.spotlight_prefab.instantiate();
		}
		this.spotlight_items[0].setPosition(WeaponSelectMapInitializer.getNegiItemPosition().Y(4.0f));
		this.spotlight_items[1].setPosition(WeaponSelectMapInitializer.getYuzuItemPosition().Y(4.0f));

		this.spotlight_key = this.spotlight_key_prefab.instantiate();
		this.spotlight_key.SetActive(false);

		// 플래그 - 각 플레이어의 선택이 끝났는가?.

		this.select_done_players = new bool[NetConfig.PLAYER_MAX];

		for(int i = 0;i < this.select_done_players.Length;i++) {

			if(GameRoot.get().isConnected(i)) {

				this.select_done_players[i] = false;

			} else {

				// 참가하지 않은 플레이어는 '선택완료'로 해 둔다.
				this.select_done_players[i] = true;
			}
		}
		
		// 다른 플레이어의 상황을 나타내는 아이콘 생성하다.
		this.create_selecting_icons();

		// Network 클래스의 컴포넌트를 획득.
		GameObject	obj = GameObject.Find("Network");
		
		if(obj != null) {
			
			this.m_network = obj.GetComponent<Network>();

			if (this.m_network != null) {
				m_network.RegisterReceiveNotification(PacketId.GameSyncInfo, OnReceiveSyncPacket);
			}
		}

		this.step.set_next(STEP.DEMO0);
	}
Example #12
0
    void    Update()
    {
        // ---------------------------------------------------------------- //

        if (this.player == null)
        {
            this.player = PartyControl.getInstance().getLocalPlayer();
        }

        // ---------------------------------------------------------------- //

        // 아이템 아이콘(슬롯)을 클릭했을 때.
        if (this.clicked_slot >= 0)
        {
            GameInput gi = GameInput.getInstance();

            if (gi.pointing.trigger_off)
            {
                do
                {
                    // 아이템 사용 중.
                    if (this.player.step.get_next() == chrBehaviorLocal.STEP.USE_ITEM)
                    {
                        break;
                    }

                    Item.Slot slot = this.player.item_slot.miscs[this.clicked_slot];

                    if (slot.favor == null)
                    {
                        break;
                    }

                    // 사용 중인 아이템(조작은 할 수 있게 됐지만 슬롯에서는 아직.
                    // 삭제되지 않은 때).
                    if (slot.is_using)
                    {
                        break;
                    }

                    this.player.control.cmdUseItemSelf(this.clicked_slot, slot.favor, true);

                    SoundManager.getInstance().playSE(Sound.ID.DDG_SE_SYS03);
                } while(false);

                this.clicked_slot = -1;
            }
        }
    }
Example #13
0
    protected void          create_debug_window()
    {
        var window = dbwin.root().createWindow("query");

        window.createButton("줍는다")
        .setOnPress(() =>
        {
            chrBehaviorLocal player = CharacterRoot.get().findCharacter <chrBehaviorLocal>(GameRoot.getInstance().account_name_local);

            player.controll.cmdItemQueryPick("Tarai");
        });

        window.createButton("버린다")
        .setOnPress(() =>
        {
            chrBehaviorLocal player = CharacterRoot.get().findCharacter <chrBehaviorLocal>(GameRoot.getInstance().account_name_local);

            player.controll.cmdItemQueryDrop();
        });

        window.createButton("말풍선")
        .setOnPress(() =>
        {
            //chrBehaviorLocal	player = CharacterRoot.get().findCharacter<chrBehaviorLocal>(GameRoot.getInstance().account_name_local);
            chrBehaviorNet player = CharacterRoot.get().findCharacter <chrBehaviorNet>("Daizuya");

            player.controll.cmdQueryTalk("멀리 있는 사람과 Talk한다", true);
        });

        window.createButton("이사 시작")
        .setOnPress(() =>
        {
            chrBehaviorLocal player = CharacterRoot.get().findCharacter <chrBehaviorLocal>(GameRoot.getInstance().account_name_local);
            //chrBehaviorNet		player = CharacterRoot.get().findCharacter<chrBehaviorNet>(GameRoot.getInstance().account_name_net);

            player.controll.cmdQueryHouseMoveStart("House1");
        });

        window.createButton("이사 끝")
        .setOnPress(() =>
        {
            chrBehaviorLocal player = CharacterRoot.get().findCharacter <chrBehaviorLocal>(GameRoot.getInstance().account_name_local);
            //chrBehaviorNet		player = CharacterRoot.get().findCharacter<chrBehaviorNet>(GameRoot.getInstance().account_name_net);

            player.controll.cmdQueryHouseMoveEnd();
        });
    }
Example #14
0
    // 레벨 시작 시에 호출.
    public override void            start()
    {
        // 각 플레이어가 케이크를 획득한 수..

        this.cake_counts = new int[NetConfig.PLAYER_MAX];

        for (int i = 0; i < this.cake_counts.Length; i++)
        {
            if (GameRoot.get().isConnected(i))
            {
                this.cake_counts[i] = -1;
            }
            else
            {
                this.cake_counts[i] = 0;
            }
        }

        chrBehaviorLocal local_player = PartyControl.get().getLocalPlayer();

        this.cake_counts[local_player.getGlobalIndex()] = local_player.getCakeCount();

        QueryCakeCount query_cake = new QueryCakeCount(local_player.getAcountID(), local_player.getCakeCount());

        query_cake.timeout = 20.0f;

        QueryManager.get().registerQuery(query_cake);

        // Network 클래스의 컴포넌트 획득.
        GameObject obj = GameObject.Find("Network");

        if (obj != null)
        {
            this.m_network = obj.GetComponent <Network>();

            if (this.m_network != null)
            {
                this.m_network.RegisterReceiveNotification(PacketId.PrizeResult, OnReceivePrizeResultPacket);
            }
        }

        // 케이크 데이터 송신.
        sendPrizeData();

        this.step.set_next(STEP.WAIT_FRIEND);
    }
Example #15
0
    void    OnTriggerExit(Collider other)
    {
        do
        {
            var player = other.gameObject.GetComponent <chrBehaviorLocal>();

            if (player == null)
            {
                break;
            }
            if (player != this.player)
            {
                break;
            }

            this.player = null;
        } while(false);
    }
Example #16
0
    // ================================================================ //

    // 로컬 플레이어 만들기.
    public void             createLocalPlayer(int account_global_index)
    {
        if (this.players.Count == 0)
        {
            AccountData account_data = AccountManager.get().getAccountData(account_global_index);

            string avator_name = "Player_" + account_data.avator_id;

            chrBehaviorLocal local_player = CharacterRoot.getInstance().createPlayerAsLocal(avator_name).GetComponent <chrBehaviorLocal>();

            local_player.control.local_index  = 0;
            local_player.control.global_index = account_global_index;

            local_player.position_in_formation = this.getInFormationOffset(account_global_index);

            SHOT_TYPE shot_type = GlobalParam.get().shot_type[account_global_index];
            local_player.changeBulletShooter(shot_type);

            this.players.Add(local_player);
        }
    }
Example #17
0
    // ---------------------------------------------------------------- //
    // 케이트 데이터 송수신.

    private void sendPrizeData()
    {
        PrizeData data = new PrizeData();

        chrBehaviorLocal local_player = PartyControl.get().getLocalPlayer();

        Debug.Log("[CLIENT] sendPrizeData");

        // 획득한 케이크 수를 설정.
        data.characterId = local_player.getAcountID();
        data.cakeNum     = local_player.getCakeCount();

        if (this.m_network != null)
        {
            PrizePacket packet = new PrizePacket(data);

            int serverNode = this.m_network.GetServerNode();
            this.m_network.SendReliable <PrizeData>(serverNode, packet);

            Debug.Log("[CLIENT] send cake num[" + data.characterId + "]:" + data.cakeNum);
        }
    }
Example #18
0
	void	Update()
	{
		// ---------------------------------------------------------------- //

		if(this.player == null) {

			this.player = PartyControl.getInstance().getLocalPlayer();
		}

		// ---------------------------------------------------------------- //

		// 아이템 아이콘(슬롯)을 클릭했을 때.
		if(this.clicked_slot >= 0) {

			GameInput	gi = GameInput.getInstance();
	
			if(gi.pointing.trigger_off) {

				do {

					// 아이템 사용 중.
					if(this.player.step.get_next() == chrBehaviorLocal.STEP.USE_ITEM) {

						break;
					}

					Item.Slot	slot = this.player.item_slot.miscs[this.clicked_slot];

					if(slot.favor == null) {

						break;
					}

					// 사용 중인 아이템(조작은 할 수 있게 됐지만 슬롯에서는 아직.
					// 삭제되지 않은 때).
					if(slot.is_using) {

						break;
					}

					this.player.control.cmdUseItemSelf(this.clicked_slot, slot.favor, true);

					SoundManager.getInstance().playSE(Sound.ID.DDG_SE_SYS03);

				} while(false);

				this.clicked_slot = -1;
			}
		}
	}
Example #19
0
    public override void    execute()
    {
        base.execute();

        float stop_to_move = 5.0f;
        float move_to_stop = 3.0f;

        chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

        // ---------------------------------------------------------------- //
        // 다음 상태로 이동할지 체크한다.

        switch (this.step.do_transition())
        {
        case STEP.STOP:
        {
            Vector3 ditance_vector = player.control.getPosition() - this.control.getPosition();

            ditance_vector.y = 0.0f;

            if (ditance_vector.magnitude >= stop_to_move)
            {
                this.step.set_next(STEP.MOVE);
            }
        }
        break;

        case STEP.MOVE:
        {
            Vector3 ditance_vector = player.control.getPosition() - this.control.getPosition();

            ditance_vector.y = 0.0f;

            if (ditance_vector.magnitude <= move_to_stop)
            {
                this.step.set_next(STEP.STOP);
            }
        }
        break;
        }

        // ---------------------------------------------------------------- //
        // 상태 전환 시 초기화.

        while (this.step.get_next() != STEP.NONE)
        {
            switch (this.step.do_initialize())
            {
            case STEP.MOVE:
            {
                this.move_target    = player.control.getPosition();
                this.heading_target = this.move_target;
            }
            break;
            }
        }

        // ---------------------------------------------------------------- //
        // 각 상태에서의 실행 처리.

        switch (this.step.do_execution(Time.deltaTime))
        {
        case STEP.MOVE:
        {
            this.move_target    = player.control.getPosition();
            this.heading_target = this.move_target;

            this.exec_step_move();
        }
        break;
        }

        this.collision = "";

        // ---------------------------------------------------------------- //
    }
    public override void initializeMap(GameRoot game_root)
    {
        MapCreator   map_creator   = MapCreator.get();
        PartyControl party_control = PartyControl.get();

        map_creator.setRoomNum(1, 1);

        // Floor 루트 생성.
        map_creator.floor_root_go = new GameObject("Floor");

        // 무기 선택 플로어에서는 방의 블록을 3 x 4로 변경.
        map_creator.setRoomGridNum(3, 4);

        // 방 만들기.
        RoomController room = map_creator.createRoomFloor(new Map.RoomIndex(0, 0));

        // 더미 방 만들기.
        RoomController vacancy = map_creator.createVacancy(new Map.RoomIndex(0, -1));

        // 방 구분 벽 만들기.
        map_creator.createRoomWall();

        // 외벽 만들기.
        GameObject outer_walls = map_creator.createOuterWalls();

        // 플로어 이동 도어를 하나만 만든다.
        map_creator.createFloorDoor(new Map.RoomIndex(0, 0), new Map.BlockIndex(1, 3), Map.EWSN.NORTH);

        // ---------------------------------------------------------------- //

        Renderer[] renderers = outer_walls.GetComponentsInChildren <Renderer>();

        foreach (var render in renderers)
        {
            render.material.shader = this.map_shader;
        }

        //

        renderers = vacancy.GetComponentsInChildren <Renderer>();

        foreach (var render in renderers)
        {
            render.material.shader = this.map_shader;
        }

        renderers = room.GetComponentsInChildren <Renderer>();

        foreach (var render in renderers)
        {
            render.material.shader = this.map_shader;
        }

        // ---------------------------------------------------------------- //
        // 무 아저씨.

        chrController kabusan = CharacterRoot.get().createNPC("NPC_Kabu_San");

        kabusan.cmdSetPositionAnon(chrBehaviorKabu.getStayPosition());
        kabusan.cmdSetDirectionAnon(chrBehaviorKabu.getStayDirection());

        // ---------------------------------------------------------------- //
        // 로컬 플레이어.

        party_control.createLocalPlayer(GlobalParam.getInstance().global_account_id);

        chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

        player.control.cmdSetPositionAnon(new Vector3(0.0f, 0.0f, -9.0f));
        player.changeBulletShooter(SHOT_TYPE.EMPTY);

        // ---------------------------------------------------------------- //
        // 아이템 생성.

        this.generateItems(game_root);

        party_control.setCurrentRoom(room);

        ItemWindow.get().setActive(false);
    }
Example #21
0
	void	Update()
	{
		// ---------------------------------------------------------------- //
		// 다음 상태로 전환할지 체크합니다.

		switch(this.step.do_transition()) {

			case STEP.WAIT_ENTER:
			{
				if(this.player != null) {

					this.step.set_next(STEP.ENTERED);
				}
			}
			break;

			case STEP.ENTERED:
			{
				if(YesNoAskDialog.get().isSelected()) {

					if(YesNoAskDialog.get().getSelection() == YesNoAskDialog.SELECTION.YES) {

						LeaveEvent	leave_event = EventRoot.get().startEvent<LeaveEvent>();

						if(leave_event != null) {
			
							leave_event.setPrincipal(this.player);
							leave_event.setIsLocalPlayer(true);

							// 정원 이동 요청 발행.
							if (GameRoot.get().net_player)
							{
								GameRoot.get().NotifyFieldMoving();
								GlobalParam.get().request_move_home = false;
							}
							else {
								GlobalParam.get().request_move_home = true;
							}

						}

						this.step.set_next(STEP.IDLE);

					} else {

						this.step.set_next(STEP.WAIT_LEAVE);
					}

				} else if(this.player == null) {

					this.step.set_next(STEP.LEAVE);
				}
			}
			break;

			case STEP.WAIT_LEAVE:
			{
				if(this.player == null) {

					this.step.set_next(STEP.LEAVE);
				}
			}
			break;
		}

		// ---------------------------------------------------------------- //
		// 상태가 전환되면 초기화.

		while(this.step.get_next() != STEP.NONE) {

			switch(this.step.do_initialize()) {

				case STEP.WAIT_ENTER:
				case STEP.IDLE:
				{
					this.player = null;

					YesNoAskDialog.get().close();
				}
				break;

				case STEP.ENTERED:
				{
					if(GlobalParam.get().is_in_my_home) {

						YesNoAskDialog.get().setText("친구 정원에 놀러갈까요?");
						YesNoAskDialog.get().setButtonText("간다", "안 간다");

					} else {

						YesNoAskDialog.get().setText("집에 돌아갈까요?");
						YesNoAskDialog.get().setButtonText("돌아간다", "더 논다");
					}
					YesNoAskDialog.get().dispatch();
				}
				break;

				case STEP.WAIT_LEAVE:
				{
					YesNoAskDialog.get().close();
				}
				break;

				case STEP.LEAVE:
				{
					YesNoAskDialog.get().close();

					this.step.set_next(STEP.WAIT_ENTER);
				}
				break;
			}
		}

		// ---------------------------------------------------------------- //
		// 각 상태에서의 실행 처리.

		switch(this.step.do_execution(Time.deltaTime)) {

			case STEP.WAIT_ENTER:
			{
			}
			break;
		}
	}
Example #22
0
	void	OnTriggerExit(Collider other)
	{
		do {

			var		player = other.gameObject.GetComponent<chrBehaviorLocal>();

			if(player == null) {

				break;
			}
			if(player != this.player) {

				break;
			}

			this.player = null;

		} while(false);
	}
Example #23
0
        public override void    execute()
        {
            BasicAction basic_action = this.behavior.basic_action;

            if (this.finish_child())
            {
                this.step.set_next(STEP.MOVE);
            }

            // ---------------------------------------------------------------- //
            // 다음 상태로 이동할지 체크합니다.

            switch (this.step.do_transition())
            {
            // 걷는 중.
            case STEP.MOVE:
            {
                if (this.step.get_time() > 1.0f)
                {
                    this.step.set_next(STEP.REST);
                }

                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                if (this.behavior.isInAttackRange(player.control))
                {
                    this.push(this.melee_attack);
                    this.step.sleep();
                }
            }
            break;

            // 멈춤.
            case STEP.REST:
            {
                if (this.step.get_time() > 1.0f)
                {
                    this.step.set_next(STEP.MOVE);
                }

                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                if (this.behavior.isInAttackRange(player.control))
                {
                    this.push(this.melee_attack);
                    this.step.sleep();
                }
            }
            break;
            }

            // ---------------------------------------------------------------- //
            // 상태가 전환됐을 때의 초기화.

            while (this.step.get_next() != STEP.NONE)
            {
                switch (this.step.do_initialize())
                {
                // 걷기 중.
                case STEP.MOVE:
                {
                    basic_action.move_dir += Random.Range(-90.0f, 90.0f);

                    if (basic_action.move_dir > 180.0f)
                    {
                        basic_action.move_dir -= 360.0f;
                    }
                    else if (basic_action.move_dir < -180.0f)
                    {
                        basic_action.move_dir += 360.0f;
                    }
                }
                break;
                }
            }

            // ---------------------------------------------------------------- //
            // 각 상태에서의 실행 처리.

            switch (this.step.do_execution(Time.deltaTime))
            {
            // 걷기 중.
            case STEP.MOVE:
            {
                basic_action.executeMove();

                basic_action.setMoveMotionSpeed(1.0f);
            }
            break;

            // 멈춤.
            case STEP.REST:
            {
                basic_action.setMoveMotionSpeed(0.0f);
            }
            break;
            }

            // ---------------------------------------------------------------- //

            this.execute_child();
        }
Example #24
0
    public override void    execute()
    {
        base.execute();

        // ---------------------------------------------------------------- //
        // 스텝 내 경과 시간을 진행한다.

        this.step_timer += Time.deltaTime;

        // ---------------------------------------------------------------- //
        // 다음 상태로 전환할지 체크한다.

        if (this.next_step == STEP.NONE)
        {
            switch (this.step)
            {
            case STEP.MOVE:
            {
            }
            break;
            }
        }

        // ---------------------------------------------------------------- //
        // 상태 전환 시 초기화.

        while (this.next_step != STEP.NONE)
        {
            this.step      = this.next_step;
            this.next_step = STEP.NONE;

            switch (this.step)
            {
            case STEP.OUTER_CONTROL:
            {
                this.GetComponent <Rigidbody>().Sleep();
            }
            break;

            case STEP.MOVE:
            {
                this.move_target    = this.transform.position;
                this.heading_target = this.transform.TransformPoint(Vector3.forward);
            }
            break;
            }

            this.step_timer = 0.0f;
        }

        // ---------------------------------------------------------------- //
        // 각 상태에서의 실행 처리.

        GameInput gi = GameInput.getInstance();

        switch (this.step)
        {
        case STEP.MOVE:
        {
            if (this.in_formation)
            {
                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                Vector3 leader_position = player.transform.TransformPoint(this.position_in_formation);

                if (Vector3.Distance(this.control.getPosition(), leader_position) > 1.0f)
                {
                    this.move_target    = leader_position;
                    this.heading_target = this.move_target;
                }
            }

            this.exec_step_move();
        }
        break;
        }

        this.bullet_shooter.execute(gi.shot.current);

        this.collision = "";

        // ---------------------------------------------------------------- //
    }
Example #25
0
    void    Update()
    {
        // ---------------------------------------------------------------- //
        // 다음 상태로 전환할지 체크합니다.

        switch (this.step.do_transition())
        {
        case STEP.WAIT_ENTER:
        {
            if (this.player != null)
            {
                this.step.set_next(STEP.ENTERED);
            }
        }
        break;

        case STEP.ENTERED:
        {
            if (YesNoAskDialog.get().isSelected())
            {
                if (YesNoAskDialog.get().getSelection() == YesNoAskDialog.SELECTION.YES)
                {
                    LeaveEvent leave_event = EventRoot.get().startEvent <LeaveEvent>();

                    if (leave_event != null)
                    {
                        leave_event.setPrincipal(this.player);
                        leave_event.setIsLocalPlayer(true);

                        // 정원 이동 요청 발행.
                        if (GameRoot.get().net_player)
                        {
                            GameRoot.get().NotifyFieldMoving();
                            GlobalParam.get().request_move_home = false;
                        }
                        else
                        {
                            GlobalParam.get().request_move_home = true;
                        }
                    }

                    this.step.set_next(STEP.IDLE);
                }
                else
                {
                    this.step.set_next(STEP.WAIT_LEAVE);
                }
            }
            else if (this.player == null)
            {
                this.step.set_next(STEP.LEAVE);
            }
        }
        break;

        case STEP.WAIT_LEAVE:
        {
            if (this.player == null)
            {
                this.step.set_next(STEP.LEAVE);
            }
        }
        break;
        }

        // ---------------------------------------------------------------- //
        // 상태가 전환되면 초기화.

        while (this.step.get_next() != STEP.NONE)
        {
            switch (this.step.do_initialize())
            {
            case STEP.WAIT_ENTER:
            case STEP.IDLE:
            {
                this.player = null;

                YesNoAskDialog.get().close();
            }
            break;

            case STEP.ENTERED:
            {
                if (GlobalParam.get().is_in_my_home)
                {
                    YesNoAskDialog.get().setText("친구 정원에 놀러갈까요?");
                    YesNoAskDialog.get().setButtonText("간다", "안 간다");
                }
                else
                {
                    YesNoAskDialog.get().setText("집에 돌아갈까요?");
                    YesNoAskDialog.get().setButtonText("돌아간다", "더 논다");
                }
                YesNoAskDialog.get().dispatch();
            }
            break;

            case STEP.WAIT_LEAVE:
            {
                YesNoAskDialog.get().close();
            }
            break;

            case STEP.LEAVE:
            {
                YesNoAskDialog.get().close();

                this.step.set_next(STEP.WAIT_ENTER);
            }
            break;
            }
        }

        // ---------------------------------------------------------------- //
        // 각 상태에서의 실행 처리.

        switch (this.step.do_execution(Time.deltaTime))
        {
        case STEP.WAIT_ENTER:
        {
        }
        break;
        }
    }
Example #26
0
    // 소환수 출현 체크.
    private void    checkSummonBeast()
    {
        if (m_network == null)
        {
            return;
        }

        bool isInRange = true;

        if (this.players.Count <= 1)
        {
            // 혼자일 때는 나타나지 않음.
            return;
        }

        chrBehaviorLocal local_behavior = this.getLocalPlayer();

        Vector3 local_pos = local_behavior.transform.position;

        for (int gid = 0; gid < NetConfig.PLAYER_MAX; ++gid)
        {
            int node = m_network.GetClientNode(gid);

            if (m_network.IsConnected(node) == false)
            {
                continue;
            }

            chrBehaviorPlayer remote_behavior = this.getFriendByGlobalIndex(gid);

            if (remote_behavior == null)
            {
                isInRange = false;
                break;
            }

            // 5m 범위 내에 모여 있으면 나타난다.
            Vector3 remote_pos = remote_behavior.transform.position;
            if ((local_pos - remote_pos).magnitude > 5.0f)
            {
                isInRange = false;
                break;
            }
        }

        if (isInRange)
        {
            this.summon_time += Time.deltaTime;
        }
        else
        {
            // 출현 조건을 리셋.
            this.summon_time = 0.0f;
        }

        if (this.summon_time > SUMMON_TIME_CONDITION)
        {
            Character.BEAST_TYPE type = (Random.Range(0, 10) < 7)? Character.BEAST_TYPE.DOG : Character.BEAST_TYPE.NEKO;
            notifySummonBeast(type);
            this.summon_time = 0.0f;
        }
    }
Example #27
0
        public override void    execute()
        {
            BasicAction basic_action = this.behavior.basic_action;

            if (this.finish_child())
            {
                this.step.set_next(STEP.MOVE);
            }

            // ---------------------------------------------------------------- //
            // 다음 상태로 전환할지 체크합니다.

            switch (this.step.do_transition())
            {
            // 걷는 중.
            case STEP.MOVE:
            {
                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                if (this.behavior.isInAttackRange(player.control))
                {
                    this.push(this.melee_attack);
                    this.step.sleep();
                }
            }
            break;
            }

            // ---------------------------------------------------------------- //
            // 상태가 전환됐을 때의 초기화.

            while (this.step.get_next() != STEP.NONE)
            {
                switch (this.step.do_initialize())
                {
                // 걷는 중.
                case STEP.MOVE:
                {
                    this.next_position = 0;

                    Vector3 move_vector = this.positions[this.next_position] - this.control.getPosition();

                    basic_action.move_dir = Mathf.Atan2(move_vector.x, move_vector.z) * Mathf.Rad2Deg;
                }
                break;
                }
            }

            // ---------------------------------------------------------------- //
            // 각 상태에서의 실행 처리.

            switch (this.step.do_execution(Time.deltaTime))
            {
            // 걷는 중.
            case STEP.MOVE:
            {
                Vector3 tgt_vector0 = this.positions[0] - this.control.getPosition();
                Vector3 tgt_vector1 = this.positions[1] - this.control.getPosition();
                Vector3 move_vector = this.control.getMoveVector();

                float dp0 = Vector3.Dot(tgt_vector0, move_vector);
                float dp1 = Vector3.Dot(tgt_vector1, move_vector);

                if (dp0 > 0.0f && dp1 > 0.0f)
                {
                    if (tgt_vector0.sqrMagnitude < tgt_vector1.sqrMagnitude)
                    {
                        this.next_position = 0;
                    }
                    else
                    {
                        this.next_position = 1;
                    }
                }
                else if (dp0 < 0.0f && dp1 < 0.0f)
                {
                    if (tgt_vector0.sqrMagnitude > tgt_vector1.sqrMagnitude)
                    {
                        this.next_position = 0;
                    }
                    else
                    {
                        this.next_position = 1;
                    }
                }

                Vector3 tgt_vector = this.positions[this.next_position] - this.control.getPosition();

                basic_action.move_dir = Mathf.Atan2(tgt_vector.x, tgt_vector.z) * Mathf.Rad2Deg;

                basic_action.executeMove();

                basic_action.setMoveMotionSpeed(1.0f);
            }
            break;
            }

            // ---------------------------------------------------------------- //

            this.execute_child();
        }
Example #28
0
	void	OnTriggerEnter(Collider other)
	{
		do {

			var		player = other.gameObject.GetComponent<chrBehaviorLocal>();

			if(player == null) {

				break;
			}

			// 이사 중엔 맵 이동을 할 수 없습니다.
			if(player.isNowHouseMoving()) {

				break;
			}

			// 통신 상대와 접속할 때까지 이동할 수 없습니다.
			if(GameRoot.get().isConnected() == false) {

				break;
			}

			this.player = player;

		} while(false);
	}
Example #29
0
    public int RandomSeedForDebugMax  = 1000;                   //< UseRandomSeedForDebug가 유효한 때 사용하는 랜덤 레인지.

    public override void initializeMap(GameRoot game_root)
    {
        MapCreator mapCreator = MapCreator.getInstance();
        Vector3    playerStartPosition;
        int        seed = 0;

        if (UseRandomSeedForDebug)
        {
            TimeSpan ts      = new TimeSpan(DateTime.Now.Ticks);
            double   seconds = ts.TotalSeconds;
            seed = (int)((long)seconds - (long)(seconds / 1000.0) * 1000);
            //seed = Random.Range(RandomSeedForDebugMin, RandomSeedForDebugMax);
        }
        else
        {
            seed = GlobalParam.get().seed;
        }

        // 맵 자동 생성.
        Debug.Log("Use random seed:" + seed);
        mapCreator.generateLevel(seed);

        GameRoot.get().createLocalPlayer();
        GameRoot.get().createNetPlayers();

        chrBehaviorLocal local_player = PartyControl.get().getLocalPlayer();

        // 아이템을 만든다.
        mapCreator.generateItems(local_player.getAcountID());

        mapCreator.createFloorDoor();

        // 플레이어의 위치 설정.

        playerStartPosition = mapCreator.getPlayerStartPosition();

        local_player.transform.position = playerStartPosition + PartyControl.get().getPositionOffset(local_player.control.global_index);

        for (int i = 0; i < PartyControl.get().getFriendCount(); i++)
        {
            chrBehaviorPlayer friend = PartyControl.get().getFriend(i);

            friend.control.cmdSetPositionAnon(playerStartPosition + PartyControl.get().getPositionOffset(friend.control.global_index));
        }

        PartyControl.get().setCurrentRoom(mapCreator.getRoomFromPosition(playerStartPosition));

        // 스테이터스 윈도우.

        Navi.get().createStatusWindows();

        //

        //

#if false
        string local_player_id = PartyControl.get().getLocalPlayer().getAcountID();

        ItemManager.get().createItem("candy00", local_player_id);
        ItemManager.get().setPositionToItem("candy00", playerStartPosition + new Vector3(0.0f, 0.0f, 4.0f));

        ItemManager.get().createItem("ice00", local_player_id);
        ItemManager.get().setPositionToItem("ice00", playerStartPosition + new Vector3(7.0f, 0.0f, 0.0f));

        ItemManager.get().createItem("key00", local_player_id);
        ItemManager.get().setPositionToItem("key00", playerStartPosition + new Vector3(10.0f, 0.0f, 0.0f));
        ItemManager.get().createItem("key01", local_player_id);
        ItemManager.get().setPositionToItem("key01", playerStartPosition + new Vector3(10.0f, 0.0f, 0.0f));
        ItemManager.get().createItem("key02", local_player_id);
        ItemManager.get().setPositionToItem("key02", playerStartPosition + new Vector3(10.0f, 0.0f, 0.0f));
        ItemManager.get().createItem("key03", local_player_id);
        ItemManager.get().setPositionToItem("key03", playerStartPosition + new Vector3(10.0f, 0.0f, 0.0f));
#endif
    }
Example #30
0
        public override void    execute()
        {
            BasicAction basic_action = this.behavior.basic_action;

            if (this.finish_child())
            {
                this.step.set_next(STEP.MOVE);
            }

            // ---------------------------------------------------------------- //
            // 다음 상태로 전환할지 체크합니다.

            switch (this.step.do_transition())
            {
            // 걷는 중.
            case STEP.MOVE:
            {
            }
            break;

            // 멈춤.
            case STEP.REST:
            {
                if (this.step.get_time() > 1.0f)
                {
                    this.step.set_next(STEP.MOVE);
                }

                chrBehaviorLocal player = PartyControl.get().getLocalPlayer();

                if (this.behavior.isInAttackRange(player.control))
                {
                    this.push(this.melee_attack);
                    this.step.sleep();
                }
            }
            break;
            }

            // ---------------------------------------------------------------- //
            // 상태가 전환됐을 때의 초기화.

            while (this.step.get_next() != STEP.NONE)
            {
                switch (this.step.do_initialize())
                {
                // 걷는 중.
                case STEP.MOVE:
                {
                }
                break;
                }
            }

            // ---------------------------------------------------------------- //
            // 각 상태에서의 실행 처리.

            switch (this.step.do_execution(Time.deltaTime))
            {
            // 걷는 중.
            case STEP.MOVE:
            {
                var coli = basic_action.control.collision_results.Find(x => x.object1.tag == "Wall" || x.object1.tag == "Player");

                // 벽(또는 플레이어)에 부딪히면 반사해서 방향을 바꿉니다.
                do
                {
                    if (coli == null)
                    {
                        break;
                    }
                    if (coli.option0 == null)
                    {
                        break;
                    }
                    ContactPoint cp = (ContactPoint)coli.option0;

                    // 벽의 법선 방향을 90도 단위로 합니다.

                    Vector3 normal = cp.normal;

                    float normal_angle = Mathf.Atan2(normal.x, normal.z) * Mathf.Rad2Deg;

                    normal_angle = MathUtility.unormDegree(normal_angle);
                    normal_angle = Mathf.Round(normal_angle / 90.0f) * 90.0f;

                    normal = Quaternion.AngleAxis(normal_angle, Vector3.up) * Vector3.forward;

                    Vector3 v = basic_action.getMoveVector();

                    if (Vector3.Dot(v, normal) >= 0.0f)
                    {
                        break;
                    }

                    v -= 2.0f * Vector3.Dot(v, normal) * normal;
                    basic_action.setMoveDirByVector(v);

                    // 플레이어에게 부딪혔으면 대미지를 줍니다.
                    do
                    {
                        if (coli.object1.tag != "Player")
                        {
                            break;
                        }

                        chrController chr = coli.object1.GetComponent <chrController>();

                        if (chr == null)
                        {
                            break;
                        }
                        if (!(chr.behavior is chrBehaviorLocal))
                        {
                            break;
                        }

                        chr.causeDamage(this.control.vital.getAttackPower(), -1);
                    } while(false);
                } while(false);

                basic_action.setMoveSpeed(4.0f);
                basic_action.setMoveMotionSpeed(0.0f);

                basic_action.executeMove();

                //

                this.model.transform.Rotate(new Vector3(7.0f, 0.0f, 0.0f));
            }
            break;

            // 멈춤.
            case STEP.REST:
            {
                basic_action.setMoveMotionSpeed(0.0f);
            }
            break;
            }

            // ---------------------------------------------------------------- //

            this.execute_child();
        }
Example #31
0
    protected void          create_debug_window()
    {
        var window = dbwin.root().createWindow("query");

        window.createButton("select.done")
        .setOnPress(() =>
        {
            for (int i = 0; i < NetConfig.PLAYER_MAX; i++)
            {
                var query = new QuerySelectDone(AccountManager.get().getAccountData(i).account_id);

                QueryManager.get().registerQuery(query);
            }
        });
        window.createButton("select.finish")
        .setOnPress(() =>
        {
            var query = new QuerySelectFinish("Daizuya");

            QueryManager.get().registerQuery(query);
        });

        window.createButton("summon dog")
        .setOnPress(() =>
        {
            QuerySummonBeast query_summon = new QuerySummonBeast("Daizuya", "Dog");

            QueryManager.get().registerQuery(query_summon);
        });

        window.createButton("summon neko")
        .setOnPress(() =>
        {
            QuerySummonBeast query_summon = new QuerySummonBeast("Daizuya", "Neko");

            QueryManager.get().registerQuery(query_summon);
        });

        window.createButton("cake count")
        .setOnPress(() =>
        {
            for (int i = 0; i < PartyControl.get().getFriendCount(); i++)
            {
                chrBehaviorPlayer friend = PartyControl.get().getFriend(i);

                QueryCakeCount query_cake = new QueryCakeCount(friend.getAcountID(), (i + 1) * 10);

                QueryManager.get().registerQuery(query_cake);
            }
        });

#if false
        window.createButton("버린다")
        .setOnPress(() =>
        {
            chrBehaviorLocal player = CharacterRoot.get().findCharacter <chrBehaviorLocal>(GameRoot.getInstance().account_name_local);

            player.controll.cmdItemQueryDrop();
        });

        window.createButton("말풍선")
        .setOnPress(() =>
        {
            //chrBehaviorLocal	player = CharacterRoot.get().findCharacter<chrBehaviorLocal>(GameRoot.getInstance().account_name_local);
            chrBehaviorNet player = CharacterRoot.get().findCharacter <chrBehaviorNet>("Daizuya");

            player.controll.cmdQueryTalk("멀리 있는 사람과 Talk한다", true);
        });
#endif
    }