protected override void Start()
    {
        Rigidbody = GetComponent <Rigidbody>();

        base.Start();

        if (!isServer && isClient)
        {
            var anim = GetComponent <Animator>();
            if (anim != null)
            {
                anim.applyRootMotion = false;
            }
            return;
        }

        if (!isServer)
        {
            return;
        }

        HerbivoreSensor = new OctreeSensor <HerbivoreBase>(transform, SensingRadius, MaximumHerdSizeToAttack + 1, OctreeManager.Get(OctreeType.Herbivore));

        //Starts the carnivore slightly hungry
        TimeSinceEating = DayClock.Singleton.DaysToSeconds(1.01f);
    }
 private void Start()
 {
     if (isServer)
         m_PlayerSensor = new OctreeSensor<NetworkIdentity>(OriginTransform, m_InteractRange, OctreeManager.Get(OctreeType.Player))
         {
             RefreshRate = .1f.Randomize(.03f)
         };
 }
Пример #3
0
 public MachineMonitor(
     IConcurrencyProvider concurrencyProvider,
     ITemperatureSensor temperatureSensor, 
     IProximitySensor proximitySensor)
 {
     _concurrencyProvider = concurrencyProvider;
     _temperatureSensor = temperatureSensor;
     _proximitySensor = proximitySensor;
 }
Пример #4
0
 public MachineMonitor(
     IConcurrencyProvider concurrencyProvider,
     ITemperatureSensor temperatureSensor,
     IProximitySensor proximitySensor)
 {
     _concurrencyProvider = concurrencyProvider;
     _temperatureSensor   = temperatureSensor;
     _proximitySensor     = proximitySensor;
 }
Пример #5
0
    private IEnumerator InitializePlayerSensor()
    {
        while (!OctreeManager.Contains(OctreeType.Player))
        {
            yield return(new WaitForSeconds(.5f));
        }

        m_PlayerSensor = new OctreeSensor <Transform>(transform, CalculateEnclosingRadius(), OctreeManager.Get(OctreeType.Player))
        {
            RefreshRate = .1f.Randomize(.05f)
        };
    }
Пример #6
0
    public override void OnStartServer()
    {
        m_AnimAudioController = GetComponent <TriHorseAnimAudioController>();
        m_AnimAudioController.OnEatingFinished += OnEatingFinished;
        m_AnimAudioController.OnDyingFinished  += Die;

        Grower = new ScaledGrowth(transform,
                                  DataStore.GetFloat(Data.TriHorseInitialScale),
                                  DataStore.GetFloat(Data.TriHorseFinalScaleMin),
                                  DataStore.GetFloat(Data.TriHorseFinalScaleMax));

        Grower.StartGrowing();
        Scale = Grower.Scale;

        AgeData.DaysToGrown = DataStore.GetFloat(Data.TriHorseDaysToGrown);
        AgeData.LifeSpan    = DataStore.GetFloat(Data.TriHorseLifeSpan);
        BaseSpeed           = DataStore.GetFloat(Data.TriHorseBaseSpeed);

        DaysBeforeReproducing          = DataStore.GetFloat(Data.TriHorseDaysBeforeReproducing);
        DaysBetweenReproductions       = DataStore.GetFloat(Data.TriHorseDaysBetweenReproductions);
        StarvingDamageAmount           = DataStore.GetFloat(Data.TriHorseStarvingDamageAmount);
        StructureCollisionDamageAmount = DataStore.GetFloat(Data.TriHorseStructureCollisionDamageAmount);
        SensingRadius = DataStore.GetFloat(Data.TriHorseSensingRadius);

        WanderParameters.Radius              = DataStore.GetFloat(Data.TriHorseWanderRadius);
        WanderParameters.Distance            = DataStore.GetFloat(Data.TriHorseWanderDistance);
        WanderParameters.Jitter              = DataStore.GetFloat(Data.TriHorseWanderJitter);
        FlockingOptions.WanderWeight         = DataStore.GetFloat(Data.TriHorseWanderWeight);
        FlockingOptions.AlignmentWeight      = DataStore.GetFloat(Data.TriHorseAlignWeight);
        FlockingOptions.MinDispersion        = DataStore.GetFloat(Data.TriHorseMinFlockDispersion);
        FlockingOptions.MaxDispersion        = DataStore.GetFloat(Data.TriHorseMaxFlockDispersion);
        FlockingOptions.MinDispersionSquared = FlockingOptions.MinDispersion * FlockingOptions.MinDispersion;
        FlockingOptions.MaxDispersionSquared = FlockingOptions.MaxDispersion * FlockingOptions.MaxDispersion;

        m_FlockmateSensor             = new OctreeSensor <TriHorse>(transform, SensingRadius, 20, OctreeManager.Get(OctreeType.Herbivore));
        m_FlockmateSensor.RefreshRate = m_FlockmateSensor.RefreshRate.Randomize(.05f);

        base.OnStartServer();
        Scale = Grower.Scale;

        BehaviourBrain.In(BehaviourState.SeekingFood)
        .If(() => Health <= 0)
        .GoTo(BehaviourState.Death)
        .If(() => m_InDeathThrows)
        .GoTo(BehaviourState.Dying)
        .If(() => m_TimeSinceEating < DayClock.Singleton.DaysToSeconds(.4f))
        .GoTo(BehaviourState.Flocking)
        .If(CanReproduce)
        .GoTo(BehaviourState.Reproducing)
        .If(() => m_EatingNodule)
        .GoTo(BehaviourState.Eating)
        .ExecuteWhileIn(SeekFood, StarvationCheck);

        BehaviourBrain.In(BehaviourState.Flocking)
        .If(() => Health <= 0)
        .GoTo(BehaviourState.Death)
        .If(() => m_InDeathThrows)
        .GoTo(BehaviourState.Dying)
        .If(() => m_TimeSinceEating > DayClock.Singleton.DaysToSeconds(.4f))
        .GoTo(BehaviourState.SeekingFood)
        .If(CanReproduce)
        .GoTo(BehaviourState.Reproducing)
        .ExecuteWhileIn(Flocking);

        BehaviourBrain.In(BehaviourState.Eating)
        .If(() => m_InDeathThrows)
        .GoTo(BehaviourState.Dying)
        .If(() => !m_EatingNodule)
        .GoTo(BehaviourState.Flocking)
        .ExecuteOnEntry(StartEating)
        .ExecuteWhileIn(EatNodule)
        .ExecuteOnExit(EndEating);

        BehaviourBrain.In(BehaviourState.Reproducing)
        .DoOnce(Reproduce)
        .If(() => true)
        .GoTo(BehaviourState.SeekingFood);

        //Empty state. All action is handled through anim callbacks or outside function calls
        //Once we enter this state, we do not leave it.
        BehaviourBrain.In(BehaviourState.Dying);

        BehaviourBrain.In(BehaviourState.Death)
        .DoOnce(Die);

        BehaviourBrain.Initialize(BehaviourState.SeekingFood);

        //This forces the herbivore to start in the seeking food state
        m_TimeSinceEating = DayClock.Singleton.DaysToSeconds(.4f);
    }
Пример #7
0
 public LockingMechanism(IProximitySensor _sensor)
 {
     Sensor = _sensor;
 }
Пример #8
0
 private void Start()
 {
     m_Sensor = new OctreeSensor <Transform>(transform, Range, 1, OctreeManager.Get(OctreeType.Player));
 }