Beispiel #1
0
        public static Offset <Monster> BuildMonster(FlatBufferBuilder fbb)
        {
            var sword = Weapon.CreateWeapon(fbb, fbb.CreateString("Sword"), 3);
            var axe   = Weapon.CreateWeapon(fbb, fbb.CreateString("Axe"), 5);

            Monster.StartInventoryVector(fbb, 5);
            var inventoryOffset = BuildVector(fbb, true);;

            var weapons = new Offset <Weapon>[2] {
                sword, axe
            };
            var weaponsOffset = Monster.CreateWeaponsVector(fbb, weapons);

            Monster.StartPathVector(fbb, 2); //Vector of structs
            Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f);
            Vec3.CreateVec3(fbb, 4.0f, 5.0f, 6.0f);
            var path = fbb.EndVector();

            var nameOffset = fbb.CreateString("Orc");

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f));
            Monster.AddHp(fbb, 300);
            Monster.AddName(fbb, nameOffset);
            Monster.AddInventory(fbb, inventoryOffset);
            Monster.AddColor(fbb, Color.Red);
            Monster.AddWeapons(fbb, weaponsOffset);
            Monster.AddEquippedType(fbb, Equipment.Weapon); //Type of union stored
            Monster.AddEquipped(fbb, axe.Value);            // Value of union
            Monster.AddPath(fbb, path);
            return(Monster.EndMonster(fbb));
        }
Beispiel #2
0
        public void BuildNestedMonster()
        {
            const string nestedMonsterName = "NestedMonsterName";
            const short  nestedMonsterHp   = 600;
            const short  nestedMonsterMana = 1024;

            for (int i = 0; i < NumberOfRows; i++)
            {
                // Create nested buffer as a Monster type
                var fbb1 = new FlatBufferBuilder(16);
                var str1 = fbb1.CreateString(nestedMonsterName);
                Monster.StartMonster(fbb1);
                Monster.AddName(fbb1, str1);
                Monster.AddHp(fbb1, nestedMonsterHp);
                Monster.AddMana(fbb1, nestedMonsterMana);
                var monster1 = Monster.EndMonster(fbb1);
                Monster.FinishMonsterBuffer(fbb1, monster1);
                var fbb1Bytes = fbb1.SizedByteArray();
                fbb1 = null;

                // Create a Monster which has the first buffer as a nested buffer
                var fbb2         = new FlatBufferBuilder(16);
                var str2         = fbb2.CreateString("My Monster");
                var nestedBuffer = Monster.CreateTestnestedflatbufferVector(fbb2, fbb1Bytes);
                Monster.StartMonster(fbb2);
                Monster.AddName(fbb2, str2);
                Monster.AddHp(fbb2, 50);
                Monster.AddMana(fbb2, 32);
                Monster.AddTestnestedflatbuffer(fbb2, nestedBuffer);
                var monster = Monster.EndMonster(fbb2);
                Monster.FinishMonsterBuffer(fbb2, monster);
            }
        }
Beispiel #3
0
 public void UpdateMonsterAttr(int pathNum, Monster monster)
 {
     if (pathNum == target)
     {
         monster.AddHp(healthAdd);
     }
 }
Beispiel #4
0
    private byte[] Save()
    {
        Debug.Log("Creating and saving a Monster to byte array");
        // Create a `FlatBufferBuilder`, which will be used to create our
        // monsters' FlatBuffers.
        var builder = new FlatBufferBuilder(1024);

        var weaponOneName   = builder.CreateString("Sword");
        var weaponOneDamage = 3;
        var weaponTwoName   = builder.CreateString("Axe");
        var weaponTwoDamage = 5;
        // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
        var sword = Weapon.CreateWeapon(builder, weaponOneName, (short)weaponOneDamage);
        var axe   = Weapon.CreateWeapon(builder, weaponTwoName, (short)weaponTwoDamage);

        // Serialize a name for our monster, called "Orc".
        var name = builder.CreateString("Orc");

        // Create a `vector` representing the inventory of the Orc. Each number
        // could correspond to an item that can be claimed after he is slain.
        // Note: Since we prepend the bytes, this loop iterates in reverse order.
        Monster.StartInventoryVector(builder, 10);
        for (int i = 9; i >= 0; i--)
        {
            builder.AddByte((byte)i);
        }

        var inv = builder.EndVector();

        var weaps = new Offset <Weapon> [2];

        weaps[0] = sword;
        weaps[1] = axe;
        // Pass the `weaps` array into the `CreateWeaponsVector()` method to create a FlatBuffer vector.
        var weapons = Monster.CreateWeaponsVector(builder, weaps);

        Monster.StartPathVector(builder, 2);
        Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);
        Vec3.CreateVec3(builder, 4.0f, 5.0f, 6.0f);
        var path = builder.EndVector();

        // Create our monster using `StartMonster()` and `EndMonster()`.
        Monster.StartMonster(builder);
        Monster.AddPos(builder, Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f));
        Monster.AddHp(builder, 300);
        Monster.AddName(builder, name);
        Monster.AddInventory(builder, inv);
        Monster.AddColor(builder, MyGame.Sample.Color.Red);
        Monster.AddWeapons(builder, weapons);
        Monster.AddEquippedType(builder, Equipment.Weapon);
        Monster.AddEquipped(builder, axe.Value); // Axe
        Monster.AddPath(builder, path);
        var orc = Monster.EndMonster(builder);

        // Call `Finish()` to instruct the builder that this monster is complete.
        builder.Finish(orc.Value); // You could also call `Monster.FinishMonsterBuffer(builder, orc);`.

        return(builder.SizedByteArray());
    }
Beispiel #5
0
 public void UpdateMonsterAttr(int pathNum, Monster monster)
 {
     if (pathNum == target)
     {
         monster.MulSpeedFactor(speedDownFactor);
         monster.AddHp(-damage);
     }
 }
Beispiel #6
0
        static void Main(string[] args)
        {
            FlatBufferBuilder builder = new FlatBufferBuilder(1);
            var weaponOneName         = builder.CreateString("Sword");
            var weaponOneDamage       = 3;
            var weaponTwoName         = builder.CreateString("Axe");
            var weaponTwoDamage       = 5;
            // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
            var sword = Weapon.CreateWeapon(builder, weaponOneName, (short)weaponOneDamage);
            var axe   = Weapon.CreateWeapon(builder, weaponTwoName, (short)weaponTwoDamage);

            var name = builder.CreateString("Orc");

            Monster.StartInventoryVector(builder, 10);
            for (int i = 9; i >= 0; i--)
            {
                builder.AddByte((byte)i);
            }
            var inv = builder.EndVector();

            var weaps = new Offset <Weapon> [2];

            weaps[0] = sword;
            weaps[1] = axe;

            // Pass the `weaps` array into the `CreateWeaponsVector()` method to create a FlatBuffer vector.
            var weapons = Monster.CreateWeaponsVector(builder, weaps);
            var pos     = Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);

            Monster.StartMonster(builder);
            Monster.AddPos(builder, pos);
            Monster.AddHp(builder, (short)300);

            Monster.AddName(builder, name);
            Monster.AddInventory(builder, inv);
            Monster.AddColor(builder, Color.Red);

            Monster.AddWeapons(builder, weapons);
            Monster.AddEquippedType(builder, Equipment.Weapon);
            Monster.AddEquipped(builder, axe.Value); // Axe

            var orc = Monster.EndMonster(builder);

            builder.Finish(orc.Value);
            var buf = builder.SizedByteArray();

            // Initialize the client with the receive filter and request handler
            foo(buf);
            while (true)
            {
                ;
            }
        }
        public void TestNestedFlatBuffer()
        {
            const string nestedMonsterName = "NestedMonsterName";
            const short  nestedMonsterHp   = 600;
            const short  nestedMonsterMana = 1024;
            // Create nested buffer as a Monster type
            var fbb1 = new FlatBufferBuilder(16);
            var str1 = fbb1.CreateString(nestedMonsterName);

            Monster.StartMonster(fbb1);
            Monster.AddName(fbb1, str1);
            Monster.AddHp(fbb1, nestedMonsterHp);
            Monster.AddMana(fbb1, nestedMonsterMana);
            var monster1 = Monster.EndMonster(fbb1);

            Monster.FinishMonsterBuffer(fbb1, monster1);
            var fbb1Bytes = fbb1.SizedByteArray();

            fbb1 = null;

            // Create a Monster which has the first buffer as a nested buffer
            var fbb2         = new FlatBufferBuilder(16);
            var str2         = fbb2.CreateString("My Monster");
            var nestedBuffer = Monster.CreateTestnestedflatbufferVector(fbb2, fbb1Bytes);

            Monster.StartMonster(fbb2);
            Monster.AddName(fbb2, str2);
            Monster.AddHp(fbb2, 50);
            Monster.AddMana(fbb2, 32);
            Monster.AddTestnestedflatbuffer(fbb2, nestedBuffer);
            var monster = Monster.EndMonster(fbb2);

            Monster.FinishMonsterBuffer(fbb2, monster);

            // Now test the data extracted from the nested buffer
            var mons          = Monster.GetRootAsMonster(fbb2.DataBuffer);
            var nestedMonster = mons.GetTestnestedflatbufferAsMonster().Value;

            Assert.AreEqual(nestedMonsterMana, nestedMonster.Mana);
            Assert.AreEqual(nestedMonsterHp, nestedMonster.Hp);
            Assert.AreEqual(nestedMonsterName, nestedMonster.Name);

            TestObjectAPI(mons);
            TestObjectAPI(nestedMonster);
        }
Beispiel #8
0
    IEnumerator raidboss()
    {
        yield return(new WaitForSeconds(2f));

        builder = new FlatBufferBuilder(1024);

        Monster.StartMonster(builder);
        Monster.AddMonsterstate(builder, 1);
        Monster.AddPower(builder, 0);
        Monster.AddHp(builder, 0);
        Monster.AddMonsterpos(builder, Vec3.CreateVec3(builder, 0, 0, 0));
        Monster.AddMonsterrot(builder, 0);
        Offset <Monster> raidbossmonster = Monster.EndMonster(builder);

        var monsters = new Offset <Monster> [1];

        monsters[0] = raidbossmonster;
        var monstersOffset = Game.CreateMonsterVector(builder, monsters);

        Game.StartGame(builder);
        Game.AddMonster(builder, monstersOffset);
        Game.AddTablenum(builder, 1);
        Offset <Game> game = Game.EndGame(builder);

        builder.Finish(game.Value);
        sendBuffer = builder.SizedByteArray();
        sendbb     = new ByteBuffer(sendBuffer);


        if (findteam.stream.CanWrite)
        {
            //데이터를 서버에 스트림으로 보낸다 bytearray
            findteam.stream.Write(sendBuffer, 0, sendBuffer.Length);
            findteam.stream.Flush();
        }

        GameObject.Find("bossstart_cs").GetComponent <bossstart>().bossmonsterhpfac.SetActive(true);

        monster = Resources.Load <GameObject>("Bossraid/raidbossfac");

        monsterborn = Instantiate(monster, new Vector3(0f, 0f, 0f), Quaternion.identity);
    }
Beispiel #9
0
        public void BuildMonster()
        {
            for (int i = 0; i < NumberOfRows; i++)
            {
                var builder = new FlatBufferBuilder(16);
                var str1    = builder.CreateString("MonsterName");
                Monster.StartMonster(builder);
                Monster.AddName(builder, str1);
                Monster.AddHp(builder, 600);
                Monster.AddMana(builder, 1024);
                Monster.AddColor(builder, Color.Blue);
                Monster.AddTestbool(builder, true);
                Monster.AddTestf(builder, 0.3f);
                Monster.AddTestf2(builder, 0.2f);
                Monster.AddTestf3(builder, 0.1f);

                var monster1 = Monster.EndMonster(builder);
                Monster.FinishMonsterBuffer(builder, monster1);
            }
        }
Beispiel #10
0
        static FlatBufferBuilder MakeMonster()
        {
            var builder = new FlatBufferBuilder(1);

            // Create some weapons for our Monster ('Sword' and 'Axe').
            var weapon1Name   = builder.CreateString("Sword");
            var weapon1Damage = 3;
            var weapon2Name   = builder.CreateString("Axe");
            var weapon2Damage = 5;

            // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
            var weaps = new Offset <Weapon> [2];

            weaps[0] = Weapon.CreateWeapon(builder, weapon1Name, (short)weapon1Damage);
            weaps[1] = Weapon.CreateWeapon(builder, weapon2Name, (short)weapon2Damage);

            // Serialize the FlatBuffer data.
            var name     = builder.CreateString("Orc");
            var treasure = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            var inv      = Monster.CreateInventoryVector(builder, treasure);
            var weapons  = Monster.CreateWeaponsVector(builder, weaps);
            var pos      = Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);

            Monster.StartMonster(builder);
            Monster.AddPos(builder, pos);
            Monster.AddHp(builder, (short)300);
            Monster.AddName(builder, name);
            Monster.AddInventory(builder, inv);
            Monster.AddColor(builder, Color.Red);
            Monster.AddWeapons(builder, weapons);
            Monster.AddEquippedType(builder, Equipment.Weapon);
            Monster.AddEquipped(builder, weaps[1].Value);
            var orc = Monster.EndMonster(builder);

            builder.Finish(orc.Value);
            return(builder);
        }
        private void CanCreateNewFlatBufferFromScratch(bool sizePrefix)
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            StringOffset[]     names = { fbb.CreateString("Frodo"), fbb.CreateString("Barney"), fbb.CreateString("Wilma") };
            Offset <Monster>[] off   = new Offset <Monster> [3];
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[0]);
            off[0] = Monster.EndMonster(fbb);
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[1]);
            off[1] = Monster.EndMonster(fbb);
            Monster.StartMonster(fbb);
            Monster.AddName(fbb, names[2]);
            off[2] = Monster.EndMonster(fbb);
            var sortMons = Monster.CreateSortedVectorOfMonster(fbb, off);

            // We set up the same values as monsterdata.json:

            var str   = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");


            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");

            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2.Value);
            fbb.AddOffset(test1.Value);
            var testArrayOfString = fbb.EndVector();

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, Any.Monster);
            Monster.AddTest(fbb, mon2.Value);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            Monster.AddTestbool(fbb, true);
            Monster.AddTestarrayoftables(fbb, sortMons);
            var mon = Monster.EndMonster(fbb);

            if (sizePrefix)
            {
                Monster.FinishSizePrefixedMonsterBuffer(fbb, mon);
            }
            else
            {
                Monster.FinishMonsterBuffer(fbb, mon);
            }

            // Dump to output directory so we can inspect later, if needed
#if ENABLE_SPAN_T
            var    data     = fbb.DataBuffer.ToSizedArray();
            string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
            File.WriteAllBytes(filename, data);
#else
            using (var ms = fbb.DataBuffer.ToMemoryStream(fbb.DataBuffer.Position, fbb.Offset))
            {
                var    data     = ms.ToArray();
                string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
                File.WriteAllBytes(filename, data);
            }
#endif

            // Remove the size prefix if necessary for further testing
            ByteBuffer dataBuffer = fbb.DataBuffer;
            if (sizePrefix)
            {
                Assert.AreEqual(ByteBufferUtil.GetSizePrefix(dataBuffer) + FlatBufferConstants.SizePrefixLength,
                                dataBuffer.Length - dataBuffer.Position);
                dataBuffer = ByteBufferUtil.RemoveSizePrefix(dataBuffer);
            }

            // Now assert the buffer
            TestBuffer(dataBuffer);

            //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
            // revert to original values after testing
            Monster monster = Monster.GetRootAsMonster(dataBuffer);


            // mana is optional and does not exist in the buffer so the mutation should fail
            // the mana field should retain its default value
            Assert.AreEqual(monster.MutateMana((short)10), false);
            Assert.AreEqual(monster.Mana, (short)150);

            // Accessing a vector of sorted by the key tables
            Assert.AreEqual(monster.Testarrayoftables(0).Value.Name, "Barney");
            Assert.AreEqual(monster.Testarrayoftables(1).Value.Name, "Frodo");
            Assert.AreEqual(monster.Testarrayoftables(2).Value.Name, "Wilma");

            // Example of searching for a table by the key
            Assert.IsTrue(monster.TestarrayoftablesByKey("Frodo") != null);
            Assert.IsTrue(monster.TestarrayoftablesByKey("Barney") != null);
            Assert.IsTrue(monster.TestarrayoftablesByKey("Wilma") != null);

            // testType is an existing field
            Assert.AreEqual(monster.TestType, Any.Monster);

            //mutate the inventory vector
            Assert.AreEqual(monster.MutateInventory(0, 1), true);
            Assert.AreEqual(monster.MutateInventory(1, 2), true);
            Assert.AreEqual(monster.MutateInventory(2, 3), true);
            Assert.AreEqual(monster.MutateInventory(3, 4), true);
            Assert.AreEqual(monster.MutateInventory(4, 5), true);

            for (int i = 0; i < monster.InventoryLength; i++)
            {
                Assert.AreEqual(monster.Inventory(i), i + 1);
            }

            //reverse mutation
            Assert.AreEqual(monster.MutateInventory(0, 0), true);
            Assert.AreEqual(monster.MutateInventory(1, 1), true);
            Assert.AreEqual(monster.MutateInventory(2, 2), true);
            Assert.AreEqual(monster.MutateInventory(3, 3), true);
            Assert.AreEqual(monster.MutateInventory(4, 4), true);

            // get a struct field and edit one of its fields
            Vec3 pos = (Vec3)monster.Pos;
            Assert.AreEqual(pos.X, 1.0f);
            pos.MutateX(55.0f);
            Assert.AreEqual(pos.X, 55.0f);
            pos.MutateX(1.0f);
            Assert.AreEqual(pos.X, 1.0f);

            TestBuffer(dataBuffer);
            TestObjectAPI(Monster.GetRootAsMonster(dataBuffer));
        }
Beispiel #12
0
    void OnTriggerEnter(Collider other)
    // void OnCollisionEnter(Collision other)
    {
        Debug.Log("colidertest1:" + other);
        //other는 부딪힌 오브젝트 벽 또는 적에 맞으면 총알이 사라진다
        if (other.gameObject.tag == "Playerbullet")
        {
            Debug.Log("colidertest2:" + other);
            var player = GameObject.FindWithTag("Player").GetComponent <bossplayerinfo>();

            //몬스터의 체력은 플레이어 공격력 만큼 감소
            monsterhp = monsterhp - player.playerpower;

            if (monsterhp <= 0)
            {
                monsterhp = 0;
            }

            builder = new FlatBufferBuilder(1024);
            Monster.StartMonster(builder);
            Monster.AddMonsterstate(builder, 0);
            Monster.AddPower(builder, 0);
            Monster.AddHp(builder, 0);
            Monster.AddMonsterpos(builder, Vec3.CreateVec3(builder, 0, 0, 0));
            Monster.AddMonsterrot(builder, 0);
            Monster.AddAttacked(builder, 1);
            Monster.AddCurrenthp(builder, monsterhp);
            Offset <Monster> raidbossmonster = Monster.EndMonster(builder);

            var monsters = new Offset <Monster> [1];
            monsters[0] = raidbossmonster;
            var monstersOffset = Game.CreateMonsterVector(builder, monsters);


            Player.StartPlayer(builder);
            Player.AddStartstate(builder, PlayerStart.Play);
            Player.AddPower(builder, player.playerpower);
            Offset <Player> pypplayer = Player.EndPlayer(builder);



            Game.StartGame(builder);
            Game.AddPlayer(builder, pypplayer);
            Game.AddMonster(builder, monstersOffset);
            Game.AddTablenum(builder, 1);
            Offset <Game> game = Game.EndGame(builder);

            builder.Finish(game.Value);
            sendBuffer = builder.SizedByteArray();
            sendbb     = new ByteBuffer(sendBuffer);


            if (findteam.stream.CanWrite)
            {
                //데이터를 서버에 스트림으로 보낸다 bytearray
                findteam.stream.Write(sendBuffer, 0, sendBuffer.Length);
                findteam.stream.Flush();
            }



            string hp = monsterhp.ToString();
            //  monhp_text.text = hp;
            //  monhpbar.value = (float)monsterhp / (float)monstermaxhp;
            Debug.Log("player_hp: " + monsterhp);
        }

        if (other.gameObject.tag == "skill")
        {
            var player = GameObject.FindWithTag("Player").GetComponent <bossplayerinfo>();

            //몬스터의 체력은 플레이어 공격력 만큼 감소
            monsterhp = monsterhp - player.playerskillatk;

            if (monsterhp <= 0)
            {
                monsterhp = 0;
            }


            builder = new FlatBufferBuilder(1024);
            Monster.StartMonster(builder);
            Monster.AddMonsterstate(builder, 0);
            Monster.AddPower(builder, 0);
            Monster.AddHp(builder, 0);
            Monster.AddMonsterpos(builder, Vec3.CreateVec3(builder, 0, 0, 0));
            Monster.AddMonsterrot(builder, 0);
            Monster.AddCurrenthp(builder, monsterhp);
            Offset <Monster> raidbossmonster = Monster.EndMonster(builder);

            var monsters = new Offset <Monster> [1];
            monsters[0] = raidbossmonster;
            var monstersOffset = Game.CreateMonsterVector(builder, monsters);

            Player.StartPlayer(builder);
            Player.AddStartstate(builder, PlayerStart.Play);
            Player.AddPower(builder, player.playerskillatk);
            Offset <Player> pypplayer = Player.EndPlayer(builder);

            Game.StartGame(builder);
            Game.AddPlayer(builder, pypplayer);
            Game.AddMonster(builder, monstersOffset);
            Game.AddTablenum(builder, 1);
            Offset <Game> game = Game.EndGame(builder);

            builder.Finish(game.Value);
            sendBuffer = builder.SizedByteArray();
            sendbb     = new ByteBuffer(sendBuffer);


            if (findteam.stream.CanWrite)
            {
                //데이터를 서버에 스트림으로 보낸다 bytearray
                findteam.stream.Write(sendBuffer, 0, sendBuffer.Length);
                findteam.stream.Flush();
            }


            string hp = monsterhp.ToString();
            //monhp_text.text = hp;
            //monhpbar.value = (float)monsterhp / (float)monstermaxhp;
            Debug.Log("player_hp: " + monsterhp);
        }
    }
Beispiel #13
0
        public void CanCreateNewFlatBufferFromScratch()
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            // We set up the same values as monsterdata.json:

            var str   = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");


            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");

            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2);
            fbb.AddOffset(test1);
            var testArrayOfString = fbb.EndVector();


            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, Any.Monster);
            Monster.AddTest(fbb, mon2);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            Monster.AddTestbool(fbb, false);
            var mon = Monster.EndMonster(fbb);

            fbb.Finish(mon);

            // Dump to output directory so we can inspect later, if needed
            using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset))
            {
                var data = ms.ToArray();
                File.WriteAllBytes(@"Resources/monsterdata_cstest.mon", data);
            }

            // Now assert the buffer
            TestBuffer(fbb.DataBuffer);
        }
Beispiel #14
0
        public void CanCreateNewFlatBufferFromScratch()
        {
            // Second, let's create a FlatBuffer from scratch in C#, and test it also.
            // We use an initial size of 1 to exercise the reallocation algorithm,
            // normally a size larger than the typical FlatBuffer you generate would be
            // better for performance.
            var fbb = new FlatBufferBuilder(1);

            // We set up the same values as monsterdata.json:

            var str   = fbb.CreateString("MyMonster");
            var test1 = fbb.CreateString("test1");
            var test2 = fbb.CreateString("test2");


            Monster.StartInventoryVector(fbb, 5);
            for (int i = 4; i >= 0; i--)
            {
                fbb.AddByte((byte)i);
            }
            var inv = fbb.EndVector();

            var fred = fbb.CreateString("Fred");

            Monster.StartMonster(fbb);
            Monster.AddName(fbb, fred);
            var mon2 = Monster.EndMonster(fbb);

            Monster.StartTest4Vector(fbb, 2);
            MyGame.Example.Test.CreateTest(fbb, (short)10, (sbyte)20);
            MyGame.Example.Test.CreateTest(fbb, (short)30, (sbyte)40);
            var test4 = fbb.EndVector();

            Monster.StartTestarrayofstringVector(fbb, 2);
            fbb.AddOffset(test2.Value);
            fbb.AddOffset(test1.Value);
            var testArrayOfString = fbb.EndVector();

            Monster.StartMonster(fbb);
            Monster.AddPos(fbb, Vec3.CreateVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
                                                Color.Green, (short)5, (sbyte)6));
            Monster.AddHp(fbb, (short)80);
            Monster.AddName(fbb, str);
            Monster.AddInventory(fbb, inv);
            Monster.AddTestType(fbb, Any.Monster);
            Monster.AddTest(fbb, mon2.Value);
            Monster.AddTest4(fbb, test4);
            Monster.AddTestarrayofstring(fbb, testArrayOfString);
            Monster.AddTestbool(fbb, false);
            var mon = Monster.EndMonster(fbb);

            Monster.FinishMonsterBuffer(fbb, mon);


            // Dump to output directory so we can inspect later, if needed
            using (var ms = new MemoryStream(fbb.DataBuffer.Data, fbb.DataBuffer.Position, fbb.Offset))
            {
                var data = ms.ToArray();
                File.WriteAllBytes(@"Resources/monsterdata_cstest.mon", data);
            }

            // Now assert the buffer
            TestBuffer(fbb.DataBuffer);

            //Attempt to mutate Monster fields and check whether the buffer has been mutated properly
            // revert to original values after testing
            Monster monster = Monster.GetRootAsMonster(fbb.DataBuffer);

            // mana is optional and does not exist in the buffer so the mutation should fail
            // the mana field should retain its default value
            Assert.AreEqual(monster.MutateMana((short)10), false);
            Assert.AreEqual(monster.Mana, (short)150);

            // testType is an existing field and mutating it should succeed
            Assert.AreEqual(monster.TestType, Any.Monster);
            Assert.AreEqual(monster.MutateTestType(Any.NONE), true);
            Assert.AreEqual(monster.TestType, Any.NONE);
            Assert.AreEqual(monster.MutateTestType(Any.Monster), true);
            Assert.AreEqual(monster.TestType, Any.Monster);

            //mutate the inventory vector
            Assert.AreEqual(monster.MutateInventory(0, 1), true);
            Assert.AreEqual(monster.MutateInventory(1, 2), true);
            Assert.AreEqual(monster.MutateInventory(2, 3), true);
            Assert.AreEqual(monster.MutateInventory(3, 4), true);
            Assert.AreEqual(monster.MutateInventory(4, 5), true);

            for (int i = 0; i < monster.InventoryLength; i++)
            {
                Assert.AreEqual(monster.GetInventory(i), i + 1);
            }

            //reverse mutation
            Assert.AreEqual(monster.MutateInventory(0, 0), true);
            Assert.AreEqual(monster.MutateInventory(1, 1), true);
            Assert.AreEqual(monster.MutateInventory(2, 2), true);
            Assert.AreEqual(monster.MutateInventory(3, 3), true);
            Assert.AreEqual(monster.MutateInventory(4, 4), true);

            // get a struct field and edit one of its fields
            Vec3 pos = monster.Pos;

            Assert.AreEqual(pos.X, 1.0f);
            pos.MutateX(55.0f);
            Assert.AreEqual(pos.X, 55.0f);
            pos.MutateX(1.0f);
            Assert.AreEqual(pos.X, 1.0f);

            TestBuffer(fbb.DataBuffer);
        }
Beispiel #15
0
    private void Update()
    {
        if (move == 0 && check == true)
        {
            if (movecount == 0)
            {
                if (bossstart.remoteplayerlist.Contains(0))
                {
                    targetobj = (GameObject)bossstart.remoteplayerlist[0];
                    target    = targetobj.transform.GetChild(0).GetComponent <Transform>();
                }
                else if (bossstart.remoteplayerlist.Contains(1))
                {
                    targetobj = (GameObject)bossstart.remoteplayerlist[1];
                    target    = targetobj.transform.GetChild(0).GetComponent <Transform>();
                }
                else if (bossstart.remoteplayerlist.Contains(2))
                {
                    targetobj = (GameObject)bossstart.remoteplayerlist[2];
                    target    = targetobj.transform.GetChild(0).GetComponent <Transform>();
                }

                // GameObject remote_obj = (GameObject)bossstart.remoteplayerlist[i];


                Vector3 vec = target.position - monster.position;
                vec.Normalize();
                //타겟과 플레이어 사이의 벡터를 이용해 플레이어가 타겟을 바라보게 한다
                Quaternion q = Quaternion.LookRotation(vec);
                monster.rotation = q;
                startpoint       = monster.position;
                destination      = target.position;
                movecount       += 1;
                Debug.Log("movecount" + movecount);
                float yrot = monster.eulerAngles.y;


                builder = new FlatBufferBuilder(1024);

                Monster.StartMonster(builder);
                Monster.AddMonsterstate(builder, 0);
                Monster.AddPower(builder, 0);
                Monster.AddHp(builder, 0);
                Monster.AddMovestate(builder, MoveState.Move);
                Monster.AddFire(builder, 0);
                Monster.AddMonsterpos(builder, Vec3.CreateVec3(builder, destination.x, destination.y, destination.z));
                Monster.AddMonsterrot(builder, yrot);
                Offset <Monster> raidbossmonster = Monster.EndMonster(builder);

                var monsters = new Offset <Monster> [1];
                monsters[0] = raidbossmonster;
                var monstersOffset = Game.CreateMonsterVector(builder, monsters);

                Game.StartGame(builder);
                Game.AddMonster(builder, monstersOffset);
                Game.AddTablenum(builder, 1);
                Offset <Game> game = Game.EndGame(builder);

                builder.Finish(game.Value);
                sendBuffer = builder.SizedByteArray();
                sendbb     = new ByteBuffer(sendBuffer);


                if (findteam.stream.CanWrite)
                {
                    //데이터를 서버에 스트림으로 보낸다 bytearray
                    findteam.stream.Write(sendBuffer, 0, sendBuffer.Length);
                    findteam.stream.Flush();
                }
            }

            //   Debug.Log("startpoint:" + startpoint);
            //  Debug.Log("destination:" + destination);

            monster.position = Vector3.MoveTowards(monster.position, destination, 20f * Time.deltaTime);


            //목적지 보내기  목적지 받으면 그쪽으로 이동하게 하기


            if (monster.position == destination)
            //  if (Time.time > nextFire)
            {
                movecount = 0;

                //공격 신호 보내
                builder = new FlatBufferBuilder(1024);

                Monster.StartMonster(builder);
                Monster.AddMonsterstate(builder, 0);
                Monster.AddPower(builder, 0);
                Monster.AddHp(builder, 0);
                Monster.AddFire(builder, 1);
                Monster.AddMovestate(builder, MoveState.Stop);
                Monster.AddMonsterpos(builder, Vec3.CreateVec3(builder, monster.position.x, monster.position.y, monster.position.z));
                Monster.AddMonsterrot(builder, monster.eulerAngles.y);
                Offset <Monster> raidbossmonster = Monster.EndMonster(builder);

                var monsters = new Offset <Monster> [1];
                monsters[0] = raidbossmonster;
                var monstersOffset = Game.CreateMonsterVector(builder, monsters);

                Game.StartGame(builder);
                Game.AddMonster(builder, monstersOffset);
                Game.AddTablenum(builder, 1);
                Offset <Game> game = Game.EndGame(builder);

                builder.Finish(game.Value);
                sendBuffer = builder.SizedByteArray();
                sendbb     = new ByteBuffer(sendBuffer);


                if (findteam.stream.CanWrite)
                {
                    //데이터를 서버에 스트림으로 보낸다 bytearray
                    findteam.stream.Write(sendBuffer, 0, sendBuffer.Length);
                    findteam.stream.Flush();
                }

                nextFire += fireRate;

                Bullet = Resources.Load <GameObject>("Bossraid/raidmonsterbullet");
                Quaternion bullettest1  = Quaternion.Euler(0, gunpos.transform.eulerAngles.y, 0);
                Quaternion bullettest5  = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 90f, 0);
                Quaternion bullettest8  = Quaternion.Euler(0, gunpos.transform.eulerAngles.y - 90f, 0);
                Quaternion bullettest12 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 180f, 0);

                Quaternion bullettest2 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 30f, 0);
                Quaternion bullettest3 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y - 30f, 0);
                Quaternion bullettest4 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 60f, 0);

                Quaternion bullettest6 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 120f, 0);
                Quaternion bullettest7 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y - 60f, 0);

                Quaternion bullettest9  = Quaternion.Euler(0, gunpos.transform.eulerAngles.y - 120f, 0);
                Quaternion bullettest10 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y + 160f, 0);
                Quaternion bullettest11 = Quaternion.Euler(0, gunpos.transform.eulerAngles.y - 160f, 0);



                Instantiate(Bullet, gunpos.transform.position, bullettest1);
                Instantiate(Bullet, gunpos.transform.position, bullettest5);
                Instantiate(Bullet, gunpos.transform.position, bullettest8);
                Instantiate(Bullet, gunpos.transform.position, bullettest12);

                Instantiate(Bullet, gunpos.transform.position, bullettest2);
                Instantiate(Bullet, gunpos.transform.position, bullettest3);
                Instantiate(Bullet, gunpos.transform.position, bullettest4);

                Instantiate(Bullet, gunpos.transform.position, bullettest6);
                Instantiate(Bullet, gunpos.transform.position, bullettest7);

                Instantiate(Bullet, gunpos.transform.position, bullettest9);
                Instantiate(Bullet, gunpos.transform.position, bullettest10);
                Instantiate(Bullet, gunpos.transform.position, bullettest11);


                check = false;
                StartCoroutine(WaitForIt());

                //공격 데이터 보내기
            }
        }
    }
    // Example how to use FlatBuffers to create and read binary buffers.
    static void Main()
    {
        var builder = new FlatBufferBuilder(1);

        // Create some weapons for our Monster ('Sword' and 'Axe').
        var weapon1Name   = builder.CreateString("Sword");
        var weapon1Damage = 3;
        var weapon2Name   = builder.CreateString("Axe");
        var weapon2Damage = 5;

        // Use the `CreateWeapon()` helper function to create the weapons, since we set every field.
        var weaps = new Offset <Weapon> [2];

        weaps[0] = Weapon.CreateWeapon(builder, weapon1Name, (short)weapon1Damage);
        weaps[1] = Weapon.CreateWeapon(builder, weapon2Name, (short)weapon2Damage);

        // Serialize the FlatBuffer data.
        var name     = builder.CreateString("Orc");
        var treasure = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        var inv      = Monster.CreateInventoryVector(builder, treasure);
        var weapons  = Monster.CreateWeaponsVector(builder, weaps);
        var pos      = Vec3.CreateVec3(builder, 1.0f, 2.0f, 3.0f);

        Monster.StartMonster(builder);
        Monster.AddPos(builder, pos);
        Monster.AddHp(builder, (short)300);
        Monster.AddName(builder, name);
        Monster.AddInventory(builder, inv);
        Monster.AddColor(builder, Color.Red);
        Monster.AddWeapons(builder, weapons);
        Monster.AddEquippedType(builder, Equipment.Weapon);
        Monster.AddEquipped(builder, weaps[1].Value);
        var orc = Monster.EndMonster(builder);

        builder.Finish(orc.Value); // You could also call `Monster.FinishMonsterBuffer(builder, orc);`.

        // We now have a FlatBuffer that we could store on disk or send over a network.

        // ...Code to store to disk or send over a network goes here...

        // Instead, we are going to access it right away, as if we just received it.

        var buf = builder.DataBuffer;

        // Get access to the root:
        var monster = Monster.GetRootAsMonster(buf);

        // For C#, unlike other languages, most values (except for vectors and unions) are available as
        // properties instead of accessor methods.

        // Note: We did not set the `Mana` field explicitly, so we get back the default value.
        Assert(monster.Mana == 150, "monster.Mana", Convert.ToString(monster.Mana),
               Convert.ToString(150));
        Assert(monster.Hp == 300, "monster.Hp", Convert.ToString(monster.Hp), Convert.ToString(30));
        Assert(monster.Name.Equals("Orc", StringComparison.Ordinal), "monster.Name", monster.Name,
               "Orc");
        Assert(monster.Color == Color.Red, "monster.Color", Convert.ToString(monster.Color),
               Convert.ToString(Color.Red));

        var vec = monster.Pos.Value;

        Assert(vec.X == 1.0f, "vec.X",
               Convert.ToString(vec.X), Convert.ToString(1.0f));
        Assert(vec.Y == 2.0f, "vec.Y",
               Convert.ToString(vec.Y), Convert.ToString(2.0f));
        Assert(vec.Z == 3.0f, "vec.Z",
               Convert.ToString(vec.Z), Convert.ToString(3.0f));

        // Get and test the `Inventory` FlatBuffer `vector`.
        for (int i = 0; i < monster.InventoryLength; i++)
        {
            Assert(monster.Inventory(i) == i, "monster.Inventory",
                   Convert.ToString(monster.Inventory(i)), Convert.ToString(i));
        }

        // Get and test the `Weapons` FlatBuffer `vector` of `table`s.
        var expectedWeaponNames   = new string[] { "Sword", "Axe" };
        var expectedWeaponDamages = new short[] { 3, 5 };

        for (int i = 0; i < monster.WeaponsLength; i++)
        {
            Assert(monster.Weapons(i).Value.Name.Equals(expectedWeaponNames[i], StringComparison.Ordinal),
                   "monster.Weapons", monster.Weapons(i).Value.Name, expectedWeaponNames[i]);
            Assert(monster.Weapons(i).Value.Damage == expectedWeaponDamages[i], "monster.GetWeapons",
                   Convert.ToString(monster.Weapons(i).Value.Damage),
                   Convert.ToString(expectedWeaponDamages[i]));
        }

        // Get and test the `Equipped` FlatBuffer `union`.
        Assert(monster.EquippedType == Equipment.Weapon, "monster.EquippedType",
               Convert.ToString(monster.EquippedType), Convert.ToString(Equipment.Weapon));
        var equipped = monster.Equipped <Weapon>().Value;

        Assert(equipped.Name.Equals("Axe", StringComparison.Ordinal), "equipped.Name", equipped.Name,
               "Axe");
        Assert(equipped.Damage == 5, "equipped.Damage", Convert.ToString(equipped.Damage),
               Convert.ToString(5));

        Console.WriteLine("The FlatBuffer was successfully created and verified!");
    }