public void ResolveAction(Dictionary <ActionArgs, string> attackArgs) { //start location var hexPointTargetCord = HexPoint.StringToHexPoint(attackArgs[ActionArgs.TargetHexCord]); //get effected hexes //also an enum? List <HexPoint> effectedHexes = new List <HexPoint>(); #region lineattacks hexpoints if (attackArgs[ActionArgs.EffectShape] == "line") { //check relative rotation, Q/R switched because we are getting it backwards...yeah var offsetDir = new Vector2(hexPointTargetCord.R - Location.R, hexPointTargetCord.Q - Location.Q); //simplify it down if hex more than one away if (Math.Abs(offsetDir.X) > 1) { offsetDir.X = offsetDir.X / Math.Abs((offsetDir.X)); } if (Math.Abs(offsetDir.Y) > 1) { offsetDir.Y = offsetDir.Y / Math.Abs((offsetDir.Y)); } //we should have the direction now //probs dont need this i already have the vector //var relativeRotation = // RotationVector.FirstOrDefault(k => k.Value.X == offsetDir.X && k.Value.Y == offsetDir.Y); var rangeEnd = offsetDir * Convert.ToInt32(attackArgs[ActionArgs.EffectRange]); rangeEnd.X += Location.R; rangeEnd.Y += Location.Q; //first one is self effectedHexes = HexGrid.HexGrid.LineBetweenTwoPoints(Location, new HexPoint((int)rangeEnd.X, (int)rangeEnd.Y)); effectedHexes.RemoveAt(0); ; } ; #endregion effectedHexes.ForEach(h => { var effectedActor = ActorHexGrid.ActorStorage.FirstOrDefault(a => a.Location.Equals(h)); if (effectedActor != null) { //apply effects, including if defended against effectedActor.DamageTaken += Convert.ToInt32(attackArgs[ActionArgs.BaseDamage]); if (effectedActor.DamageTaken >= effectedActor.HP) { BasicActor.Die(effectedActor); } } else { //effect? } }); ; //var actionTarget = ActorHexGrid.ActorStorage.FirstOrDefault(a => a.Location.Equals(hexPointTargetCord)); }
public void DoAttack(Dictionary <ActionArgs, string> attackArgs) { // //do validitiy check, if invalid just exit var targetable = CanSee(Int32.Parse(attackArgs[ActionArgs.EffectRange])); if (!targetable.Any(h => h.Equals(HexPoint.StringToHexPoint(attackArgs[ActionArgs.TargetHexCord]))) || !CanSee().Any(h => h.Equals(HexPoint.StringToHexPoint(attackArgs[ActionArgs.TargetHexCord])))) { return; } // //attackArgs[ActionArgs.TargetHexCord] = hexPoint.ToString(); if (Convert.ToBoolean(attackArgs[ActionArgs.Instant]) == false && false)//testing { QueuedActions.Add(attackArgs); } else { ResolveAction(attackArgs); } UseAp(APUseType.Attack); }