protected override void OnPressing(Vector3 pos) { base.OnPressing (pos); if (Time.time - m_LastPressingTime < PRESSING_DELAY) { return; } m_LastPressingTime = Time.time; if (null == m_PlayerPawn) { Debug.LogError ("[PlayerMovementInputController] player pawn is not set."); return; } Ray ray = m_MainCamera.ScreenPointToRay (pos); RaycastHit hit; if (Physics.Raycast (ray, out hit)) { TAG tag = hit.collider.GetComponent<TAG> (); if (null == tag) { // Collider has no tag Debug.LogError ("[PlayerMovementInputController] Collider has no tag. \n" + "Since I want to use collider only as input test, collider without tag make no sense."); return; } if (tag.HasTag (TAG.TAG_TYPES.WALKABLE)) { MoveActionModel model = new MoveActionModel (); model.OwnerPawn = m_PlayerPawn; model.TargetPosition = hit.point; model.IsHostileToTarget = true; m_PlayerPawn.AddAction (model, true); } else if (tag.HasTag (TAG.TAG_TYPES.ATTACKABLE)) { AttackActionModel model = new AttackActionModel (); model.OwnerPawn = m_PlayerPawn; model.TargetObject = hit.collider.gameObject; m_PlayerPawn.AddAction (model, true); } } }
public async Task <PathModel> GetPathByKey(pathKey key) { string userId = User.Claims.First(c => c.Type == "UserID").Value; var user = await _userManager.FindByIdAsync(userId); TrajetDB trajet = _paths.FirstOrDefault(o => o.Key == key.Key); PathModel pathToSend = new PathModel() { Name = trajet.Name, Type = trajet.Type, GroupLevelMax = trajet.GroupLevelMax, GroupLevelMin = trajet.GroupLevelMin, CaptureItem = trajet.CaptureItem, MaxPod = trajet.MaxPod, MonsterQuantityMin = trajet.MonsterQuantityMin, MonsterQuantityMax = trajet.MonsterQuantityMax, ListRessource = trajet.ListRessource, LeaderBank = trajet.LeaderBank, IsCapture = trajet.IsCapture, Key = trajet.Key.ToString() }; pathToSend.PathAction = new List <PathActionModel>(); foreach (var item in trajet.PathAction) { PathActionModel pathactionmodelToAdd = new PathActionModel(); pathactionmodelToAdd.MapPos = Database.Maps.Find(o => o.Key == item.MapId).First().Coordinate.Replace(',', ';').Replace("[", "").Replace("]", ""); pathactionmodelToAdd.Actions = new List <MapActionModel>(); foreach (var action in item.Actions) { MapActionModel mapaction = new MapActionModel() { Order = action.Order }; if (action is FightAction) { FightActionModel fight = new FightActionModel() { IsAlone = ((FightAction)action).IsAlone }; mapaction.FightAction = fight; } else if (action is BankAction) { BankActionModel bank = new BankActionModel() { MapId = item.MapId }; mapaction.BankAction = bank; } else if (action is GatherAction) { GatherActionModel gather = new GatherActionModel() { }; mapaction.GatherAction = gather; } else if (action is InteractionAction) { InteractionActionModel interaction = new InteractionActionModel() { InteractiveidObject = ((InteractionAction)action).InteractiveIdObject, InteractiveIdResponse = ((InteractionAction)action).InteractiveIdResponse, ToBackBank = ((InteractionAction)action).ToBackBank, ToGoBank = ((InteractionAction)action).ToGoBank }; mapaction.InteractionAction = interaction; } else if (action is MoveAction) { MoveActionModel move = null; if (((MoveAction)action).Direction != null) { move = new MoveActionModel() { Cellid = ((MoveAction)action).CellId, ToGoBank = ((MoveAction)action).ToGoBank, ToBackBank = ((MoveAction)action).ToBackBank, Direction = ((MoveAction)action).Direction.ConvertAll(o => o.ToString()), MapId = ((MoveAction)action).MapId }; } else { move = new MoveActionModel() { Cellid = ((MoveAction)action).CellId, ToGoBank = ((MoveAction)action).ToGoBank, ToBackBank = ((MoveAction)action).ToBackBank, Direction = null, MapId = ((MoveAction)action).MapId }; } mapaction.moveAction = move; } else if (action is UseItemAction) { UseItemActionModel useitem = new UseItemActionModel() { ToBackBank = ((UseItemAction)action).ToBackBank, ItemId = ((UseItemAction)action).ItemId, ToGoBank = ((UseItemAction)action).ToGoBank }; mapaction.UseItemAction = useitem; } else if (action is ZaapAction) { ZaapActionModel zaap = new ZaapActionModel() { ToGoBank = ((ZaapAction)action).ToGoBank, ToBackBank = ((ZaapAction)action).ToBackBank, Destination = Database.Maps.Find(o => o.Key == ((ZaapAction)action).Destination).First().Coordinate.Replace(',', ';').Replace("[", "").Replace("]", ""), ZaapId = ((ZaapAction)action).ZaapId }; mapaction.ZaapAction = zaap; } else if (action is ZaapiAction) { ZaapiActionModel zaapi = new ZaapiActionModel() { ToGoBank = ((ZaapAction)action).ToGoBank, ToBackBank = ((ZaapAction)action).ToBackBank, Destination = Database.Maps.Find(o => o.Key == ((ZaapAction)action).Destination).First().Coordinate.Replace(',', ';').Replace("[", "").Replace("]", ""), ZaapiId = ((ZaapAction)action).ZaapId }; mapaction.ZaapiAction = zaapi; } pathactionmodelToAdd.Actions.Add(mapaction); } ; pathToSend.PathAction.Add(pathactionmodelToAdd); } ; return(pathToSend); }
protected override void OnAction() { Vector3 delta = OwnerPawn.transform.position - TargetObject.transform.position; /// gather NavMeshAgent radius of owner pawn and target object float radRange = OwnerPawn.MoveAgentRefer.radius; if (TargetObject.GetComponent<NavMeshAgent> () != null) { radRange += TargetObject.GetComponent<NavMeshAgent> ().radius; } float sum = OwnerPawn.Data.AttackData.AttackRange + radRange + PawnDataModel.ATTACK_TO_MOVE_ALLOW_GAP; if (delta.magnitude < sum) // if target is in attack range, { // target inside attack range Debug.Log ("Do Damage to target: " + TargetObject.name + ", damage: " + OwnerPawn.Data.AttackData.AttackDamage); /// owner pawn plays attack animation OwnerPawn.AnimatorRefer.Play (ANIM_STATE_KEY_ATTACK, -1, 0.0F); OwnerPawn.transform.LookAt (TargetObject.transform); /// Display get hit if target object has pawn and animator comp Pawn targetPawn = TargetObject.GetComponent<Pawn> (); Animator targetAnimator = TargetObject.GetComponentInChildren<Animator> (); if (null != targetPawn && targetPawn.IsIdle && null != targetAnimator) { targetAnimator.Play (ANIM_STATE_KEY_GETHIT, -1, 0.0F); } /// Dispatch event OwnerPawn.OnAttack (); if (null != targetPawn) { targetPawn.OnGetHit (); } /// Determine attack speed. will block movement of owner pawn. OwnerPawn.StartCoroutine (WaitForAttackDelay ()); } else // if target outside attack range, { MoveActionModel moveModel = new MoveActionModel (); moveModel.OwnerPawn = OwnerPawn; moveModel.TargetObject = TargetObject; moveModel.IsHostileToTarget = true; OwnerPawn.AddAction (moveModel, true); AttackActionModel attackModel = new AttackActionModel (); attackModel.OwnerPawn = OwnerPawn; attackModel.TargetObject = TargetObject; OwnerPawn.AddAction (attackModel, false); NextFlow (); } }