Beispiel #1
0
    /// <summary>
    /// 根据配置表信息创建一个player entity
    /// </summary>
    /// <param name="uid"></param>
    /// <param name="spawnPos"></param>
    /// <param name="rotation"></param>
    /// <returns></returns>
    public GameEntity CreatePlayer(ulong uid, Vector2 spawnPos, Quaternion rotation)
    {
        GameEntity gameEntity = context.GetEntityWithUID(uid);

        if (gameEntity != null && gameEntity.isDestroyed)
        {
            DestroyEntity(gameEntity);
        }

        gameEntity = CreateBasePlayer(uid);

        gameEntity.ReplacePosition(spawnPos);
        gameEntity.ReplaceRotation(rotation);
        gameEntity.isInvincible = false; //不开启无敌


        var list = new List <ItemType>();

        list.Add(ItemType.None);
        gameEntity.ReplacePlayerItemList(list);


        PlayerInfo playerInfo = configService.GetPlayerInfo();

        gameEntity.ReplacePlayerInfo(playerInfo);
        gameEntity.ReplaceSpeed(playerInfo.playerConfig.moveSpeed);
        gameEntity.AddAsset("Player");

        context.ReplaceGlobalHero(gameEntity);

        return(gameEntity);
    }
Beispiel #2
0
    /// <summary>
    /// 创建敌人
    /// </summary>
    /// <param name="uid"></param>
    /// <param name="spawnPos"></param>
    /// <param name="type">敌人的种类</param>
    /// <param name="behavior">对应敌人种类的行为</param>
    /// <param name="speed"></param>
    /// <returns></returns>
    public GameEntity CreateEnemy(ulong uid, Vector2 spawnPos, EnemyType type, EnemyBehavior behavior, float speed = 0)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.Enemy);
        gameEntity.AddPosition(spawnPos);
        gameEntity.AddRotation(Quaternion.identity);

        gameEntity.AddEnemyType(type);
        gameEntity.AddEnemyState(EnemyState.None);
        gameEntity.AddEnemyBehavior(behavior);


        gameEntity.isDestroyed = false;

        NormalEnemyInfo enemyInfo = configService.GetEnemyInfo();

        gameEntity.AddEnemyInfo(enemyInfo);
        //如果需要动态更改则动态改 否则读配置
        if (speed != 0)
        {
            gameEntity.AddSpeed(speed);
        }
        else
        {
            gameEntity.AddSpeed(enemyInfo.speed);
        }

        gameEntity.AddAsset("Enemy");

        return(gameEntity);
    }
    public void InitBoradDatas(int row, int col)
    {
        _boardDatas = new int[row, col];
        _boardEntityDic.Clear();
        currentStarNum = row * col;
        startPosX      = (float)(-(col - 1) / 2.0);
        startPosY      = (float)(-(row - 1) / 2.0);
        for (int i = 0; i < row; i++)
        {
            for (int j = 0; j < col; j++)
            {
                int starType = gameConfig.config.GetRandomStarType();
                _boardDatas[i, j] = starType;

                string starName = gameConfig.config.GetStarName(starType);

                GameEntity entity = CreateEntity();
                entity.AddStar(starType, i, j);

                entity.AddAsset(gameConfig.config.GetStarName(starType));

                entity.AddPosition(startPosX + (j), startPosY + (i));

                string key = getIndexKey(i, j);
                if (_boardEntityDic.ContainsKey(key))
                {
                    _boardEntityDic[key] = entity;
                }
                else
                {
                    _boardEntityDic.Add(key, entity);
                }
            }
        }
    }
Beispiel #4
0
 protected override void Execute(List <InputEntity> entities)
 {
     foreach (InputEntity entity in entities)
     {
         GameEntity newEntity = gameContext.CreateEntity();
         newEntity.AddAsset("Prefabs/ClickHighlightPrefab");
         newEntity.AddPosition(entity.terrainClick.position);
         newEntity.AddRotation(Quaternion.FromToRotation(Vector3.up, entity.terrainClick.normal));
         newEntity.AddDestroyCountdown(0.3f);
     }
 }
Beispiel #5
0
    public static GameEntity CreateWorker(GameContext gameContext)
    {
        GameEntity entity = gameContext.CreateEntity();

        entity.AddAsset("Prefabs/Unit");
        entity.AddSelectable("Prefabs/Selection");

        entity.ReplaceNavigationAgent(null);
        entity.ReplaceNavigationObstacle(null);
        entity.AddResourceLimit(15);
        entity.AddHealth(50f);

        return(entity);
    }
Beispiel #6
0
    public static GameEntity CreateWarrior(GameContext gameContext)
    {
        GameEntity entity = gameContext.CreateEntity();

        entity.AddAsset("Prefabs/UnitWarrior");
        entity.AddSelectable("Prefabs/Selection");

        entity.AddDetectProximity(30f * 30f);
        entity.ReplaceNavigationAgent(null);
        entity.ReplaceNavigationObstacle(null);
        entity.AddResourceLimit(5);
        entity.AddHealth(100f);

        return(entity);
    }
Beispiel #7
0
    /// <summary>
    /// 创建游戏地图
    /// </summary>
    /// <param name="uid"></param>
    /// <returns></returns>
    public GameEntity CreateMap(ulong uid)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.GameMap);
        gameEntity.AddPosition(Vector2.zero);
        gameEntity.AddRotation(Quaternion.identity);

        MapInfo mapInfo = configService.GetMapInfo();

        gameEntity.AddMapInfo(mapInfo);
        gameEntity.AddAsset("Map");

        return(gameEntity);
    }
Beispiel #8
0
    /// <summary>
    /// 创造角色当前身上的道具
    /// </summary>
    /// <param name="uid"></param>
    /// <param name="spawnPos"></param>
    /// <param name="itemType">当前吃的道具类型</param>
    /// <returns></returns>
    public GameEntity CreatePlayerItem(ulong uid, Vector2 spawnPos, int itemType)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.PlayerItem);
        gameEntity.AddItemType((ItemType)itemType, ItemType.None);
        gameEntity.AddPosition(spawnPos);
        gameEntity.AddRotation(Quaternion.identity);

        ItemInfo playerItemInfo = configService.GetPlayerItemInfo();

        gameEntity.AddItemInfo(playerItemInfo);

        gameEntity.AddAsset("PlayerItem");

        return(gameEntity);
    }
Beispiel #9
0
    public GameEntity CreateCustomizedEnemy(ulong uid, Vector2 spawnPos, EnemyType type, GameObject go)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.Enemy);
        gameEntity.AddPosition(spawnPos);
        gameEntity.AddRotation(Quaternion.identity);

        gameEntity.AddEnemyType(type);
        gameEntity.AddEnemyState(EnemyState.None);

        gameEntity.isDestroyed = false;

        gameEntity.AddAsset(go);

        return(gameEntity);
    }
Beispiel #10
0
    /// <summary>
    ///  创造地图上的道具
    /// </summary>
    /// <param name="uid"></param>
    /// <param name="spawnPos"></param>
    /// <returns></returns>
    public GameEntity CreateItem(ulong uid, Vector2 spawnPos)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.Item);
        gameEntity.AddPosition(spawnPos);
        gameEntity.AddRotation(Quaternion.identity);

        ItemInfo itemInfo = configService.GetItemInfo();

        gameEntity.AddItemInfo(itemInfo);

        var index = MathUtils.RandomInt(0, (int)ItemType.None);

        // var index = 0;
        gameEntity.AddItemType((ItemType)index, (ItemType)index);

        gameEntity.AddAsset("Item");

        return(gameEntity);
    }
Beispiel #11
0
    /// <summary>
    /// 创建敌人死亡后的涂鸦
    /// </summary>
    /// <param name="uid"></param>
    /// <param name="spawnPos"></param>
    /// <param name="typeIndex"></param>
    /// <returns></returns>
    public GameEntity CreateSpilt(ulong uid, Vector2 spawnPos, int typeIndex)
    {
        CheckDuplicateEntity(uid);
        GameEntity gameEntity = context.CreateEntity();

        gameEntity.AddUID(uid);
        gameEntity.AddUnitType(UnitType.Spilt);
        gameEntity.AddPosition(spawnPos);

        Quaternion randomQuaternion = Quaternion.Euler(0, 0, MathUtils.RandomFloat(0, 360));

        gameEntity.AddRotation(randomQuaternion);
        gameEntity.AddEnemyState(EnemyState.None);

        SpiltInfo spiltInfo = configService.GetSpiltInfo();

        gameEntity.AddSpiltInfo(spiltInfo);
        gameEntity.AddColorType(typeIndex);

        gameEntity.AddAsset("Spilt");

        return(gameEntity);
    }
Beispiel #12
0
        public void when_execute()
        {
            Contexts            contexts          = null;
            InstantiateSystem   instantiateSystem = null;
            Mock <IGameService> gameServiceMock   = null;
            Mock <IMonoView>    monoViewMock      = null;
            GameEntity          entity            = null;

            before = () =>
            {
                contexts        = new Contexts();
                gameServiceMock = new Mock <IGameService>();
                monoViewMock    = new Mock <IMonoView>();

                gameServiceMock.Setup(x => x.Instantiate(It.IsAny <string>())).Returns(monoViewMock.Object);
                instantiateSystem = new InstantiateSystem(contexts, gameServiceMock.Object);
            };

            context["Given entity with asset component without monoView component"] = () =>
            {
                before = () =>
                {
                    entity = contexts.game.CreateEntity();
                    entity.AddAsset("prefabName");
                    instantiateSystem.Execute();
                };

                it["Should invoke instantiate"] = () =>
                {
                    gameServiceMock.Verify(x => x.Instantiate(It.IsAny <string>()), Times.Once);
                };

                it["Should invoke initialize from monoView"] = () =>
                {
                    monoViewMock.Verify(x => x.Initialize(It.IsAny <Contexts>(), It.IsAny <IEntity>()), Times.Once);
                };

                it["Must create a monoView component"] = () =>
                {
                    entity.hasMonoView.should_be_true();
                };

                it["Must remove an asset component"] = () =>
                {
                    entity.hasAsset.should_be_false();
                };
            };

            context["Given entity with asset component and game object with transformView"] = () =>
            {
                before = () =>
                {
                    entity = contexts.game.CreateEntity();
                    entity.AddAsset("prefabName");
                    var transformViewMock = new Mock <ITransformView>();
                    monoViewMock.Setup(x => x.GetViewComponent <ITransformView>()).Returns(transformViewMock.Object);
                    instantiateSystem.Execute();
                };

                it["Must create a transformView component"] = () =>
                {
                    entity.transformView.should_not_be_null();
                };
            };

            context["Given entity with asset component and monoView component"] = () =>
            {
                before = () =>
                {
                    entity = contexts.game.CreateEntity();
                    entity.AddAsset("prefabName");
                    entity.AddMonoView(monoViewMock.Object);
                    instantiateSystem.Execute();
                };

                it["Nothing to do"] = () =>
                {
                    entity.hasAsset.should_be_true();
                    entity.hasMonoView.should_be_true();
                };
            };
        }