示例#1
0
        public override void Spawn(EntityData d, int index, Vector3 pos, float yaw, Actor instigator, Actor owner, Team team)
        {
            base.Spawn(d, index, pos, yaw, instigator, owner, team);

            if (data.defaultLoadout != null)
            {
                var loot = data.defaultLoadout.loot;
                if ((loot != null) && (loot.Length > 0))
                {
                    for (int i = 0; i < loot.Length; ++i)
                    {
                        var item = loot[i].CreateItem();
                        this.loot[i] = item;
                    }
                }

                var inventory = data.defaultLoadout.inventory;
                if ((inventory != null) && (inventory.Length > 0))
                {
                    for (int i = 0; i < inventory.Length; ++i)
                    {
                        var item = inventory[i].CreateItem();
                        SetInventorySlot(i, item);
                    }
                }
            }


            foreach (var b in data.behaviors)
            {
                if (b != null && b.behavior != null)
                {
                    behaviors.Add(b.behavior.Create(this, b.scoreMultiplier, b.weaponIndex, b.attackIndex));
                }
            }
            _defaultSilhouetteMode = SilhouetteRenderer.Mode.Off;
            AttachExternalGameObject(GameObject.Instantiate(data.prefab.Load(), pos, Quaternion.identity));
            position      = pos;
            this.yaw      = yaw;
            spawnPosition = pos;
            maxHealth     = data.maxHealth;
            health        = maxHealth;
            this.team     = team;
            active        = false;
            canClimb      = false;
            canMove       = true;
            canJump       = true;
            canRun        = true;
            canTurn       = true;
            canAttack     = true;
            canStrafe     = true;
            onHit        += OnHit;
            gameMode.CritterSpawned();

            gameMode.onAudioEvent += OnAudioEvent;
        }
示例#2
0
        void UpdateSilhouette()
        {
            if (driver != null)
            {
                return;
            }
            if (data.defaultSilhouetteMode == SilhouetteRenderer.Mode.Off)
            {
                return;
            }

            if (wary > 0 || IsPanicked())
            {
                if (_defaultSilhouetteMode != SilhouetteRenderer.Mode.On)
                {
                    _defaultSilhouetteMode = SilhouetteRenderer.Mode.On;
                    silhouetteMode         = SilhouetteRenderer.Mode.On;
                }
                return;
            }

            var checkDist = data.silhouetteDistanceThreadholdSq;

            if (checkDist <= 0)
            {
                return;
            }

            float closest = float.MaxValue;

            foreach (var player in world.GetActorIterator <Player>())
            {
                var d = GetSqDistanceTo(player);
                closest = Mathf.Min(d, closest);
            }

            var mode = SilhouetteRenderer.Mode.Off;

            if (closest < data.silhouetteDistanceThreadholdSq)
            {
                mode = data.defaultSilhouetteMode;
            }

            if (mode != _defaultSilhouetteMode)
            {
                _defaultSilhouetteMode = mode;
                silhouetteMode         = mode;
            }
        }