// Use this for initialization
		void Start () {
			behavior = gameObject.FindBehavior () as CharacterBehavior;
			motor = behavior.motor as CharacterMotor;
			inventory = behavior.inventory;
			// ---
			lastAttackTime = Mathf.NegativeInfinity;
			action = new AttackAction();
			action.actionEnd = DoDamage;
		}
Exemple #2
0
        public void TestAttackAction()
        {
            ActionFactory factory = new ActionFactory();

            factory.IsDraft = false;

            AttackAction action = factory.CreateGameAction("ATTACK 0 1") as AttackAction;

            Assert.IsNotNull(action);
            Assert.IsInstanceOfType(action, typeof(AttackAction));
        }
    public void AttackStyle1()
    {
        AttackAction attackAction = new AttackAction();

        attackAction.actor       = hero;
        attackAction.style       = 1;
        attackAction.isMoving    = false;
        attackAction.onHitAction = GetTargetHitDamageAction();

        actionManager.RunAction(attackAction);
    }
    void ApplyCounterAttackDamage(AttackAction action)
    {
        var attacker = action.target as ICombatant;
        var target   = action.attacker as IDestructable;

        if (attacker != null && target != null)
        {
            var damageAction = new DamageAction(target, attacker.attack);
            container.AddReaction(damageAction);
        }
    }
Exemple #5
0
        public Weakling(string name) : base(name)
        {
            ActionList.Add("null1", NullAction.GetActionBuilder());
            ActionList.Add("null2", NullAction.GetActionBuilder());
            ActionList.Add("attack", AttackAction.GetActionBuilder());
            ItemBuilderFactory factory = ItemBuilderFactory.GetInstance();

            LootTable.Add(new LootTableElement(999, factory.GetBuilder("rusty-spoon")));
            LootTable.Add(new LootTableElement(999, factory.GetBuilder("loincloth")));
            LootTable.Add(new LootTableElement(100, factory.GetBuilder("healing-potion")));
        }
Exemple #6
0
        private int CalculateDamage(AttackAction attacker, Entity defender, int damageModifier)
        {
            int defenderDefense = defender != null ? defender.Defense : 0;
            int baseDamage      = (attacker.attack - defenderDefense) * damageModifier;

            foreach (AttackModifier modifier in modifiers)
            {
                baseDamage = modifier.CalculateDamageModifier(attackingEntity, defendingEntity, baseDamage);
            }
            return(baseDamage);
        }
Exemple #7
0
 private void ApplyStagger(AttackAction attack, UnitBasicProperties attacker)
 {
     if (attacker.side == UnitSide.Player)
     {
         attack.StaminaCost += attacker.isStaggered ? 1 : 0;
     }
     else if (attacker.side == UnitSide.Hollow)
     {
         attack.FlatModifier = attack.FlatModifier - (attacker.isStaggered ? 1 : 0);
     }
 }
        public SpawnAttackAnimation(int id, int x, int y, int dir, bool auto, AttackAction atk)
        {
            ID = id;
            X = x;
            Y = y;
            Dir = dir;

            CurrentFrame = 0;
            NextFrame = 0;
            Attack = atk;
        }
Exemple #9
0
        private void RunInvalidAttackPlayerTest(int sourceId)
        {
            int target = -1;

            AttackAction action = new AttackAction(sourceId, target);
            bool         result = action.Execute(player1, player2);

            Assert.IsTrue(result);
            Assert.AreEqual(DEFAULT_MY_HEALTH, player1.Data.Health);
            Assert.AreEqual(DEFAULT_OPP_HEALTH, player2.Data.Health);
        }
Exemple #10
0
        private static AttackAction ParseAttackAction(MapController mapController, Dictionary <string, string> fields)
        {
            AttackAction attackAction = ParseAction <AttackAction>(mapController, fields);

            attackAction.attack   = Int32.Parse(fields[nameof(AttackAction) + "." + nameof(AttackAction.attack)]);
            attackAction.accuracy = Int32.Parse(fields[nameof(AttackAction) + "." + nameof(AttackAction.accuracy)]);
            attackAction.speed    = Int32.Parse(fields[nameof(AttackAction) + "." + nameof(AttackAction.speed)]);
            attackAction.skill    = Int32.Parse(fields[nameof(AttackAction) + "." + nameof(AttackAction.skill)]);
            attackAction.range    = Int32.Parse(fields[nameof(AttackAction) + "." + nameof(AttackAction.range)]);

            return(attackAction);
        }
Exemple #11
0
        public void GivenOpponentHasStealthMinion_WhenGetAllAttackActionsInvoked_ThenStealthMinionCannotBeAttacked()
        {
            var aChar        = new Minion(1, 1);
            var bStealthChar = new Minion(1, 1, Status.Stealth);
            var bFace        = Face.Empty;
            var gameState    = new GameState(
                PlayerGameState.Empty.With(_player, minions: x => ImmutableList.Create(aChar)),
                PlayerGameState.Empty.With(face: x => bFace, minions: x => ImmutableList.Create(bStealthChar)));
            var expectedAction = new AttackAction(_player, aChar, bFace);

            CollectionAssert.AreEquivalent(expectedAction.Yield(), _testee.GetAllAttackActions(gameState, _player));
        }
Exemple #12
0
        public void GivenOpponentHasTauntMinion_WhenGetAllAttackActionsInvoked_ThenOnlyTauntMinionCanBeAttacked()
        {
            var aChar      = new Minion(1, 1);
            var bChar      = new Minion(1, 1);
            var bTauntChar = new Minion(1, 1, Status.Taunt);
            var gameState  = GameState.Empty.With(
                PlayerGameState.Empty.With(_player, minions: x => ImmutableList.Create(aChar)),
                PlayerGameState.Empty.With(Player.Empty, minions: x => ImmutableList.Create(bTauntChar, bChar)));
            var expectedAction = new AttackAction(_player, aChar, bTauntChar);

            CollectionAssert.AreEquivalent(expectedAction.Yield(), _testee.GetAllAttackActions(gameState, _player));
        }
Exemple #13
0
        public void GivenPlayerHasZeroAttackMinion_WhenGetAllAttackActionsInvoked_ThenZeroAttackMinionCannotAttack()
        {
            var aChar           = new Minion(1, 1);
            var aZeroAttackChar = new Minion(0, 1);
            var bFace           = Face.Empty;
            var gameState       = new GameState(
                PlayerGameState.Empty.With(_player, minions: x => ImmutableList.Create(aChar, aZeroAttackChar)),
                PlayerGameState.Empty.With(face: x => bFace));
            var expectedAction = new AttackAction(_player, aChar, bFace);

            CollectionAssert.AreEquivalent(expectedAction.Yield(), _testee.GetAllAttackActions(gameState, _player));
        }
Exemple #14
0
        public void AttackActionTest()
        {
            var map      = new SmallMap().BuildMap();
            var attacker = new CentaurWarrior(Position.ZERO);
            var defender = new CerberusWarrior(new Position(1, 1));

            AttackAction action = new AttackAction(map, attacker, defender);

            Assert.AreEqual(action.Attacker, attacker);
            Assert.AreEqual(action.Defender, defender);
            Assert.AreEqual(action.InitialAttackerPosition, Position.ZERO);
        }
    public void AttackStyle0()
    {
        AttackAction attackAction = new AttackAction();

        attackAction.actor         = hero;
        attackAction.style         = 0;
        attackAction.isMoving      = true;
        attackAction.targetPostion = target.transform.position + new Vector3(1, 0, -2);
        attackAction.onHitAction   = GetTargetHitDamageAction();

        actionManager.RunAction(attackAction);
    }
Exemple #16
0
    public bool ActionTryFireSkill(int skillID)
    {
        if (skillID == 0)
        {     //自动查找技能
            if (Owner.ActionControl.IsActionRunning(AttackAction.SGetActionType()))
            { //正在攻击,暂时返回
                return(false);
            }
        }
        int   skillIDForTarget = 0;
        Actor skillTarget      = null;

        if (!LookupSkill(skillID, out skillIDForTarget, out skillTarget))
        {
            //Debug.LogWarning("LookupSkill failed! id is " + skillIDForTarget.ToString() + " self id is "+Owner.ID.ToString());
            return(false);
        }
        Actor.ActorSkillInfo info = Owner.SkillBag.Find(item => item.SkillTableInfo.ID == skillIDForTarget);
        if (info == null)
        {
            Debug.LogWarning("skill id is not exist! id is " + skillIDForTarget.ToString() + " self id is " + Owner.ID.ToString());
            return(false);
        }
        if (skillID == 0 && Owner.ActionControl.IsActionRunning(ActorAction.ENType.enAttackAction))
        {//攻击中并且不是技能命令, 不释放
            return(false);
        }
        if (skillTarget == null)
        {//无目标技能
            //释放技能
            return(ActionTryAttack(skillIDForTarget, skillTarget));
        }
        else
        {
            Vector3 distance = Owner.RealPos - skillTarget.RealPos;
            distance.y = 0;
            if (distance.magnitude > info.SkillTableInfo.AttackDistance)
            {//不在攻击范围内
                //向技能目标移动
                ActionMoveTo(skillTarget.RealPos);
            }
            else
            {//在攻击范围内
                //释放技能
                if (ActionTryAttack(skillIDForTarget, skillTarget))
                {
                    m_curTargetID = skillTarget.ID;
                    return(true);
                }
            }
        }
        return(false);
    }
Exemple #17
0
        public static AttackAction Slash(Actor actor)
        {
            AttackAction action = new AttackAction(actor);

            action.TimeMultiplier = 0.3;
            action.AttackSpeed    = (int)(actor.Initiative * (action.TimeMultiplier / 2));
            action.AttackPattern  = AttackPatterns.Horizontal3();
            action.Actor          = actor;
            action.Name           = "Slash";
            action.Tags.Add(ActionTag.Melee);
            action.Damage = actor.Strength * 2;
            return(action);
        }
        private void CommandUnitsTurrets()
        {
            foreach (var turretUnit in Around.MyUnitsTurrets)
            {
                var nearestEnemy = Around.GetNearestEntity(turretUnit.Position, PlayerType.Enemy);

                var attackAction = new AttackAction(nearestEnemy.Id, null);

                var action = new EntityAction(null, null, attackAction, null);

                actions.Add(turretUnit.Id, action);
            }
        }
Exemple #19
0
        public void GivenPlayerHasFrozenMinion_WhenGetAllAttackActionsInvoked_ThenFrozenMinionCannotAttack()
        {
            var player      = new Player();
            var aChar       = new Minion(1, 1);
            var aFrozenChar = new Minion(1, 1, Status.Frozen);
            var bFace       = Face.Empty;
            var gameState   = GameState.Empty.With(
                PlayerGameState.Empty.With(player, minions: x => ImmutableList.Create(aChar, aFrozenChar)),
                PlayerGameState.Empty.With(face: x => bFace));
            var expectedAction = new AttackAction(player, aChar, bFace);

            CollectionAssert.AreEquivalent(expectedAction.Yield(), _testee.GetAllAttackActions(gameState, player));
        }
    // [Test]
    // public void Die()
    // {
    //  Debug.Log("###### TEST 2 ######");
    // }



    #region Action

    public AttackAction CreateAttackAction(BattleModel actor, BattleModel target,
                                           short style, bool isMoving, AnimeAction onHitAction)
    {
        AttackAction attackAction = new AttackAction();

        attackAction.actor         = actor;
        attackAction.style         = style;
        attackAction.isMoving      = isMoving;
        attackAction.targetPostion = target.GetHitPosition() + new Vector3(0, 0, -5);
        attackAction.onHitAction   = onHitAction;

        return(attackAction);
    }
        public override void Enter()
        {
            owner.gameStateMachine.ChangeState <PlayerIdleState>();

            if (owner.attacker != null && owner.defender != null)
            {
                var action = new AttackAction(owner.attacker, owner.defender);
                owner.gameContainer.Perform(action);
            }

            owner.attacker = owner.attacker = null;
            owner.stateMachine.ChangeState <WaitingForInputState>();
        }
Exemple #22
0
    public void AttackBtnClick()
    {
        if (battle_main_.UserList[0].State != BattlerBase.ActionState.Ready)
        {
            return;
        }

        AttackAction action = new AttackAction();

        action.Entity = battle_main_.UserList[0];
        action.Target = battle_main_.EnemyList[0];
        battle_main_.AddAction(action);
    }
Exemple #23
0
        public static BaseAction Bite(Actor actor)
        {
            AttackAction action = new AttackAction(actor);

            action.TimeMultiplier = 0.2;
            action.AttackSpeed    = (int)(actor.Initiative * (action.TimeMultiplier / 2));
            action.AttackPattern  = AttackPatterns.Basic();
            action.Actor          = actor;
            action.Name           = "Bite";
            action.Tags.Add(ActionTag.Melee);
            action.Damage = actor.Strength;
            return(action);
        }
        private void CommandUnitsWorkers()
        {
            foreach (var builderUnit in Around.MyUnitsWorkers) // All goes get spice milange because SPICE MUST FLOW
            {
                var nearestNotBusySpice = Around.GetNearestNotBusySpice(builderUnit.Position);

                var moveAction   = new MoveAction(nearestNotBusySpice.Position, true, false);
                var attackAction = new AttackAction(nearestNotBusySpice.Id, null);

                var action = new EntityAction(moveAction, null, attackAction, null);

                actions.Add(builderUnit.Id, action);
            }

            if (Around.RepairNeeds)
            {
                foreach (var brokenBuilding in Around.MyBuildingsBroken)
                {
                    var nearestBuilder = Around.GetNearestWorker(brokenBuilding.Position);
                    actions.Remove(nearestBuilder.Id);

                    var moveAction   = new MoveAction(brokenBuilding.Position, true, false);
                    var repairAction = new RepairAction(brokenBuilding.Id);
                    actions.Add(nearestBuilder.Id, new EntityAction(moveAction, null, null, repairAction));

                    // var hasBigDamage = brokenBuilding.Health <= View.EntityProperties.Single(ep => ep.Key == brokenBuilding.EntityType).Value.MaxHealth / 2;
                    // if (hasBigDamage)
                    // {
                    //     var nearestBuilder2 = Around.GetNearestWorker(brokenBuilding.Position);
                    //     actions.Remove(nearestBuilder2.Id);
                    //
                    //     moveAction = new MoveAction(brokenBuilding.Position, true, false);
                    //     repairAction = new RepairAction(brokenBuilding.Id);
                    //     actions.Add(nearestBuilder2.Id, new EntityAction(moveAction, null, null, repairAction));
                    // }
                }
            }

            if (Around.NeedBuildBuildingWorkers)
            {
                SendWorkerToBuild(EntityType.BuilderBase);
            }
            else if (Around.NeedBuildBuildingRanged)
            {
                SendWorkerToBuild(EntityType.RangedBase);
            }
            else if (Around.NeedBuildHouse)
            {
                SendWorkerToBuild(EntityType.House);
            }
        }
Exemple #25
0
        public void DoTest()
        {
            var          map      = new SmallMap().BuildMap();
            var          attacker = new CerberusWarrior(Position.ZERO);
            var          defender = new CentaurWarrior(new Position(1, 1));
            AttackAction action   = new AttackAction(map, attacker, defender);

            action.Do();
            var movePointsLost = 2;

            Assert.AreEqual(action.Loser.HealthPoints, action.Loser.InitialHealthPoints - action.HealthPointsLost);
            Assert.AreEqual(action.MovePointsLost, movePointsLost);
            Assert.AreEqual(attacker.MovePoints, Unit.MAX_MOVE_POINTS - movePointsLost);
        }
Exemple #26
0
    public void Range2()
    {
        // Projectile Action
        SequenceAction sequence         = new SequenceAction();
        AnimeAction    projectileAction = CreateProjectileAction(hero.GetLaunchPosition(), target.transform.position);

        sequence.AddAction(projectileAction);
        sequence.AddAction(CreateTargetHitDamageAction());

        //
        AttackAction attackAction = CreateActorAttackAction(1, false, sequence);

        actionManager.RunAction(attackAction);
    }
Exemple #27
0
        public static Entity ParseEntity(Dictionary <string, string> fields)
        {
            EntityParser entity = ScriptableObject.CreateInstance <EntityParser>();

            entity.name   = fields[nameof(name)];
            entity.m_Type = GetOrCreateEntityType(fields[nameof(name)], fields[nameof(entity.Type.EntityClass)]);

            entity.m_MaxActionPoints = Int32.Parse(fields[nameof(ActionPoints)]);
            entity.m_MaxHp           = Int32.Parse(fields[nameof(Hp)]);
            entity.m_Hp      = entity.m_MaxHp;
            entity.m_Defense = Int32.Parse(fields[nameof(Defense)]);

            entity.m_Cost = ParseCost(fields);
            AssetDatabase.CreateAsset(entity.Cost, "Assets/ScriptableObjects/Costs/Entities/" + entity.name + "Cost.asset");

            MapController mapController = AssetDatabase.LoadAssetAtPath <MapController>("Assets/ScriptableObjects/MapController.asset");

            if (fields.Keys.Any(field => field.Contains(nameof(MoveAction))))
            {
                MoveAction moveAction = ParseMoveAction(mapController, fields);
                AssetDatabase.CreateAsset(moveAction, "Assets/ScriptableObjects/Actions/MoveActions/" + entity.name + "MoveAction.asset");
                entity.AddAction(moveAction);
            }
            if (fields.Keys.Any(field => field.Contains(nameof(AttackAction))))
            {
                AttackAction attackAction = ParseAttackAction(mapController, fields);
                AssetDatabase.CreateAsset(attackAction, "Assets/ScriptableObjects/Actions/AttackActions/" + entity.name + "AttackAction.asset");
                entity.AddAction(attackAction);
            }
            if (fields.Keys.Any(field => field.Contains(nameof(BuildAction))))
            {
                BuildAction buildAction = ParseBuildAction(mapController, fields);
                AssetDatabase.CreateAsset(buildAction, "Assets/ScriptableObjects/Actions/BuildActions/" + entity.name + "BuildAction.asset");
                entity.AddAction(buildAction);
            }
            if (fields.Keys.Any(field => field.Contains(nameof(HarvestAction))))
            {
                HarvestAction harvestAction = ParseHarvestAction(entity, mapController, fields);
                AssetDatabase.CreateAsset(harvestAction, "Assets/ScriptableObjects/Actions/HarvestActions/" + entity.name + "HarvestAction.asset");
                entity.AddAction(harvestAction);
            }
            if (fields.Keys.Any(field => field.Contains(nameof(HealAction))))
            {
                HealAction healAction = ParseHealAction(mapController, fields);
                AssetDatabase.CreateAsset(healAction, "Assets/ScriptableObjects/Actions/HealActions/" + entity.name + "HealAction.asset");
                entity.AddAction(healAction);
            }

            return((Entity)entity);
        }
Exemple #28
0
    private void OnReachPoint(Direction direction)
    {
        AttackAction action = direction == Direction.Left ? leftAttack : rightAttack;

        if (action == AttackAction.None)
        {
            Turn(-facing);
        }
        else
        {
            turnAfterAttack = true;
            Attack((Direction)action);
        }
    }
Exemple #29
0
    public void PopulateContent(PlayerCoordinator coordinator, AttackAction attack, int index)
    {
        m_Attack = attack;

        var button = GetComponent <Button>();
        var text   = GetComponentInChildren <Text>();

        button.onClick.AddListener(() =>
        {
            coordinator.SetCurrentAttackAction(index);
        });

        text.text = attack.AttackName;
    }
    public void AttackAction()
    {
        AttackAction action = new AttackAction();

        action.actor         = hero;
        action.targetPostion = target.transform.position;

        actionManager.RunAction(action);
        // action. = animeClip;
        // action.spawnPosition = new Vector3(0, 0, zOrderVfx);
        // action.repeat = 3;
        // action.destroySelf = false;

        // actionManager.RunAction(action);
    }
Exemple #31
0
        private static Random random = new Random();  // Random number generator to make the dice appear more random

        public CombatTurnBased(LunchHourGames lhg, CombatSystem combatSystem)
        {
            this.lhg          = lhg;
            this.combatSystem = combatSystem;

            this.chooseAction  = new ChooseAction(lhg, combatSystem, this);
            this.moveAction    = new MoveAction(lhg, combatSystem, this);
            this.attackAction  = new AttackAction(lhg, combatSystem, this);
            this.useAction     = new UseAction(lhg, combatSystem, this);
            this.defendAction  = new DefendAction(lhg, combatSystem, this);
            this.endTurnAction = new EndTurnAction(lhg, combatSystem, this);

            currentAction = null;
            nextAction    = null;
        }
Exemple #32
0
    bool Attack()
    {
        var system = container.GetAspect <AttackSystem> ();

        if (system.validAttackers.Count == 0 || system.validTargets.Count == 0)
        {
            return(false);
        }
        var attacker = system.validAttackers.Random();
        var target   = system.validTargets.Random();
        var action   = new AttackAction(attacker, target);

        container.Perform(action);
        return(true);
    }
        public static void HandleDirection(Direction dir)
        {
            var ob = GameData.Data.FocusedObject;

            var target = ob.Environment.GetContents(ob.Location + dir).OfType<LivingObject>().FirstOrDefault();

            GameAction action;

            if (target == null)
            {
                dir = ob.Environment.AdjustMoveDir(ob.Location, dir);
                if (dir == Direction.None)
                    return;
                action = new MoveAction(dir);
            }
            else
                action = new AttackAction(target);

            action.GUID = new ActionGUID(ob.World.PlayerID, 0);
            ob.RequestAction(action);
        }
Exemple #34
0
        public void OnEnter(params object[] optional)
        {
            mBattleStates.Change(States.Tick);

            //
            // Get a decision action for every entity in the action queue
            // The sort it so the quickest actions are the top
            //

            /*List<Entity> entities=null, */
            // FIGURE OUT A WAY TO GET THE BADDIES IN HERE!!!!
            //if (optional.
            //if (entities.Count > 0)
            //mEntities.AddRange(entities);
            //mEntities = params.entities;
            mEntities.Add(new GoatEntity());

            foreach(Entity e in mEntities)
            {
                if(e.IsPlayerControlled)
                {
                    var action = new AttackAction();
                    // TODO PlayerDecide action = new PlayerDecide(e, e.Speed());
                    //mActions.Push(action);
                    mActions.Add(action);
                }
                else
                {
                    var action = new BaaAction();
                    //TODO AIDecide action = new AIDecide(e, e.Speed());
                    //mActions.Push(action);
                    mActions.Add(action);
                }
            }

            mActions = mActions.OrderBy(t => t.TimeRemaining).ToList();
            //Sort(mActions, BattleState.SortByTime);
            // public static bool SortByTime(Action a, Action b) { return a.TimeRemaining > b.TimeRemaining; }
        }
Exemple #35
0
        protected override GameAction PrepareNextActionOverride(out JobStatus progress)
        {
            if (m_target.IsDestructed)
            {
                progress = JobStatus.Done;
                return null;
            }

            if (this.Worker.Location.IsAdjacentTo(m_target.Location, DirectionSet.Planar))
            {
                var action = new AttackAction(m_target);
                progress = JobStatus.Ok;
                return action;
            }
            else
            {
                if (m_pathDirs == null || m_supposedLocation != this.Worker.Location || m_dest != m_target.Location)
                {
                    var res = PreparePath(this.Worker);

                    if (res != JobStatus.Ok)
                    {
                        Debug.Assert(res != JobStatus.Done);
                        progress = res;
                        return null;
                    }
                }

                Direction dir = m_pathDirs.Dequeue();

                if (m_pathDirs.Count == 0)
                    m_pathDirs = null;

                m_supposedLocation += dir;

                var action = new MoveAction(dir);
                progress = JobStatus.Ok;
                return action;
            }
        }
Exemple #36
0
        ActionState ProcessAction(AttackAction action)
        {
            if (this.ActionTicksUsed == 1)
                this.ActionTotalTicks = 1;

            if (this.ActionTicksUsed < this.ActionTotalTicks)
                return ActionState.Ok;

            var attacker = this;
            var target = this.World.FindObject<LivingObject>(action.Target);

            if (target == null)
            {
                SendFailReport(new AttackActionReport(this, null), "target doesn't exist");
                return ActionState.Fail;
            }

            if (!attacker.Location.IsAdjacentTo(target.Location, DirectionSet.Planar))
            {
                SendFailReport(new AttackActionReport(this, target), "target isn't near");
                return ActionState.Fail;
            }

            var roll = this.World.Random.Next(20) + 1;
            bool hit;

            var str = attacker.Strength;
            str = (int)((20.0 / 100) * str);
            var strBonus = (str / 2) - 5;
            if (strBonus < 0)
                strBonus = 0;

            if (roll == 1)
            {
                hit = false;
            }
            else if (roll == 20)
            {
                hit = true;
            }
            else
            {
                var dex = target.Dexterity;
                dex = (int)((20.0 / 100) * dex);
                var dexBonus = (dex / 2) - 5;
                if (dexBonus < 0)
                    dexBonus = 0;

                var ac = 10 + target.ArmorClass + dexBonus;

                hit = roll + strBonus >= ac;

                Trace.TraceInformation("{0} attacks {1}: {2} + {3} >= 10 + {4} + {5} == {6} >= {7}",
                    attacker, target,
                    roll, strBonus,
                    target.ArmorClass, dexBonus,
                    roll + strBonus, ac);
            }

            int damage;
            DamageCategory damageCategory;

            if (hit)
            {
                var weapon = attacker.Weapon;
                int dieSides;

                if (weapon == null)
                    dieSides = 3;
                else
                    dieSides = weapon.WeaponInfo.WC;

                damage = this.World.Random.Next(dieSides) + 1 + strBonus;
                damageCategory = DamageCategory.Melee;
                Trace.TraceInformation("{0} hits {1}, {2} damage", attacker, target, damage);
            }
            else
            {
                damage = 0;
                damageCategory = DamageCategory.None;
                Trace.TraceInformation("{0} misses {1}", attacker, target);
            }

            SendReport(new AttackActionReport(this, target) { IsHit = hit, Damage = damage, DamageCategory = damageCategory });

            if (hit)
                target.ReceiveDamage(attacker, damageCategory, damage);

            return ActionState.Done;
        }
 internal void AttackOtherPlayers(GameState gameState, AttackAction action)
 {
     Card currentAttackCard = gameState.cardContextStack.CurrentCard;
     foreach (PlayerState otherPlayer in gameState.players.OtherPlayers)
     {
         gameState.cardContextStack.PushCardContext(otherPlayer, currentAttackCard, CardContextReason.CardAttacking);
         if (otherPlayer.IsAffectedByAttacks(gameState))
         {
             action(gameState.players.CurrentPlayer, otherPlayer, gameState);
         }
         gameState.cardContextStack.Pop();
     }
 }
 /// <summary>
 /// Начинает бой между Unit'ами
 /// </summary>
 /// <param name="enemy">Юнит, с которым будет начато сражение</param>
 public void Attack(Unit enemy)
 {
     var attack_action = new AttackAction(commandUnit, enemy);
     if (enemy.CurrentAction != null) enemy.CurrentAction = null;
     GameEngine.Game.SendOrder(commandUnit, attack_action);
 }
Exemple #39
0
 internal void AttackOtherPlayers(GameState gameState, AttackAction action)
 {
     foreach (PlayerState otherPlayer in gameState.players.OtherPlayers)
     {
         if (otherPlayer.IsAffectedByAttacks(gameState))
         {
             action(gameState.players.CurrentPlayer, otherPlayer, gameState);
         }
     }
 }
Exemple #40
0
        bool HandleKeyDownLiving(KeyEventArgs e)
        {
            var ob = App.MainWindow.FocusedObject;

            if (ob == null)
                return false;

            var dir = KeyToDir(e.Key);

            if (dir != Direction.None)
            {
                var target = ob.Environment.GetContents(ob.Location + dir).OfType<LivingObject>().FirstOrDefault();

                if (target == null)
                {
                    var action = new MoveAction(dir);
                    action.MagicNumber = 1;
                    ob.RequestAction(action);
                }
                else
                {
                    var action = new AttackAction(target);
                    action.MagicNumber = 1;
                    ob.RequestAction(action);
                }

                return true;
            }

            switch (e.Key)
            {
                case Key.OemPeriod:
                    if (GameData.Data.User != null)
                        GameData.Data.User.SendProceedTurn();
                    return true;

                case Key.Add:
                    m_mapControl.ZoomIn();
                    return true;

                case Key.Subtract:
                    m_mapControl.ZoomOut();
                    return true;

                case Key.PageDown:
                    m_mapControl.Z--;
                    return true;

                case Key.PageUp:
                    m_mapControl.Z++;
                    return true;

                default:
                    return false;
            }
        }
Exemple #41
0
    void Randomiser()
    {
        // List of functions
        var attacks = new AttackAction[] {
            Krucifix, Krucifix, Krucifix, Nuns, Nuns, LaunchFire, LaunchFire, LaunchFire
        };

        // Take random function from the array
        int index = Random.Range(0, attacks.Length);
        var attack = attacks[index];
        // Call it
        attack();
    }
 void SetWeapon(AbstractWeapon weap)
 {
     //maybe cache these? idk. doesn't seem like too much overhead at the moment.
     this.action = new AttackAction(weap);
 }