// 네트 플레이어 만들기. 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); }
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); } }
// 게임 시작 시에 한 번만 호출된다. 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); }
// 게임 시작 시에 한 번만 호출된다. 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); }
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(); }
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); }
// 애니메이션에서 호출되는 이벤트 퀵 공격이 성공한 순간. 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); }
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(); }
// 로컬 플레이어 획득. 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); }
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; } } }
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(); }); }
// 레벨 시작 시에 호출. 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); }
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); }
// ================================================================ // // 로컬 플레이어 만들기. 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); } }
// ---------------------------------------------------------------- // // 케이트 데이터 송수신. 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); } }
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; } } }
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); }
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; } }
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); }
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(); }
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 = ""; // ---------------------------------------------------------------- // }
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; } }
// 소환수 출현 체크. 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; } }
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(); }
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); }
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 }
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(); }
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 }