Esempio n. 1
0
        protected override void OnExecuteEvent(VEntity entity)
        {
            MovementEvent       moveEvent           = VEntityComponentSystemManager.GetVComponent <MovementEvent>(entity);
            PositionTrackSystem positionTrackSystem = ecsManager.GetSystem <PositionTrackSystem>();

            // check to make sure that the square is unoccupied
            bool isUnoccupied = true;

            foreach (VEntity v in positionTrackSystem.GetAtCoord(moveEvent.targetCoord))
            {
                if (VEntityComponentSystemManager.HasVComponent <MovementBlockComponent>(v))
                {
                    isUnoccupied = false;
                }
            }

            if (isUnoccupied)
            {
                PositionComponent movedPosition = ecsManager.GetVComponent <PositionComponent>(moveEvent.sourceId);
                Coord             prevPosition  = movedPosition.position;
                movedPosition.position = moveEvent.targetCoord;
                positionTrackSystem.Update(movedPosition.position, moveEvent.sourceId);

                ecsManager.QueueAnimationEvent(ecsManager.CreateEntity("MoveAnim", component: new MovementAnimationEvent {
                    entityToMove = moveEvent.sourceId,
                    from         = prevPosition,
                    to           = moveEvent.targetCoord
                }));
            }
        }
Esempio n. 2
0
        protected override CellContent DrawElement(Rect rect, CellContent value)
        {
            EditorGUI.DrawRect(rect, Level.CellTypeToColor(value.cellStruct.cellType));

            if (value.unitData != null)
            {
                // Item count
                var countRect = rect.Padding(2).AlignBottom(16);
                EditorGUI.DrawRect(countRect, new Color(0.0f, 0.0f, 0.0f, 0.5f));
                GUI.Label(countRect, VEntityComponentSystemManager.GetVComponent <NameComponent>(value.unitData.entity).name, SirenixGUIStyles.CenteredGreyMiniLabel);
            }

            Texture texture = null;

            if (value.unitData != null && VEntityComponentSystemManager.HasVComponent <UnitDisplayComponent>(value.unitData.entity))
            {
                texture = GUIHelper.GetAssetThumbnail(VEntityComponentSystemManager.GetVComponent <UnitDisplayComponent>(value.unitData.entity).displaySprite, typeof(EntityScriptableObject), true);
            }

            value.unitData = (EntityScriptableObject)SirenixEditorFields.UnityPreviewObjectField(rect.Padding(16), value.unitData, texture, typeof(EntityScriptableObject));
            return(value);
        }
Esempio n. 3
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <DamageEffectEventComponent>(entity));
 }
Esempio n. 4
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <DeathAnimationEvent>(entity));
 }
Esempio n. 5
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <LowLevelDealDamageEvent>(entity));
 }
Esempio n. 6
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <EntityAppearEvent>(entity));
 }
Esempio n. 7
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <SetLifecycleEventComponent>(entity));
 }
Esempio n. 8
0
        protected override void OnEnemySetupStart(VEntity entity)
        {
            CellScoresComponent CellScoresComponent = ecsManager.GetVSingletonComponent <CellScoresComponent>();

            CellScoresComponent.cellScores = new Dictionary <Coord, int>();
            CellsListComponent       cellsList        = ecsManager.GetVSingletonComponent <CellsListComponent>();
            List <PositionComponent> positions        = ecsManager.GetVComponentsFromList <PositionComponent>(cellsList.cellIds);
            TerrainCellFinderSystem  cellFinderSystem = ecsManager.GetSystem <TerrainCellFinderSystem>();

            foreach (PositionComponent p in positions)
            {
                CellScoresComponent.cellScores.Add(p.position, 0);
            }

            // generically gets all entities that are targetable by the AI, has a position component, and ripples the scores the their positions.
            List <VEntity> enemyTargets = ecsManager.FilterEntities(test: (ventity) => {
                return(VEntityComponentSystemManager.HasVComponent <EnemyTargetComponent>(ventity) && VEntityComponentSystemManager.HasVComponent <PositionComponent>(ventity));
            });

            foreach (VEntity targetEntity in enemyTargets)
            {
                PositionComponent targetComponent = targetEntity.GetVComponent <PositionComponent>();
                RippleScores(targetComponent.position, 5, CellScoresComponent.cellScores);
            }

            List <VEntity> enemies = ecsManager.GetSystem <UnitFinderSystem>().GetAllEnemyUnits().ToList();

            foreach (VEntity enemy in enemies)
            {
                var availableDestinations = ecsManager.GetSystem <PathingSystem>().GetAvailableDestinations(VEntityComponentSystemManager.GetVComponent <PositionComponent>(enemy).position, 5);

                var moveScores = new Dictionary <Coord, int>();
                foreach (Coord cell in availableDestinations.Keys)
                {
                    int s = 0;
                    foreach (Coord neighbor in cell.GetSurroundingCoords(true, false).FindAll(c => cellFinderSystem.IsValidCell(c)))
                    {
                        s += CellScoresComponent.cellScores[neighbor];
                    }
                    moveScores.Add(cell, s);
                }

                var sortedMoveScore = moveScores.OrderByDescending(x => x.Value);

                // destination cell is where the unit is going to move to, defaulting to its original position
                Coord destinationCell = VEntityComponentSystemManager.GetVComponent <PositionComponent>(enemy).position;
                if (sortedMoveScore.Count() == 1)
                {
                    destinationCell = sortedMoveScore.First().Key;
                }
                else if (sortedMoveScore.Count() > 1)
                {
                    // randomly choose between the top two choices if there are more than 1
                    destinationCell = sortedMoveScore.ElementAt(Random.Range(0, 2)).Key;
                }
                ecsManager.ExecuteImmediateEvent("EnemyMove", component: new MovementEvent {
                    sourceId    = enemy.id,
                    targetCoord = destinationCell
                });

                ecsManager.ExecuteImmediateEvent("QueueAction", component: new QueueActionEvent {
                    entityId = enemy.id
                });
            }
        }
Esempio n. 9
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <CellScoresComponent>(entity));
 }
Esempio n. 10
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <StartGameComponent>(entity));
 }
Esempio n. 11
0
 public bool HasVComponent <T>() where T : VComponent
 {
     return(VEntityComponentSystemManager.HasVComponent <T>(this));
 }
Esempio n. 12
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <EntityAppearEvent>(entity) && ecsManager.GetVEntityById(entity.GetVComponent <EntityAppearEvent>().entityId).GetVComponent <HealthDisplayComponent>() != null);
 }
Esempio n. 13
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <QueuedActionComponent>(entity));
 }
Esempio n. 14
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <PlayerHandComponent>(entity));
 }
Esempio n. 15
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <PlayerManaSetAnimation>(entity));
 }
Esempio n. 16
0
 public override bool ShouldOperate(VEntity entity)
 {
     return(VEntityComponentSystemManager.HasVComponent <CreateTerrainCellEvent>(entity));
 }