예제 #1
0
    public static void CheckComplitionWork(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        if (controller != null)
        {
            controller.PlayAnimationWork();
        }

        float timeWait = (dataNPC as ModelNPC.GameDataAlien).TimeEndCurrentAction;

        if (Time.time > timeWait) //time end animation and completed work
        {
            GetAlienData(dataNPC).TimeEndCurrentAction = -1;
            if (dataNPC.Job != null)
            {
                //dataNPC.Job.IsJobRun = false;
                //dataNPC.Job.IsJobCompleted = true;
                //dataNPC.CurrentAction = NameActionsPerson.CompletedLoot.ToString();
                //if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.CompletedLoot.ToString())
                ExecuteActionNPC(dataNPC, NameActionsPerson.CompletedLoot, controller);
            }
            else
            {
                RequestActionNPC(dataNPC, NameActionsPerson.Completed, controller);
            }
        }
    }
예제 #2
0
    //**************************   CHECK   *************************************

    public static void CheckComplitionIdle(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        if (dataNPC == null)
        {
            string strErr = "########## CheckComplitionIdle dataNPC == null ";
            if (controller != null)
            {
                strErr += controller.gameObject.name;
            }
            Debug.Log(strErr);
            return;
        }

        float timeWait = (dataNPC as ModelNPC.GameDataAlien).TimeEndCurrentAction;

        if (Time.time > timeWait)
        {
            GetAlienData(dataNPC).TimeEndCurrentAction = -1;
            RequestActionNPC(dataNPC, NameActionsPerson.Completed, controller);
            //IdleLock
        }

        //FIXANIM
        if (controller != null)
        {
            controller.PlayAnimationIdle();
        }
    }
예제 #3
0
    public static void CheckComplitionIdleLock(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        if (controller == null)
        {
            //TEST
            RequestActionNPC(dataNPC, NameActionsPerson.Completed, controller);
            return;
        }

        float timeWait = (dataNPC as ModelNPC.GameDataAlien).TimeEndCurrentAction;

        //if (Time.time > controller.TimeIdleLock && p_nameAction == NameActionsPerson.Idle)
        if (Time.time > timeWait)
        {
            GetAlienData(dataNPC).TimeEndCurrentAction = -1;
            RequestActionNPC(dataNPC, NameActionsPerson.Completed, controller);
            //IdleLock
        }

        //FIXANIM
        if (controller != null)
        {
            controller.PlayAnimationIdle();
        }
    }
예제 #4
0
    public static void ActionTargetLocal(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        string tempID = dataNPC.TargetID;

        GetAlienData(dataNPC).OnTargetCompleted();

        string id = GetAlienData(dataNPC).BaseLockedTargetID;
        bool   isNotBaseLocked = string.IsNullOrEmpty(id);

        //if (controller != null && string.IsNullOrEmpty(controller.TempLockedTargetID))
        if (controller != null && isNotBaseLocked)
        {
            //Save ID
            //controller.TempLockedTargetID = tempID; // dataNPC.TargetID;
            GetAlienData(dataNPC).BaseLockedTargetID = tempID;
        }

        dataNPC.SetTargetPosition();
        ExecuteActionNPC(dataNPC, NameActionsPerson.Move, controller);

        if (controller != null)
        {
            controller.DrawRayTarget(); //TEST
        }
    }
예제 #5
0
 public static void CheckComplitionLoot(ModelNPC.GameDataAlien dataNPC, GameActionPersonController controller)
 {
     //if (AlienJobsManager.CheckJobAlien(dataNPC) == false)
     if (AlienJobsManager.CheckJobAlien(dataNPC, isCheckDistance: false) == false)
     {
         RequestActionNPC(dataNPC, NameActionsPerson.Target, controller);
     }
 }
예제 #6
0
 public static void EndAction(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
 {
     if (controller != null)
     {
         controller.ActionPerson = NameActionsPerson.Completed;
     }
     dataNPC.CurrentAction = NameActionsPerson.Completed.ToString();
 }
예제 #7
0
    public static bool ActionWork(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        float tilme = GetAlienData(dataNPC).TimeEndCurrentAction;

        if (tilme == -1)
        {
            GetAlienData(dataNPC).TimeEndCurrentAction = Time.time + TimeWork;
        }
        return(false);
    }
예제 #8
0
    public static void ActionTargetBackToBase(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        GetAlienData(dataNPC).OnTargetCompleted();

        if (controller != null)
        {
            //dataNPC.TargetID = controller.TempLockedTargetID;
            GetAlienData(dataNPC).ReturnBaseTarget();
            //GetAlienData(dataNPC).BaseLockedTargetID
            GetAlienData(dataNPC).BaseLockedTargetID = string.Empty;
        }
        RequestActionNPC(dataNPC, NameActionsPerson.Move, controller);

        if (controller != null)
        {
            controller.DrawRayTarget(); //TEST
        }
    }
예제 #9
0
    public static bool CheckJobAlien(ModelNPC.GameDataAlien p_dataNPC, GameActionPersonController controller = null, bool isCheckDistance = true)
    {
        AlienJob job = p_dataNPC.Job;

        if (job == null)
        {
            return(false);
        }

        ReaderScene.DataObjectInfoID targetInfo = ReaderScene.GetInfoID(p_dataNPC.TargetID);
        if (targetInfo == null)
        {
            return(false);
        }

        if (!targetInfo.TestIsValud())
        {
            p_dataNPC.TargetID = null;
            return(false);
        }

        if (isCheckDistance)
        {
            if (!Helper.DistanceIsFinish(targetInfo.Data.Position, p_dataNPC.Position))
            {
                return(true);
            }
        }

        string fieldTarget          = string.Empty;
        string fieldAlien           = string.Empty;
        bool   isExitTargetResource = false;

        Helper.GetNameFieldByPosit(ref fieldTarget, targetInfo.Data.Position);
        ModelNPC.PortalData      portal            = targetInfo.Data as ModelNPC.PortalData;
        SaveLoadData.TypePrefabs jobResourceTarget = job.TargetResource;
        Helper.GetNameFieldByPosit(ref fieldAlien, p_dataNPC.Position);

        if (p_dataNPC.Inventory == null)
        {
            p_dataNPC.Inventory = DataObjectInventory.EmptyInventory();
            //Debug.Log(Storage.EventsUI.ListLogAdd = "## JOB: dataNPC.Inventory is null");
        }
        else
        {
            isExitTargetResource = job.TargetResource.ToString() == p_dataNPC.Inventory.TypeInventoryObject.ToString();
        }

        // --- TO PORTAL
        if (portal != null)
        {
            if (isExitTargetResource)
            {
                //***** Back to HOME **** (trget is Portal)
                //p_dataNPC.InventoryObject is ModelNPC;
                Storage.PortalsManager.AddResourceFromAlien(portal, p_dataNPC);
            }
            // --- TAKE RESOURCE
            bool checkStorageResource = Storage.PortalsManager.CheckStorageResourceForAlien(portal, p_dataNPC);
            if (!checkStorageResource && isExitTargetResource)
            {
                //End job
                p_dataNPC.Job            = null;
                p_dataNPC.TargetID       = string.Empty;
                p_dataNPC.TargetPosition = Vector3.zero;
            }
            //Continue job
            if (p_dataNPC.Job != null && p_dataNPC.Job.Job != TypesJobs.Bathering)
            {
                return(true);
            }
        }
        // --- TO LOOT && BUILD
        else
        {
            //Test job on target //@JOB@
            if (targetInfo.Data.TypePrefab != jobResourceTarget)
            {
                return(false);
            }

            if (p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.CompletedLoot.ToString() &&
                p_dataNPC.CurrentAction != GameActionPersonController.NameActionsPerson.Work.ToString())
            {
                GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Work, controller, true);
            }
            if (p_dataNPC.CurrentAction == GameActionPersonController.NameActionsPerson.CompletedLoot.ToString())
            {
                if (job.Job == TypesJobs.Build)
                {
                    if (p_dataNPC.Inventory == null || p_dataNPC.Inventory.IsEmpty || p_dataNPC.Inventory.TypeInventoryObject.ToString() != job.ResourceResult.ToString())
                    {
                        Debug.Log(Storage.EventsUI.ListLogAdd = "### JOB BUILD: Inventory is Empty >> " + job.Job.ToString() + " " + job.TargetResource + " R:" + job.ResourceResult);
                        //p_dataNPC.Inventory = DataObjectInventory.EmptyInventory();
                        return(false);
                    }
                }
                GameActionPersonController.ExecuteActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Move, controller, true);
                // **** FIND RESOURCE ****
                //---Replace object
                //1. Remove resource
                //Vector3 posTarget = targetInfo.Data.Position;

                bool isTargetTypeTrue = false;
                PoolGameObjects.TypePoolPrefabs typePoolResource = CheckFieldJobValid(ref isTargetTypeTrue, job, targetInfo.Data);
                if (job.Job == TypesJobs.Build)
                {
                    if (typePoolResource == PoolGameObjects.TypePoolPrefabs.PoolFloor)
                    {
                        GenericWorldManager.ClearLayerObject(targetInfo.Data);
                    }
                    //---- TEST
                    //else
                    //    Debug.Log(Storage.EventsUI.ListLogAdd = "TypesJobs.Build .. Not Remove resource: " + job.ResourceResult.ToString() + " >> " + targetInfo.Data.NameObject);
                }
                else
                {
                    GenericWorldManager.ClearLayerObject(targetInfo.Data);
                }

                //2. Create new resource
                if (job.ResourceResult != SaveLoadData.TypePrefabs.PrefabField)
                {
                    CreateNewResource(typePoolResource, job, targetInfo, p_dataNPC);
                }

                bool isZonaReal = Helper.IsValidPiontInZona(targetInfo.Data.Position.x, targetInfo.Data.Position.y);
                if (isZonaReal)
                {
                    Storage.GenGrid.LoadObjectToReal(targetInfo.Field);
                }

                //3. Add resource in Inventory (where not Ground)
                p_dataNPC.Inventory = targetInfo.Data.LootObjectToInventory(p_dataNPC);

                //4. Set target to target location
                //if (job.JobTo == TypesJobTo.ToPortal)
                //{
                //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Idle, null);
                //GameActionPersonController.RequestActionNPC(p_dataNPC, GameActionPersonController.NameActionsPerson.Target, null);
                //}
            }
            //continue work...
            return(true);
        }
        return(false);
    }
예제 #10
0
    public static void ActionTarget(ModelNPC.PersonData dataNPC, GameActionPersonController controller)
    {
        if (ActionTargetIsLock)
        {
            Debug.Log(Storage.EventsUI.ListLogAdd = ".....ActionTarget is LOCK");
            return;
        }
        ActionTargetIsLock = true;

        //Storage.EventsUI.ListLogAdd = "ActionTarget .... ReaderSceneIsValid=" + Storage.Instance.ReaderSceneIsValid;
        temp_job = null;

        if (!Storage.Instance.ReaderSceneIsValid)// && TimeEndCurrentAction < Time.time)
        {
            ActionTargetLocal(dataNPC, controller);
            ActionTargetIsLock = false;
            return;
        }

        Storage.EventsUI.ListLogAdd = "ActionTarget ....!!!";

        //string tempID = dataNPC.TargetID;
        string indErr = "0";

        try {
            indErr = "1";
            GetAlienData(dataNPC).OnTargetCompleted();
            indErr = "2";
            //m_TargetObject = Storage.Person.GetAlienNextTargetObject(GetAlienData(dataNPC));
            m_TargetObject = null;
            //@JOB@
            temp_job = dataNPC.Job;
            //Storage.Person.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC));
            AlienJobsManager.GetAlienNextTargetObject(ref m_TargetObject, ref temp_job, GetAlienData(dataNPC));
        }
        catch (Exception ex)
        {
            Storage.EventsUI.ListLogAdd = "##### ActionTarget " + ex.Message;
            ActionTargetIsLock          = false;
            return;
        }

        //test
        if (m_TargetObject == null)
        {
            Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> empty";
        }
        else
        {
            Storage.EventsUI.ListLogAdd = "*** " + dataNPC.NameObject + " ==> " + m_TargetObject.NameObject;
        }

        if (m_TargetObject == null)
        {
            GetAlienData(dataNPC).SetTargetPosition();
        }
        else
        {
            var targetPosition = m_TargetObject.Position;
            dataNPC.TargetID = m_TargetObject.Id;
            //FIX base>>ToPortal
            (dataNPC as ModelNPC.GameDataAlien).BaseLockedTargetID = dataNPC.TargetID;
            dataNPC.SetTargetPosition(targetPosition);
            dataNPC.Job = temp_job;//@JOB@
        }

        ExecuteActionNPC(dataNPC, NameActionsPerson.Move, controller);

        if (controller != null)
        {
            controller.DrawRayTarget(); //TEST
        }
        ActionTargetIsLock = false;
    }
예제 #11
0
    public static void ExecuteActionNPC(ModelNPC.PersonData dataNPC, NameActionsPerson p_nameAction, GameActionPersonController controller, bool isForce = false)
    {
        if (isForce && controller != null)
        {
            controller.ResetAction();
        }

        if (controller != null)
        {
            controller.ActionPerson = p_nameAction;
        }

        dataNPC.CurrentAction = p_nameAction.ToString();
    }
예제 #12
0
    public static void RequestActionNPC(ModelNPC.PersonData dataNPC, NameActionsPerson p_nameAction, GameActionPersonController controller, bool isForce = false)
    {
        if (isForce)
        {
            controller.ResetAction();
        }

        if (p_nameAction != NameActionsPerson.Completed)
        {
            AddActionNPC(dataNPC, p_nameAction);
        }

        if (controller != null)
        {
            controller.ActionPerson = NameActionsPerson.Completed;
        }

        dataNPC.CurrentAction = NameActionsPerson.Completed.ToString();
    }
예제 #13
0
    public static void StartActionNPC(ModelNPC.PersonData dataNPC, NameActionsPerson p_nameAction, GameActionPersonController controller)
    {
        if (p_nameAction != NameActionsPerson.None)
        {
            if (controller != null)
            {
                controller.SetAction(p_nameAction);
            }
        }

        if (controller != null)
        {
            dataNPC.CurrentAction = controller.ActionPerson.ToString();
        }
        else
        {
            dataNPC.CurrentAction = p_nameAction.ToString();
        }

        switch (p_nameAction)
        {
        case NameActionsPerson.Idle:
            ActionIdle(dataNPC, controller);
            break;

        case NameActionsPerson.IdleLock:
            ActionIdleLock(dataNPC, controller);
            break;

        case NameActionsPerson.Move:
            if (controller == null)
            {
                ActionMove(dataNPC);
            }
            break;

        case NameActionsPerson.Completed:
            ActionTarget(dataNPC, controller);
            break;

        case NameActionsPerson.Dead:
            break;

        case NameActionsPerson.Attack:
            break;

        case NameActionsPerson.Work:
            ActionWork(dataNPC, controller);
            break;

        case NameActionsPerson.Target:
            ActionTarget(dataNPC, controller);
            break;

        case NameActionsPerson.TargetLocal:
            ActionTargetLocal(dataNPC, controller);
            break;

        case NameActionsPerson.TargetBackToBase:
            ActionTargetBackToBase(dataNPC, controller);
            break;
        }

        //Debug
        if (controller == null || Storage.SceneDebug.SettingsScene.RealDebugOn || Storage.SceneDebug.VipID == dataNPC.Id)
        {
            Storage.SceneDebug.ViewPerson(dataNPC, p_nameAction);
        }
    }
예제 #14
0
    public static void CheckCompletionActions(ModelNPC.GameDataAlien dataNPC, NameActionsPerson actionPerson, GameActionPersonController controller)
    {
        //dleLock, Move, Target, TargetLocal, TargetBackToBase
        switch (actionPerson)
        {
        case NameActionsPerson.Idle:
            CheckComplitionIdle(dataNPC, controller);
            break;

        case NameActionsPerson.IdleLock:
            CheckComplitionIdleLock(dataNPC, controller);
            break;

        case NameActionsPerson.Move:
            if (controller != null)
            {
                controller.CheckComplitionMove();
            }
            else
            {
                CheckComplitionMoveInDream(dataNPC);
            }
            break;

        case NameActionsPerson.None:
            if (controller != null)
            {
                controller.ActionPerson = NameActionsPerson.Idle;
            }
            dataNPC.CurrentAction = NameActionsPerson.Idle.ToString();
            break;

        case NameActionsPerson.CompletedLoot:
            CheckComplitionLoot(dataNPC, controller);
            break;

        case NameActionsPerson.Work:
            CheckComplitionWork(dataNPC, controller);
            break;

        case NameActionsPerson.Target:
        case NameActionsPerson.TargetLocal:
        case NameActionsPerson.TargetBackToBase:
            break;

        case NameActionsPerson.Attack:
        case NameActionsPerson.Dead:
        case NameActionsPerson.Completed:

            break;
        }
    }
예제 #15
0
    public static void CheckNextAction(ModelNPC.GameDataAlien dataNPC, NameActionsPerson p_actionPerson, GameActionPersonController controller)
    {
        CheckCompletionActions(dataNPC, p_actionPerson, controller);

        var listPersonActions = GetActions(dataNPC);

        //fix WORK
        CheckCurrentAction(dataNPC, ref p_actionPerson);
        //p_actionPerson = GetCurrentAction(dataNPC);

        if (dataNPC.CurrentAction == NameActionsPerson.Completed.ToString())
        {
            if (listPersonActions.Count == 0)
            {
                AddActionNPC(dataNPC, NameActionsPerson.Completed);
            }

            listPersonActions = GetActions(dataNPC);

            if (listPersonActions.Count > 0)
            {
                NameActionsPerson actionPerson = listPersonActions[0];
                listPersonActions.RemoveAt(0);
                dataNPC.PersonActions = listPersonActions.Select(p => p.ToString()).ToArray();// (p=>p.).ToArray();
                StartActionNPC(dataNPC, actionPerson, controller);
            }
        }
        else
        {
            StartActionNPC(dataNPC, p_actionPerson, controller);
        }
    }
예제 #16
0
    private void PersonWork(ReaderScene.DataObjectInfoID infoNPC, int count)
    {
        var persData = infoNPC.Data as ModelNPC.GameDataAlien;

        if (persData == null || persData.IsReality)
        {
            return;
        }

        //List<GameActionPersonController.NameActionsPerson> actonsNPC = GameActionPersonController.GetActions(persData);
        //GameActionPersonController.NameActionsPerson actionCurrent = GameActionPersonController.GetCurrentAction(persData);
        //actionCurrent = GameActionPersonController.GetCurrentAction(persData);
        //GameActionPersonController.CheckNextAction(persData, actionCurrent, null);
        //temp_actonsNPC = GameActionPersonController.GetActions(persData);
        GameActionPersonController.GetCurrentAction_Cache(ref temp_actionCurrent, persData);
        GameActionPersonController.CheckNextAction(persData, temp_actionCurrent, null);

        //TEST -----------------------------
        if (Storage.SceneDebug.SettingsScene.IsLog)
        {
            Storage.EventsUI.ListLogAdd = "WORK: " + persData.NameObject + " >> " + temp_actionCurrent.ToString();
        }

        bool isZonaReal = Helper.IsValidPiontInZona(persData.Position.x, persData.Position.y);

        if (!persData.IsReality && isZonaReal)
        {
            //TEST ------------------------
            Storage.EventsUI.ListLogAdd = "GOTO IN REAL WORLD: " + persData.NameObject;
            string fieldInfo = infoNPC.Field;
            string fieldPos  = Helper.GetNameFieldPosit(persData.Position.x, persData.Position.y);
            string fieldName = Helper.GetNameFieldByName(persData.NameObject);
            if (fieldInfo != fieldPos || fieldInfo != fieldName || fieldPos != fieldName)
            {
                string strErr = "??? PersonWork name Field I: " + fieldInfo + " P:" + fieldPos + " DN:" + fieldName;
                Debug.Log(strErr);
                Storage.EventsUI.ListLogAdd = strErr;
            }
            //-----------------------------

            Storage.GenGrid.LoadObjectToReal(fieldName);

            //--- Debag
            //Storage.Instance.SelectGameObjectID = Helper.GetID(persData.NameObject);
            //Storage.EventsUI.ClearListExpandPersons();
            //GameObject gobject = Storage.Instance.GamesObjectsReal[fieldPos].Find(p => p.name == persData.NameObject);
            //if (gobject != null)
            //{
            //    Storage.EventsUI.AddMenuPerson(persData, gobject);
            //    Storage.GamePause = true;
            //}
            //else
            //{
            //    string strErr = "####### Not n REAL : " + persData.NameObject;
            //    Debug.Log(strErr);
            //    Storage.EventsUI.ListLogAdd = strErr;
            //}
            //-----------------
        }
        else
        {
        }
    }