/// <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); }
/// <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); } } } }
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); } }
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); }
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); }
/// <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); }
/// <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); }
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); }
/// <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); }
/// <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); }
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(); }; }; }