public override void ProcessEntity(AbstractEntity entity)
        {
            MovementDataComponent md  = (MovementDataComponent)entity.GetComponent(nameof(MovementDataComponent));
            PositionComponent     pos = (PositionComponent)entity.GetComponent(nameof(PositionComponent));

            if (md != null && pos != null)
            {
                if (md.route != null && md.route.Count > 0)   // Do they have a path set up?
                {
                    Point dest = md.route[0];
                    if (pos.x == dest.X && pos.y == dest.Y)
                    {
                        md.route.RemoveAt(0); // We're on the actual square.  This should never happen!
                    }
                    else if (this.Move(entity, md, pos, dest))
                    {
                        md.route.RemoveAt(0);
                    }
                }
                else if (md.offX != 0 || md.offY != 0)
                {
                    if (pos.x + md.offX >= 0 && pos.x + md.offX < this.map_data.getWidth() && pos.y + md.offY >= 0 && pos.y + md.offY < this.map_data.getHeight())
                    {
                        this.Move(entity, md, pos, new Point(pos.x + md.offX, pos.y + md.offY));
                    }
                    // Reset movement for next turn
                    md.offX = 0;
                    md.offY = 0;
                }
            }
        }
        public override void ProcessEntity(AbstractEntity entity)
        {
            JonesTheCatComponent cat = (JonesTheCatComponent)entity.GetComponent(nameof(JonesTheCatComponent));

            if (cat == null)   // Are we a cat?
            {
                return;
            }
            CarryableComponent cc = (CarryableComponent)entity.GetComponent(nameof(CarryableComponent));

            if (cc.carrier != null)   // Don't move if we're bring carried
            {
                return;
            }
            MobDataComponent us = (MobDataComponent)entity.GetComponent(nameof(MobDataComponent));

            if (us.actionPoints <= 0)   // Only do stuff if we've got any APs
            {
                return;
            }

            MovementDataComponent mdc = (MovementDataComponent)entity.GetComponent(nameof(MovementDataComponent));

            if (mdc.route == null || mdc.route.Count == 0)
            {
                MovementSystem    ms  = (MovementSystem)this.ecs.GetSystem(nameof(MovementSystem));
                PositionComponent pos = (PositionComponent)entity.GetComponent(nameof(PositionComponent));
                Point             p   = ms.GetRandomAccessibleSquare();
                mdc.route = ms.GetAStarRoute(pos.x, pos.y, p.X, p.Y);
            }
        }
        public override void ProcessEntity(AbstractEntity entity)
        {
            AlienComponent alienData = (AlienComponent)entity.GetComponent(nameof(AlienComponent));

            if (alienData == null)   // Are we an alien?
            {
                return;
            }
            MobDataComponent us = (MobDataComponent)entity.GetComponent(nameof(MobDataComponent));

            if (us.actionPoints <= 0)   // Only do stuff if we've got any APs
            {
                return;
            }

            PositionComponent     pos    = (PositionComponent)entity.GetComponent(nameof(PositionComponent));
            AbstractEntity        target = this.GetTarget(pos.x, pos.y, us.side);
            MovementDataComponent mdc    = (MovementDataComponent)entity.GetComponent(nameof(MovementDataComponent));

            if (target != null)
            {
                Console.WriteLine($"Alien can see {target.name}");
                alienData.moveWhenNoEnemy = true;
                PositionComponent targetPos = (PositionComponent)target.GetComponent(nameof(PositionComponent));
                if (this.CheckForImpregnation(alienData, pos, target, targetPos))
                {
                    us.actionPoints -= 50;
                }
                else
                {
                    mdc.route = Misc.GetLine(pos.x, pos.y, targetPos.x, targetPos.y, true);
                }
            }
            else
            {
                if (alienData.moveWhenNoEnemy)
                {
                    alienData.moveWhenNoEnemy = false;

                    alienData.impregnateNextEnemy = Misc.random.Next(1, 2) == 1;

                    // Move to a random point on the map
                    MovementSystem ms = (MovementSystem)this.ecs.GetSystem(nameof(MovementSystem));
                    Point          p  = ms.GetRandomAccessibleSquare();
                    mdc.route = ms.GetAStarRoute(pos.x, pos.y, p.X, p.Y);
                }
                if (mdc.route == null || mdc.route.Count == 0)
                {
                    us.actionPoints -= 100; // Waiting....
                }
            }
        }
        public void PickupItem(AbstractEntity unit, AbstractEntity item, List <AbstractEntity> mapSquare)
        {
            MobDataComponent mdc = (MobDataComponent)unit.GetComponent(nameof(MobDataComponent));

            if (mdc == null || mdc.actionPoints > 0)
            {
                mdc.actionPoints -= 40;
                CanCarryComponent  ccc = (CanCarryComponent)unit.GetComponent(nameof(CanCarryComponent));
                CarryableComponent cc  = (CarryableComponent)item.GetComponent(nameof(CarryableComponent));
                // todo - check weight etc...
                ccc.AddItem(item);
                cc.carrier = unit;
                mapSquare.Remove(item);
            }
        }
Ejemplo n.º 5
0
    public IEnumerator EndConversation(AbstractEntity argEntity)
    {
        if (argEntity is Speaker)
        {
            //Go to idle pose

            ThirdPersonCamera.offset -= new Vector3(1, 1, 0) * 0.25f;
            ThirdPersonCamera.distance += 0.5f;
            ThirdPersonCamera.height -= 0.5f;

            AbstractBeing being = argEntity.GetComponent<AbstractBeing>();
            if(being != null)
                being.Animation.CrossFade(AnimationResources.Idle);

            yield return StartCoroutine(argEntity.Deactivate(Speaker));

            // Re-Enable Controllers
            if (ThirdPersonController != null)
                ThirdPersonController.enabled = true;

            // Disable GUIs
            RemoteGUI.Label = "";
            RemoteGUI.Action = null;
            //DialogueGUI.CurrentLine = null;
            DialogueGUI.TransOut = true;
        }
    }
Ejemplo n.º 6
0
        public override void ProcessEntity(AbstractEntity entity)
        {
            // Todo
            ImpregnatedComponent ic = (ImpregnatedComponent)entity.GetComponent(nameof(ImpregnatedComponent));

            if (ic != null)
            {
                ic.turnsUntilBurst--;
                if (ic.turnsUntilBurst <= 0)
                {
                    PositionComponent pos = (PositionComponent)entity.GetComponent(nameof(PositionComponent));
                    AlienEntityFactory.CreateAlien(this.ecs, this.mapData, pos.x, pos.y);
                    entity.markForRemoval = true;
                }
            }
        }
        public AbstractEntity AddEntityToUnit(AbstractEntity e, AbstractEntity unit)
        {
            CanCarryComponent c = (CanCarryComponent)unit.GetComponent(nameof(CanCarryComponent));

            e.AddComponent(new PositionComponent(e, this.map_data, 0, 0, false, false));
            c.AddItem(e);
            return(e);
        }
        public void EntityShootingAtEntity(AbstractEntity shooter, Point shooterPos, AbstractEntity target, Point targetPos)
        {
            CanCarryComponent ccc = (CanCarryComponent)shooter.GetComponent(nameof(CanCarryComponent));

            if (ccc != null && ccc.CurrentItem != null)
            {
                ItemCanShootComponent icsc = (ItemCanShootComponent)ccc.CurrentItem.GetComponent(nameof(ItemCanShootComponent));
                if (icsc != null)
                {
                    MobDataComponent us = (MobDataComponent)shooter.GetComponent(nameof(MobDataComponent));
                    if (us.actionPoints > 0)
                    {
                        this.EntityShotByEntity(shooter, shooterPos.X, shooterPos.Y, target, targetPos.X, targetPos.Y);
                        us.actionPoints -= 50;
                    }
                }
            }
        }
        public void ThrowItem(AbstractEntity thrower, int destX, int destY)
        {
            MobDataComponent mdc = (MobDataComponent)thrower.GetComponent(nameof(MobDataComponent));

            if (mdc == null || mdc.actionPoints > 0)
            {
                mdc.actionPoints -= 50;
                CanCarryComponent ccc = (CanCarryComponent)thrower.GetComponent(nameof(CanCarryComponent));
                if (ccc.CurrentItem != null)
                {
                    PositionComponent pos = (PositionComponent)ccc.CurrentItem.GetComponent(nameof(PositionComponent));
                    this.mapData.map[pos.x, pos.y].Add(ccc.CurrentItem);

                    this.gameLog.Add($"{ccc.CurrentItem.name} thrown.");

                    ccc.RemoveItem(ccc.CurrentItem);
                }
            }
        }
Ejemplo n.º 10
0
        public static PositionComponent GetPosition(AbstractEntity entity)
        {
            // Check if it is being carried
            CarryableComponent cc = (CarryableComponent)entity.GetComponent(nameof(CarryableComponent));

            if (cc != null)
            {
                if (cc.carrier != null)
                {
                    PositionComponent pos = (PositionComponent)cc.carrier.GetComponent(nameof(PositionComponent));
                    return(pos);
                }
            }

            // Get our own position
            PositionComponent sqpos = (PositionComponent)entity.GetComponent(nameof(PositionComponent));

            return(sqpos);
        }
        public override void ProcessEntity(AbstractEntity entity)
        {
            ShootOnSightComponent sosc = (ShootOnSightComponent)entity.GetComponent(nameof(ShootOnSightComponent));

            if (sosc == null)
            {
                return;
            }

            PositionComponent shooterPos = (PositionComponent)entity.GetComponent(nameof(PositionComponent));
            MobDataComponent  us         = (MobDataComponent)entity.GetComponent(nameof(MobDataComponent));
            AbstractEntity    target     = this.GetTarget(shooterPos.x, shooterPos.y, us.side);

            if (target != null)
            {
                PositionComponent targetPos = (PositionComponent)target.GetComponent(nameof(PositionComponent));
                ShootingSystem    ss        = (ShootingSystem)this.ecs.GetSystem(nameof(ShootingSystem));
                ss.EntityShootingAtEntity(entity, new Point(shooterPos.x, shooterPos.y), target, new Point(targetPos.x, targetPos.y));
            }
        }
        public void DropItem(AbstractEntity unit, AbstractEntity item, List <AbstractEntity> mapSquare)
        {
            MobDataComponent mdc = (MobDataComponent)unit.GetComponent(nameof(MobDataComponent));

            if (mdc == null || mdc.actionPoints > 0)
            {
                mdc.actionPoints -= 20;
                CanCarryComponent  ccc     = (CanCarryComponent)unit.GetComponent(nameof(CanCarryComponent));
                PositionComponent  unitpos = (PositionComponent)item.GetComponent(nameof(PositionComponent));
                PositionComponent  itempos = (PositionComponent)item.GetComponent(nameof(PositionComponent));
                CarryableComponent cc      = (CarryableComponent)item.GetComponent(nameof(CarryableComponent));
                if (ccc.GetItems().Contains(item))
                {
                    ccc.RemoveItem(item);
                    cc.carrier = null;
                    mapSquare.Add(item);
                    itempos.x = unitpos.x;
                    itempos.y = unitpos.y;
                }
            }
        }
Ejemplo n.º 13
0
        protected override List <string> GetStatsFor_Sub(AbstractEntity e)
        {
            var str = new List <string>();

            str.Add($"Stats for {e.name}");
            // todo - stats

            CanCarryComponent ccc = (CanCarryComponent)e.GetComponent(nameof(CanCarryComponent));

            foreach (var item in ccc.GetItems())
            {
                str.Add($"{item.name}");
            }
            return(str);
        }
Ejemplo n.º 14
0
        public override void ProcessEntity(AbstractEntity entity)
        {
            TimerCanBeSetComponent tcbsc = (TimerCanBeSetComponent)entity.GetComponent(nameof(TimerCanBeSetComponent));

            if (tcbsc != null)
            {
                if (tcbsc.activated)
                {
                    tcbsc.timeLeft--;
                    if (tcbsc.timeLeft <= 0)
                    {
                        this.TimeExpired(entity);
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public void Damage(AbstractEntity entity, float damage, string reason)
        {
            HealthComponent hc = (HealthComponent)entity.GetComponent(nameof(HealthComponent));

            if (hc != null)
            {
                hc.health -= damage;
                this.log.Add($"{entity.name} has been wounded {damage}: {reason}");
                if (hc.health <= 0)
                {
                    this.log.Add($"{entity.name} has been killed");
                    entity.markForRemoval = true;

                    // Create corpse
                }
            }
        }
        private bool Move(AbstractEntity entity, MovementDataComponent md, PositionComponent p, Point dest)
        {
            if (this.IsAccessible(dest.X, dest.Y))
            {
                MobDataComponent mdc = (MobDataComponent)entity.GetComponent(nameof(MobDataComponent));
                if (mdc == null || mdc.actionPoints > 0)
                {
                    /*if (entity.name == "Alien") {
                     *  Console.WriteLine($"Moving alien.... {mdc.actionPoints} APs left");
                     * }*/

                    int cost = 50;
                    if (p.x != dest.X && p.y != dest.Y)   // Diagonal
                    {
                        cost = 70;
                    }
                    mdc.actionPoints -= cost;
                    this.map_data.map[p.x, p.y].Remove(entity);

                    p.x = dest.X;
                    p.y = dest.Y;

                    this.map_data.map[p.x, p.y].Add(entity);

                    /*if (entity.name == "Alien") {
                     *  Console.WriteLine($"Moved alien. {mdc.actionPoints} APs left");
                     * }*/

                    CheckMapVisibilitySystem cmvs = (CheckMapVisibilitySystem)this.ecs.GetSystem(nameof(CheckMapVisibilitySystem));
                    cmvs.ReCheckVisibility = true;
                    return(true);
                }
            }
            else
            {
                CloseCombatSystem ccs = (CloseCombatSystem)this.ecs.GetSystem(nameof(CloseCombatSystem));
                if (ccs.Combat(entity, this.map_data.map[dest.X, dest.Y]) == false)
                {
                    // Movement failed
                }
            }
            return(false);
        }
Ejemplo n.º 17
0
        private void DoCombat(AbstractEntity e1, AbstractEntity e2)
        {
            AttackAttackableComponent aa1 = (AttackAttackableComponent)e1.GetComponent(nameof(AttackAttackableComponent));
            AttackAttackableComponent aa2 = (AttackAttackableComponent)e2.GetComponent(nameof(AttackAttackableComponent));

            // Todo - take into account weapons being carried
            int att1 = Misc.random.Next(aa1.combatSkill);
            int att2 = Misc.random.Next(aa2.combatSkill);

            DamageSystem damageSystem = (DamageSystem)this.ecs.GetSystem(nameof(DamageSystem));

            if (att1 > att2)
            {
                damageSystem.Damage(e2, aa1.combatDamage, $"Hit by {e1.name}");
            }
            else
            if (att1 < att2)
            {
                damageSystem.Damage(e1, aa2.combatDamage, $"Hit by {e2.name}");
            }
        }
Ejemplo n.º 18
0
        private void TimeExpired(AbstractEntity entity)
        {
            ExplodesWhenTimerExpiresComponent explodes = (ExplodesWhenTimerExpiresComponent)entity.GetComponent(nameof(ExplodesWhenTimerExpiresComponent));

            if (explodes != null)
            {
            }
        }
Ejemplo n.º 19
0
 public bool FindClosestSpeaker(AbstractEntity argEntity)
 {
     Speaker speaker = argEntity as Speaker;
     AbstractBeing being = argEntity.GetComponent<AbstractBeing>();
     return speaker != null && being != null ? speaker.CanSpeakTo(Speaker) : false;
 }
        public void Explosion(AbstractEntity entity)
        {
            ExplodesWhenTimerExpiresComponent ewtec = (ExplodesWhenTimerExpiresComponent)entity.GetComponent(nameof(ExplodesWhenTimerExpiresComponent));
            PositionComponent pos = ECSHelper.GetPosition(entity);

            foreach (var e in this.entities)
            {
                PositionComponent epos = ECSHelper.GetPosition(e);
                if (epos != null)
                {
                    if (GeometryFunctions.Distance(epos.x, epos.y, pos.x, pos.y) <= ewtec.range)
                    {
                        if (this.checkVis.CanSee(epos.x, epos.y, pos.x, pos.y))
                        {
                            this.damageSystem.Damage(e, ewtec.power, $"Exploding {entity.name}");
                        }
                    }
                }
            }
        }
        public void Process(List <AbstractEffect> effects)
        {
            // Draw map
            MapData map_data = this.viewData.GetMapData();

            if (map_data.map != null)
            {
                this.view.mapConsole.Clear();
                for (int y = 0; y < map_data.getHeight(); y++)
                {
                    for (int x = 0; x < map_data.getWidth(); x++)
                    {
                        var           entities = map_data.map[x, y];
                        var           mapEnt   = entities.Single(ent => ent.GetComponents().ContainsKey(nameof(MapsquareData)));
                        MapsquareData msdc     = (MapsquareData)mapEnt.GetComponent(nameof(MapsquareData));
                        if (msdc.visible || Settings.DEBUG_DRAW_ALL)
                        {
                            // Only draw stuff if mapsquare visible
                            AbstractEntity   sq = map_data.GetComponentToDraw(x, y);
                            GraphicComponent gc = (GraphicComponent)sq.GetComponent(nameof(GraphicComponent));
                            RLCell           tc = gc.getVisibleChar();
                            this.view.mapConsole.Set(x, y, tc);
                            if (sq == this.viewData.GetCurrentUnit())
                            {
                                this.view.mapConsole.SetBackColor(x, y, RLColor.Yellow);
                            }
                        }
                        else if (msdc.seen)
                        {
                            AbstractEntity   sq = map_data.GetComponentToDraw(x, y);
                            GraphicComponent gc = (GraphicComponent)sq.GetComponent(nameof(GraphicComponent));
                            this.view.mapConsole.Set(x, y, gc.getSeenChar());
                        }
                        else
                        {
                            this.view.mapConsole.Set(x, y, this.invisible);
                        }
                    }
                }
            }

            // Draw effects
            foreach (var effect in effects)
            {
                effect.draw(this.view.mapConsole);
            }

            // Draw line
            var line2 = this.viewData.GetLine();

            if (line2 != null)
            {
                foreach (var point in line2)
                {
                    this.view.mapConsole.SetBackColor(point.X, point.Y, RLColor.Gray);
                }
            }

            // Draw hover text
            this.view.mapConsole.Print(1, DefaultRLView._mapHeight - 1, this.viewData.GetHoverText(), RLColor.White);

            // Draw crew
            this.view.crewListConsole.Clear();
            int yPos = 0;

            this.view.crewListConsole.Print(0, yPos, "CREW LIST", RLColor.White);
            yPos++;
            int idx = 1;

            foreach (AbstractEntity e in this.viewData.GetUnits())
            {
                RLColor          c   = RLColor.White;
                MobDataComponent mdc = (MobDataComponent)e.GetComponent(nameof(MobDataComponent));
                if (e == this.viewData.GetCurrentUnit())
                {
                    c = RLColor.Yellow; // Highlight selected unit
                }
                else if (mdc.actionPoints <= 0)
                {
                    c = RLColor.Gray;
                }
                MovementDataComponent move = (MovementDataComponent)e.GetComponent(nameof(MovementDataComponent));
                string routeIndicator      = move.route == null || move.route.Count == 0 ? "" : "(R)";
                this.view.crewListConsole.Print(0, yPos, $"{idx}: {e.name} {routeIndicator} ({mdc.actionPoints} APs)", c);
                yPos++;
                idx++;
            }

            // Draw unit stats or menu selection
            this.view.statConsole.Clear();
            yPos = 0;
            Dictionary <int, AbstractEntity> items = this.viewData.GetItemSelectionList();

            if (items != null && items.Count > 0)
            {
                foreach (var idx2 in items.Keys)
                {
                    this.view.statConsole.Print(0, yPos, $"{idx2} : {items[idx2].name}", RLColor.White);
                    yPos++;
                }
            }
            else
            {
                AbstractEntity currentUnit = this.viewData.GetCurrentUnit();
                if (currentUnit != null)
                {
                    foreach (var s in this.viewData.GetStatsFor(currentUnit))
                    {
                        this.view.statConsole.Print(0, yPos, s, RLColor.White);
                        yPos++;
                    }
                }
            }

            // Draw log
            this.view.logConsole.Clear();
            var log = this.viewData.GetLog();
            int pos = 1;

            foreach (var line in log)
            {
                this.view.logConsole.Print(1, pos++, line, RLColor.White);
            }
        }