Esempio n. 1
0
    // 애니메이션으로부터 호출되는 공격 판정의 발생 타이밍.
    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);
        }
    }
Esempio n. 2
0
    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
    }
Esempio n. 3
0
    // 트리거에 충돌한 순간만 호출되는 메소드.
    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);
    }
Esempio n. 4
0
    //========================================================================

    // 보스가 싸우는 플레이어 리스트를 가져온다.
    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];
    }
Esempio n. 5
0
    // 트리거로부터 뭔가가 부딪힌 순간만 호출되는 메소드.
    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);
    }
Esempio n. 6
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;
            }
        }
    }
Esempio n. 7
0
    /**
     * 퀵 공격한다.
     * @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);
    }
Esempio n. 8
0
    // 디버그 창을 만든다(여러 가지).
    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);
    }
Esempio n. 9
0
    // ================================================================ //

    // 디버그 창을 만든다(플레이어 관련).
    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);
        });
    }
Esempio n. 10
0
 public static PartyControl      get()
 {
     return(PartyControl.getInstance());
 }
Esempio n. 11
0
    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));
         * }*/
    }