public IEnt CreateProgressBar(IEnt ent) { var resultEnt = Engine.Instance.CreateEnt(ent); var backgroundCom = resultEnt.AddCom ( new DrawRectCom() { Priority = DrawLayer.UNITS_INFO_BOTTOM } ); var healthBarForgroundEnt = Engine.Instance.CreateEnt(resultEnt); var forgroundCom = healthBarForgroundEnt.AddCom ( new DrawRectCom() { Priority = DrawLayer.UNITS_INFO_TOP } ); resultEnt.AddCom ( new ProgressBarCom() { Background = backgroundCom, Forground = forgroundCom } ); return(resultEnt); }
public IEnt CreateEnt(IEnt parent, string name, List <string> tags) { _entDirty = true; var result = new Ent(parent, name, tags); parent.AddChild(result); return(result); }
private Stack <IEnt> GetEntsToUpdate(IEnt ent, Stack <IEnt> result) { result.Push(ent); foreach (var child in ent.Children) { GetEntsToUpdate(child, result); } return(result); }
private void BroadcastMessage <S, T>(IEnt ent, S sender, T message) { foreach (var com in ent.Coms) { if (com is IObv <S, T> ) { ((IObv <S, T>)com).OnNotify(sender, message); } } foreach (var child in ent.Children) { BroadcastMessage(child, sender, message); } }
private bool PerformAttack(IEnt target) { var targetUnitCom = target.GetCom <HealthCom>(); var attackerUnitCom = _unitInfoCom; var damageVariation = attackerUnitCom.DamageAmount * GameConstants.UNIT_DAMAGE_VARIATION; var damageModifer = Utility.RandomDouble(-(damageVariation), damageVariation); var result = targetUnitCom.CurrentHealth - attackerUnitCom.DamageAmount + damageModifer >= 0; target.GetCom <UnitActionContCom>().OnNotify ( Owner, GameEvent.RECEIVE_DAMAGE ); return(result); }
public void OnNotify(IEnt ent, GameEvent evt) { switch (evt) { case GameEvent.UNIT_SELECTED: Engine.Instance.Sound.PlayRandomSound(_unitInfoCom.SoundInfo.SelectSound); break; case GameEvent.MOVE_TO_CELL: Debug.Assert(!_unitInfoCom.MoveTaken); Debug.Assert(ent.GetCom <CellInfoCom>().Inside.Count() == 0); _unitInfoCom.MoveTaken = true; MoveToEnt(ent); Engine.Instance.Sound.PlayRandomSound(_unitInfoCom.SoundInfo.MoveSound); CheckTurnComplete(); break; case GameEvent.ATTACK_TARGET: Debug.Assert(!_unitInfoCom.AttackTaken); _unitInfoCom.AttackTaken = true; if (PerformAttack(ent)) { Engine.Instance.Sound.PlayRandomSound(_unitInfoCom.SoundInfo.AttackSound); } CheckTurnComplete(); break; case GameEvent.RECEIVE_DAMAGE: Debug.Assert(ent.Tags.Contains(Tags.UNIT)); Owner.GetCom <HealthCom>().ReceiveDamage(ent.GetCom <IDamageInfoCom>()); Engine.Instance.Sound.PlayRandomSound(_unitInfoCom.SoundInfo.DamageSound); break; case GameEvent.UNIT_DIED: Engine.Instance.Sound.PlayRandomSound(_unitInfoCom.SoundInfo.DeathSound); Engine.Instance.DestoryEnt(Owner); break; case GameEvent.TURN_START: TurnEnd(); break; } }
public void OnNotify(IEnt ent, GameEvent evt) { switch (evt) { case GameEvent.AI_TAKE_TURN: { _cellInfoCom = Owner.Parent.GetCom <CellInfoCom>(); _gridCom = ent.GetCom <GridCom>(); var action = _decisionTrees[_currentState].GetAction(); action.TakeAction(); _gridCom = null; _closestEnemyCords = null; _cellInfoCom = null; break; } } }
private void MoveToEnt(IEnt target) { Owner.ChangeParent(target); }
public EntFactory(IEnt worldEnt, UnitType unitTypeToCreate, Faction factionToCreate) { this.WorldEnt = worldEnt; this.UnitTypeToCreate = unitTypeToCreate; this.FactionToCreate = factionToCreate; }
public void DestoryEnt(IEnt ent) { _entDirty = true; ent.Destory(); }
public IEnt CreateEnt(IEnt parent, string name = "") { return(CreateEnt(parent, name, new List <string>())); }
public IEnt CreateEnt(IEnt parent, string name, params string[] tags) { return(CreateEnt(parent, name, tags.ToList())); }
public static MLoc Get(IEnt p) { MLoc m = new MLoc(); m.MacPath = String.Empty; m.MacVol = String.Empty; while (p != null) { if (p is MacRoot) break; if (p is MacVol) { MacVol vol = (MacVol)p; vol.OpenIt(); m.VolID = vol.VolID; m.DirID = vol.DirID; m.MacVol = p.RealName; } else { m.MacPath = ((String)(p.RealName + ":" + m.MacPath)).TrimEnd(':'); } p = p.ParentDir; } return m; }
private bool IsEnemy(IEnt other) { return(other.Tags.Contains(Tags.UNIT) && other.GetCom <UnitInfoCom>().Faction != _unitInfoCom.Faction); }