// 애니메이션으로부터 호출되는 공격 판정의 발생 타이밍. public void NotifyImpactLanded() { this.cmdEnableCollision(true); // 충돌판정: 범위 원 안에 있으면 대미지로 한다. List <chrBehaviorPlayer> targets = PartyControl.getInstance().getPlayers(); foreach (var t in targets) { Vector3 toTarget = t.transform.position - transform.position; if (toTarget.magnitude < rangeAttackArea * this.getScale()) { //공격 범위 안에 있으므로 대미지 대상으로 한다. if (t.isLocal()) { t.control.causeDamage(getBehavior().control.vital.getAttackPower(), -1); } else { // 리모트 플레이어에는 대미지를 주지 않는다. } // 뒤로 날려버린다. t.beginBlowOut(this.transform.position, 3.0f * this.getScale()); } } // 얀츨영 연기를 많이 만든다. for (float degree = 0; degree < 360; degree += 30.0f) { this.createFootSmoke(degree, 10.0f); } }
public void OnReceiveMovingRoomPacket(int node, PacketId id, byte[] data) { #if false RoomPacket packet = new RoomPacket(data); MovingRoom room = packet.GetPacket(); // 방 이동 커맨드 발행. PartyControl.getInstance().cmdMoveRoom(room.keyId); #endif }
// 트리거에 충돌한 순간만 호출되는 메소드. void OnTriggerEnter(Collider other) { // 이벤트 박스에 들어간 플레이어를 리스트에 추가한다. do { if (other.tag != "Player") { break; } chrController player = other.gameObject.GetComponent <chrController>(); if (player == null) { break; } if (player.local_index < 0) { break; } if (this.entered_players.Contains(player.local_index)) { break; } this.entered_players.Add(player.local_index); // 게임 서버에 알림. if (this.step.get_current() == STEP.WAIT_ENTER && player.global_index == GlobalParam.get().global_account_id) { CharDoorState door = new CharDoorState(); door.globalId = player.global_index; door.keyId = (this.keyItemName != null)? this.keyItemName : "NONE"; door.isInTrigger = true; door.hasKey = (this.keyItemName != null)? PartyControl.getInstance().hasKey(player.local_index, door.keyId) : true; string log = "DoorId:" + door.keyId + " trigger:" + door.isInTrigger + " hasKey:" + door.hasKey; Debug.Log(log); DoorPacket packet = new DoorPacket(door); if (m_network != null) { int server_node = m_network.GetServerNode(); m_network.SendReliable <CharDoorState>(server_node, packet); } else { PartyControl.get().cmdMoveRoom(door.keyId); } } } while(false); }
//======================================================================== // 보스가 싸우는 플레이어 리스트를 가져온다. protected void initializeTargetPlayers() { // 계정 이름으로 ABC순으로 정렬해 둔다. targetPlayers = new List <chrBehaviorPlayer>(PartyControl.getInstance().getPlayers()); targetPlayers.Sort((a, b) => string.CompareOrdinal(a.name, b.name)); indexOfTargets = 0; // 노릴 플레이어를 결정한다. ABC 정렬 전의 선두 계정 이름을 가진 플레이어가 최초의 표적이 된다. focus = targetPlayers[indexOfTargets]; }
// 트리거로부터 뭔가가 부딪힌 순간만 호출되는 메소드. void OnTriggerExit(Collider other) { // 이벤트 박스에서 나온 플레이어를 리스트에서 제거. do { if (other.tag != "Player") { break; } chrController player = other.gameObject.GetComponent <chrController>(); if (player == null) { break; } if (!this.entered_players.Contains(player.local_index)) { break; } this.entered_players.Remove(player.local_index); // 게임 서버에 알림. if (player.global_index == GlobalParam.get().global_account_id) { CharDoorState door = new CharDoorState(); door.globalId = player.global_index; door.keyId = (this.keyItemName != null)? this.keyItemName : "NONE"; door.isInTrigger = false; door.hasKey = PartyControl.getInstance().hasKey(player.local_index, door.keyId); string log = "DoorId:" + door.keyId + " trigger:" + door.isInTrigger + " hasKey:" + door.hasKey; Debug.Log(log); DoorPacket packet = new DoorPacket(door); if (m_network != null) { int serer_node = m_network.GetServerNode(); m_network.SendReliable <CharDoorState>(serer_node, packet); } else { PartyControl.get().clearDoorState(door.keyId); } } } while(false); }
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; } } }
/** * 퀵 공격한다. * @param targetName 돌격 대상 플레이어 캐릭터 이름. * @param attackPower 대미지에 걸리는 계수. */ public void cmdBossQuickAttack(string target_account_name, float attack_power) { do { if (this.state != chrControllerEnemyBase.EnemyState.MAIN) { break; } chrBehaviorPlayer charge_target_player = PartyControl.getInstance().getPlayerWithAccountName(target_account_name); if (charge_target_player == null) { // 발생하지 않아야 하지만.... Debug.LogError("Can't find the player to attack directly."); break; } this.PlayQuickAttack(charge_target_player.gameObject, attack_power); } while(false); }
// 디버그 창을 만든다(여러 가지). protected void create_debug_window() { var window = dbwin.root().createWindow("game"); window.createCheckBox("어카운트1", GlobalParam.get().db_is_connected[0]) .setOnChanged((bool is_checked) => { GlobalParam.get().db_is_connected[0] = is_checked; }); window.createCheckBox("어카운트 2", GlobalParam.get().db_is_connected[1]) .setOnChanged((bool is_checked) => { GlobalParam.get().db_is_connected[1] = is_checked; }); window.createCheckBox("어카운트3", GlobalParam.get().db_is_connected[2]) .setOnChanged((bool is_checked) => { GlobalParam.get().db_is_connected[2] = is_checked; }); window.createCheckBox("어카운트 4", GlobalParam.get().db_is_connected[3]) .setOnChanged((bool is_checked) => { GlobalParam.get().db_is_connected[3] = is_checked; }); window.createCheckBox("BGM", this.debug_flag.play_bgm) .setOnChanged((bool is_checked) => { this.debug_flag.play_bgm = is_checked; if (this.debug_flag.play_bgm) { SoundManager.get().playBGM(Sound.ID.TKJ_BGM01); } else { SoundManager.get().stopBGM(); } }); /*window.createButton("물렸다") * .setOnPress(() => * { * dbwin.console().print("hoge"); * //this.next_step = STEP.TO_TITLE; * });*/ #if false window.createButton("적 만들기") .setOnPress(() => { dbwin.console().print("fuga"); /*GameObject go = GameObject.FindGameObjectWithTag("EnemyLair"); * * if(go != null) { * * chrBehaviorEnemyLair0 lair = go.GetComponent<chrBehaviorEnemyLair0>(); * * lair.createEnemy(); * }*/ }); window.createButton("적을 잔뜩 만들다") .setOnPress(() => { EnemyRoot.getInstance().createManyEnemies(); }); window.createButton("메가 크래시") .setOnPress(() => { EnemyRoot.getInstance().debugCauseDamageToAllEnemy(); }); #endif window.createButton("메가메가 크래시") .setOnPress(() => { EnemyRoot.getInstance().debugCauseVanishToAllEnemy(); }); window.createButton("제네레이터를 찾는다") .setOnPress(() => { var enemies = EnemyRoot.get().getEnemies(); var lairs = enemies.FindAll(x => (x.behavior as chrBehaviorEnemy_Lair) != null); foreach (var lair in lairs) { Debug.Log(lair.name); } }); #if false window.createButton("모두에게 대미지") .setOnPress(() => { var players = PartyControl.getInstance().getPlayers(); foreach (var player in players) { player.controll.vital.causeDamage(10.0f); } }); window.createButton("때린다") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); player.controll.cmdSetMotion("m003_attack", 1); var enemies = EnemyRoot.getInstance().getEnemies(); foreach (var enemy in enemies) { enemy.cmdSetMotion("m003_attack", 1); } }); window.createButton("마법") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); player.controll.cmdSetMotion("m004_use", 1); }); window.createButton("아팟") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); player.controll.causeDamage(0.0f); var enemies = EnemyRoot.getInstance().getEnemies(); foreach (var enemy in enemies) { enemy.cmdSetMotion("m005_damage", 1); } }); #endif window.createButton("일시정지 설정") .setOnPress(() => { this.setEnemyPause(true); }); window.createButton("일시정지 해제") .setOnPress(() => { this.setEnemyPause(false); }); this.sequence.createDebugWindow(window); }
// ================================================================ // // 디버그 창을 만든다(플레이어 관련). protected void create_debug_window_player() { var window = dbwin.root().createWindow("player"); window.createButton("당했다") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); player.control.causeDamage(100.0f, -1); }); window.createButton("아이스 과식") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); if (!player.isNowJinJin()) { player.startJinJin(); } else { player.stopJinJin(); } }); window.createButton("크림 범벅 테스트") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); if (!player.isNowCreamy()) { player.startCreamy(); } else { player.stopCreamy(); } }); window.createButton("체력 회복 테스트") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); if (!player.isNowHealing()) { player.startHealing(); } else { player.stopHealing(); } }); window.createButton("아이스 당첨 테스트") .setOnPress(() => { window.close(); EventRoot.get().startEvent <EventIceAtari>(); }); window.createButton("무기 교체") .setOnPress(() => { var player = PartyControl.getInstance().getLocalPlayer(); SHOT_TYPE shot_type = player.getShotType(); shot_type = (SHOT_TYPE)(((int)shot_type + 1) % ((int)SHOT_TYPE.NUM)); player.changeBulletShooter(shot_type); }); }
public static PartyControl get() { return(PartyControl.getInstance()); }
public int RandomSeedForDebugMax = 100; //< UseRandomSeedForDebug가 유효한 때 사용하는 랜덤 레인지. public override void initializeMap(GameRoot game_root) { MapCreator mapCreator = MapCreator.getInstance(); Vector3 start_position; int seed = 0; if (UseRandomSeedForDebug) { seed = Random.Range(RandomSeedForDebugMin, RandomSeedForDebugMax); } else { seed = LevelGeneratorSeed; } // 맵 자동 생성. mapCreator.generateLevel(seed); // 로컬 플레이어를 작성. FIXME: 통신 대응. PartyControl.getInstance().createLocalPlayer(GlobalParam.getInstance().global_account_id); // Put items including keys. mapCreator.generateItems(PartyControl.get().getLocalPlayer().getAcountID()); // Put lairs in the map. //mapCreator.generateLairs(); // FIXME: 이곳은 좌표 쓰기 명령이 되는 건가? // 일단 좌표를 직접 써넣는다. start_position = mapCreator.getPlayerStartPosition(); PartyControl.getInstance().getLocalPlayer().transform.position = start_position; mapCreator.createFloorDoor(); // Activate the start room. mapCreator.SetCurrentRoom(mapCreator.getRoomFromPosition(start_position)); { string local_player_id = PartyControl.get().getLocalPlayer().getAcountID(); ItemManager.getInstance().createItem("cake00", local_player_id); ItemManager.getInstance().createItem("candy00", local_player_id); ItemManager.getInstance().createItem("ice00", local_player_id); ItemManager.getInstance().createItem("key00", local_player_id); ItemManager.getInstance().createItem("key01", local_player_id); ItemManager.getInstance().createItem("key02", local_player_id); ItemManager.getInstance().createItem("key03", local_player_id); //ItemManager.getInstance().createItem("key04", local_player_id); ItemManager.getInstance().setPositionToItem("cake00", start_position + new Vector3(2.0f, 0.0f, 0.0f)); ItemManager.getInstance().setPositionToItem("candy00", start_position + new Vector3(4.0f, 0.0f, 0.0f)); ItemManager.getInstance().setPositionToItem("ice00", start_position + new Vector3(6.0f, 0.0f, 0.0f)); ItemManager.getInstance().setPositionToItem("key00", start_position + new Vector3(2.0f, 0.0f, -2.0f)); ItemManager.getInstance().setPositionToItem("key01", start_position + new Vector3(4.0f, 0.0f, -2.0f)); ItemManager.getInstance().setPositionToItem("key02", start_position + new Vector3(6.0f, 0.0f, -2.0f)); ItemManager.getInstance().setPositionToItem("key03", start_position + new Vector3(8.0f, 0.0f, -2.0f)); //ItemManager.getInstance().setPositionToItem("key04", start_position + new Vector3(10.0f, 0.0f, -2.0f)); } /*{ * EnemyRoot.getInstance().createEnemy("Enemy_Kumasan").transform.Translate(new Vector3(0.0f, 0.0f, 5.0f)); * EnemyRoot.getInstance().createEnemy("Enemy_Obake").transform.Translate(new Vector3(-5.0f, 0.0f, 5.0f)); * }*/ }