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; } }
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))); }