示例#1
0
        private void loadSettings()
        {
            MyLog.Default.WriteLine("loading settings");
            var text = readStorage((IMyTerminalBlock)block, SETTINGSGUID);

            if (text.Length <= 1)
            {
                return;
            }
            var res = MyAPIGateway.Utilities.SerializeFromBinary <settingsData>(Convert.FromBase64String(text));

            selectedMode = res.selectedMode;
            if (res.patrolPoints != null)
            {
                patrolPoints = res.patrolPoints;
            }
            standPoint  = res.standPoint;
            attackPoint = res.attackPoint;
            targetCount = res.targetCount;

            foreach (var data in res.data)
            {
                offsets[data.id]        = data.offset;
                patrolProgress[data.id] = data.progress;
            }

            foreach (var point in res.spawnLocations)
            {
                createNPCatPos(point, npc_subtype);
            }

            block.GameLogic.GetAs <NPCControlBlock>()?.settingsChanged();
        }
示例#2
0
    void Update()
    {
        if (mCurrentMode != mNPCMode)
        {
            mCurrentMode = mNPCMode;
            ChangeMode();
        }
        switch (mCurrentMode)
        {
        case NPCMode.PathFollowNavMesh:
        {
            NavMeshPatherUpdate();
            break;
        }

        case NPCMode.PathFollowObstacleAvoid:
        {
            PathFollowAvoiderUpdate();
            break;
        }

        case NPCMode.WanderObstacleAvoid:
        {
            WandererUpdate();
            break;
        }
        }
    }
示例#3
0
            public settingsData(NPCMode selectedMode, Dictionary <int, Vector3> offsets,
                                Dictionary <int, int> patrolProgress, List <Vector3> patrolPoints,
                                Vector3 standPoint, Vector3 attackPoint, List <Vector3> spawnLocations, int targetCount)
            {
                this.selectedMode   = selectedMode;
                this.patrolPoints   = patrolPoints;
                this.standPoint     = standPoint;
                this.attackPoint    = attackPoint;
                this.spawnLocations = spawnLocations;
                this.targetCount    = targetCount;

                var datas = new List <serializableNPCData>();

                foreach (var elem in offsets)
                {
                    int progress;
                    patrolProgress.TryGetValue(elem.Key, out progress);
                    var item = new serializableNPCData()
                    {
                        id = elem.Key, offset = elem.Value, progress = progress
                    };
                    datas.Add(item);
                }

                data = datas;
            }
 void OnTriggerEnter2D(Collider2D col)
 {
     if (col.gameObject.tag == "Player" && npcMode == NPCMode.notTalking)
     {
         npcMode = NPCMode.readyToTalk;
         sign.SetActive(true);
         //Debug.Log(gameObject.name + " ready to talk!");
     }
 }
 void OnTriggerExit2D(Collider2D col)
 {
     if (col.gameObject.tag == "Player" && npcMode == NPCMode.readyToTalk)
     {
         //Debug.Log(gameObject.name + " player too far to talk");
         npcMode = NPCMode.notTalking;
         sign.SetActive(false);
     }
 }
示例#6
0
 public void SetMode(NPCMode setMode)
 {
     mode = setMode;
     if (setMode == NPCMode.ALLY)
     {
         ConvertToAlly();
         StartCoroutine(AddPointDelay(0.4f));
     }
     else if (setMode == NPCMode.NONCON)
     {
         sprAnim.Play("npc/noncon_walk", 0);
     }
 }
示例#7
0
    void ConvertToAlly()
    {
        mode = NPCMode.ALLY;
        tag  = "Ally";

        GameObject particleObject = Instantiate(ConvertParticle, transform);

        particleObject.transform.parent = transform.root;
        particleObject.transform.GetChild(0).GetComponent <ParticleSystem>().Emit(1);



        master.spawnEnemies.Spawn();
        motor.On();
        Debug.Log("change! " + gameObject.name);
        sprAnim.Play("npc/ally_walk", 0);
    }
    // Update is called once per frame
    void Update()
    {
        switch (npcMode)
        {
        case NPCMode.wander:
            DoWander();
            if (CanSeeCritter())
            {
                npcMode = NPCMode.attack;
            }
            else if (CanSeePickUp())
            {
                npcMode = NPCMode.collect;
            }
            break;

        case NPCMode.collect:
            DoCollect();
            if (CanSeeCritter())
            {
                npcMode = NPCMode.attack;
            }
            else if (!pickUpTarget.activeSelf)
            {
                npcMode = NPCMode.wander;
            }
            break;

        case NPCMode.attack:
            MoveToCritter();
            if (CanSeePickUp())
            {
                npcMode = NPCMode.collect;
            }
            else if (!critterTarget.activeSelf)
            {
                npcMode = NPCMode.wander;
            }
            break;

        default:
            break;
        }
    }
示例#9
0
        private void updateMode(IMyCubeBlock block)
        {
            try {
                var selected = getSelected(block as IMyTerminalBlock);
                var newMode  = (NPCMode)(int.Parse(selected));

                if (newMode != selectedMode)
                {
                    //mode change
                    stopRecordingPoints();
                    resetData();
                    deleteOldWaypoints(newMode == NPCMode.follow);
                }

                selectedMode = newMode;
            }
            catch (Exception ex) {
                // ignored
            }
        }
示例#10
0
 void Start()
 {
     mAgent       = GetComponent <SteeringAgent>();
     mCurrentMode = mNPCMode;
     ChangeMode();
 }
示例#11
0
 // Methods
 public SetNPCMode(byte[] data)
     : base(data)
 {
     this.uid = BitConverter.ToUInt32(data, 1);
     this.mode = (NPCMode) data[5];
     this.x = BitConverter.ToUInt16(data, 6);
     this.y = BitConverter.ToUInt16(data, 8);
     this.life = data[10];
     this.unknown11 = data[11];
 }