private void Init()
        {
            this.weapon     = owner.Mine as MineLauncher;
            this.lastLevel  = weapon.UpgradeLevel;
            this.rand       = owner.SceneMgr.GetRandomGenerator();
            this.targeting  = false;
            this.shooting   = false;
            this.steps      = 0;
            this.mine       = 0;
            this.shootingCd = 0;

            weapon.AddClickListener(this);
            owner.SceneMgr.AddMoveListener(this);

            nextTarget   = new Point();
            nextTarget.Y = 1;
            nextTarget.X = FastMath.LinearInterpolate(minWidth, maxWidth, rand.NextDouble());

            if (owner.GetPosition() == PlayerPosition.RIGHT)
            {
                minWidth = 0;
                maxWidth = SharedDef.VIEW_PORT_SIZE.Width * SharedDef.MINE_ACTIVE_RADIUS;
            }
            else
            {
                minWidth = SharedDef.VIEW_PORT_SIZE.Width - (SharedDef.VIEW_PORT_SIZE.Width * SharedDef.MINE_ACTIVE_RADIUS);
                maxWidth = SharedDef.VIEW_PORT_SIZE.Width;
            }
        }
Esempio n. 2
0
 public void CreateWeapons()
 {
     Hook       = new HookLauncher(SceneMgr, this);
     Mine       = new MineLauncher(SceneMgr, this);
     Cannon     = new ProximityCannon(SceneMgr, this);
     HealingKit = new HealingKit(SceneMgr, this);
 }
        public void Update(float tpf)
        {
            if (!Enable)
            {
                return;
            }

            if (lastLevel != owner.Mine.UpgradeLevel)
            {
                weapon    = owner.Mine as MineLauncher;
                lastLevel = weapon.UpgradeLevel;
                weapon.AddClickListener(this);
            }

            if (shooting)
            {
                proccesShooting(tpf);
                return;
            }

            if (InnerCD > 0)
            {
                InnerCD          -= tpf;
                weapon.ReloadTime = weapon.Owner.Data.MineCooldown;
                owner.SceneMgr.BeginInvoke(new Action(() => cooldownVisualiser.SetPercentage(1 - (InnerCD / SharedDef.MINE_VOLLEY_CD))));
                if (InnerCD <= 0)
                {
                    owner.SceneMgr.BeginInvoke(new Action(() =>
                    {
                        launchArea.SetPosition(nextTarget);
                        launchArea.Visibility = Visibility.Visible;
                    }));
                }

                return;
            }

            if (owner.Mine != weapon)
            {
                weapon = owner.Mine as MineLauncher;
            }

            if (weapon.IsReady())
            {
                weapon.Shoot(nextTarget);

                nextTarget.X = FastMath.LinearInterpolate(minWidth, maxWidth, rand.NextDouble());
                owner.SceneMgr.BeginInvoke(new Action(() => launchArea.SetPosition(nextTarget)));
            }
            else
            {
                float percentage = 1 - (weapon.ReloadTime / weapon.Owner.Data.MineCooldown);
                owner.SceneMgr.BeginInvoke(new Action(() => launchArea.SetPercentage(percentage)));
            }

            owner.SceneMgr.BeginInvoke(new Action(() => cooldownVisualiser.Update(tpf)));
        }