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); } }
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; } }
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); } } }
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; } } }
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); }
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); } } } }
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); }
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}"); } }
private void TimeExpired(AbstractEntity entity) { ExplodesWhenTimerExpiresComponent explodes = (ExplodesWhenTimerExpiresComponent)entity.GetComponent(nameof(ExplodesWhenTimerExpiresComponent)); if (explodes != null) { } }
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); } }