Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        public IEnt CreateEnt(IEnt parent, string name, List <string> tags)
        {
            _entDirty = true;
            var result = new Ent(parent, name, tags);

            parent.AddChild(result);
            return(result);
        }
Esempio n. 3
0
        private Stack <IEnt> GetEntsToUpdate(IEnt ent, Stack <IEnt> result)
        {
            result.Push(ent);

            foreach (var child in ent.Children)
            {
                GetEntsToUpdate(child, result);
            }

            return(result);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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;
            }
        }
Esempio n. 7
0
        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;
            }
            }
        }
Esempio n. 8
0
 private void MoveToEnt(IEnt target)
 {
     Owner.ChangeParent(target);
 }
Esempio n. 9
0
 public EntFactory(IEnt worldEnt, UnitType unitTypeToCreate, Faction factionToCreate)
 {
     this.WorldEnt         = worldEnt;
     this.UnitTypeToCreate = unitTypeToCreate;
     this.FactionToCreate  = factionToCreate;
 }
Esempio n. 10
0
 public void DestoryEnt(IEnt ent)
 {
     _entDirty = true;
     ent.Destory();
 }
Esempio n. 11
0
 public IEnt CreateEnt(IEnt parent, string name = "")
 {
     return(CreateEnt(parent, name, new List <string>()));
 }
Esempio n. 12
0
 public IEnt CreateEnt(IEnt parent, string name, params string[] tags)
 {
     return(CreateEnt(parent, name, tags.ToList()));
 }
Esempio n. 13
0
            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;
            }
Esempio n. 14
0
 private bool IsEnemy(IEnt other)
 {
     return(other.Tags.Contains(Tags.UNIT) && other.GetCom <UnitInfoCom>().Faction != _unitInfoCom.Faction);
 }