示例#1
0
    public void Initialize(IHero owner, Vector2 position)
    {
        this.Owner = owner;
        this.transform.position = position;

        this.SetState(MinionState.Idle);
        this.attackState = MinionAttackState.None;
        this.stats.health.Initialize();
        this.healthBar.Initialize(this);
        this.buffs.Enabled = true;
    }
示例#2
0
        public Minion(Dictionary <int, Vector2> relayPoints, Vector2 position, float rotation, float radius, Team team, Entity root) : base(position, rotation, radius, UnitType.Minion, team, 0, root)
        {
            AddInheritedType(typeof(Minion));

            this.relayPoints = relayPoints;

            attackRadius = GetYAMLObject().GetData <float>("AttackRadius");
            destroyTime  = GetYAMLObject().GetData <float>("DestroyTime");

            state        = MinionAttackState.Start;
            currentPoint = 0;
            deathTimer   = destroyTime;
        }
示例#3
0
    void Update()
    {
        this.state.OnPreUpdate(this);
        this.state.OnUpdate(this);

        if (attackState == MinionAttackState.Cooldown)
        {
            if (attackCooldownTimer.CheckAndTick(Time.deltaTime))
            {
                attackState = MinionAttackState.None;
            }
        }
    }
示例#4
0
        public override void Step(float deltaTime)
        {
            base.Step(deltaTime);

            if (HP <= 0 || !relayPoints.ContainsKey(currentPoint))
            {
                Cancel(CombatAttribute.Move);
                Cancel(CombatAttribute.Attack);
                state = MinionAttackState.Fin;

                if (HP <= 0)
                {
                    deathTimer -= deltaTime;
                    if (deathTimer <= 0)
                    {
                        Destroyed = true;
                    }
                }
            }
            else
            {
                if (state == MinionAttackState.Start && relayPoints.ContainsKey(currentPoint))
                {
                    Execute(CombatAttribute.Move, relayPoints[currentPoint]);
                    state = MinionAttackState.Move;
                }
                else if (state == MinionAttackState.Move)
                {
                    if (Status.AttackedUnitIDs.Count > 0)
                    {
                        Cancel(CombatAttribute.Move);
                        Execute(CombatAttribute.Attack, Status.AttackedUnitIDs[0]);
                        state = MinionAttackState.Attack;
                    }
                    else if (!GetCombat(CombatAttribute.Move).IsExecute)
                    {
                        float distance = (GetChild <Transform>().Position - relayPoints[currentPoint]).Length();
                        if (distance >= 0.1f)
                        {
                            Execute(CombatAttribute.Move, relayPoints[currentPoint]);
                        }
                        else
                        {
                            currentPoint++;
                            if (relayPoints.ContainsKey(currentPoint))
                            {
                                Execute(CombatAttribute.Move, relayPoints[currentPoint]);
                            }
                        }
                    }
                    else
                    {
                        var unitIDs = Root.GetChild <PhysicsEntity>().GetUnit(attackRadius, GetChild <Transform>().Position);
                        foreach (int unitID in unitIDs)
                        {
                            Unit targetUnit = Root.GetChild <WorldEntity>().GetUnit(unitID);
                            if (targetUnit != null &&
                                Team != targetUnit.Team &&
                                targetUnit.Status.GetValue(Team) &&
                                targetUnit.HP > 0 &&
                                !targetUnit.Status.GetValue(BoolStatus.Untargetable))
                            {
                                Execute(CombatAttribute.Attack, targetUnit.UnitID);
                                state = MinionAttackState.Attack;
                                break;
                            }
                        }
                    }
                }
                else if (state == MinionAttackState.Attack)
                {
                    if (!GetCombat(CombatAttribute.Attack).IsExecute)
                    {
                        Cancel(CombatAttribute.Attack);
                        Execute(CombatAttribute.Move, relayPoints[currentPoint]);
                        state = MinionAttackState.Move;
                    }
                }
            }
        }