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);
        }
Example #3
0
    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 ();
        }
    }