示例#1
0
 public void FixedUpdate()
 {
     if (Object.op_Equality((Object)this.thisEntity, (Object)null) || this.entityContents == null)
     {
         return;
     }
     foreach (BaseEntity ent in this.entityContents.ToArray <BaseEntity>())
     {
         if (ent.IsValid() && !ent.EqualNetID((BaseNetworkable)this.thisEntity))
         {
             Rigidbody component = (Rigidbody)((Component)ent).GetComponent <Rigidbody>();
             if (Object.op_Implicit((Object)component) && !component.get_isKinematic())
             {
                 float   num1      = Vector3Ex.Distance2D(((Component)ent).get_transform().get_position(), ((Component)this).get_transform().get_position());
                 float   num2      = 1f - Mathf.InverseLerp(this.minRadius, this.maxRadius, num1);
                 float   num3      = 1f - Mathf.InverseLerp(this.minRadius - 1f, this.minRadius, num1);
                 Vector3 vector3_1 = ent.ClosestPoint(((Component)this).get_transform().get_position());
                 Vector3 vector3_2 = Vector3Ex.Direction2D(vector3_1, ((Component)this).get_transform().get_position());
                 component.AddForceAtPosition(Vector3.op_Multiply(Vector3.op_Multiply(vector3_2, this.maxPushVelocity), num2), vector3_1, (ForceMode)5);
                 if ((double)num3 > 0.0)
                 {
                     component.AddForceAtPosition(Vector3.op_Multiply(Vector3.op_Multiply(vector3_2, 1f), num3), vector3_1, (ForceMode)2);
                 }
             }
         }
     }
 }
示例#2
0
 public override void DoPushAction(BasePlayer player)
 {
     if (player.isMounted || !IsStationary() || (!(player.WaterFactor() <= 0.6f) && !IsFlipped()) || (!IsFlipped() && player.IsStandingOnEntity(this, 8192)) || Vector3.Distance(player.transform.position, base.transform.position) > 5f || dying)
     {
         return;
     }
     player.metabolism.calories.Subtract(2f);
     player.metabolism.SendChangesToClient();
     if (IsFlipped())
     {
         rigidBody.AddRelativeTorque(Vector3.forward * 6.5f, ForceMode.VelocityChange);
     }
     else
     {
         Vector3 vector  = Vector3Ex.Direction2D(player.transform.position, base.transform.position);
         Vector3 vector2 = Vector3Ex.Direction2D(player.transform.position + player.eyes.BodyForward() * 3f, player.transform.position);
         vector2 = (Vector3.up * 0.1f + vector2).normalized;
         Vector3 position = base.transform.position + vector * 2f;
         float   num      = 3f;
         float   value    = Vector3.Dot(base.transform.forward, vector2);
         num += Mathf.InverseLerp(0.8f, 1f, value) * 3f;
         rigidBody.AddForceAtPosition(vector2 * num, position, ForceMode.VelocityChange);
     }
     if (HasFlag(Flags.Reserved5))
     {
         if (pushWaterEffect.isValid)
         {
             Effect.server.Run(pushWaterEffect.resourcePath, this, 0u, Vector3.zero, Vector3.zero);
         }
     }
     else if (pushLandEffect.isValid)
     {
         Effect.server.Run(pushLandEffect.resourcePath, this, 0u, Vector3.zero, Vector3.zero);
     }
 }
示例#3
0
    public override Vector3 GetAimDirection()
    {
        int     num             = Object.op_Inequality((Object)this.currentTarget, (Object)null) ? 1 : 0;
        bool    flag1           = num != 0 && this.currentTargetLOS;
        bool    flag2           = (double)Vector3Ex.Distance2D(this.finalDestination, this.GetPosition()) > 0.5;
        Vector3 desiredVelocity = this.NavAgent.get_desiredVelocity();

        desiredVelocity.y = (__Null)0.0;
        ((Vector3) ref desiredVelocity).Normalize();
        if (num == 0)
        {
            if (flag2)
            {
                return(desiredVelocity);
            }
            return(Vector3.get_zero());
        }
        if (flag1 && this.desiredSpeed != HumanNPC.SpeedType.Sprint)
        {
            Vector3 vector3 = Vector3.op_Subtraction(this.AimOffset(this.currentTarget), this.eyes.position);
            return(((Vector3) ref vector3).get_normalized());
        }
        if (flag2)
        {
            return(desiredVelocity);
        }
        if (Vector3.op_Inequality(this.aimOverridePosition, Vector3.get_zero()))
        {
            return(Vector3Ex.Direction2D(this.aimOverridePosition, this.ServerPosition));
        }
        return(Vector3Ex.Direction2D(Vector3.op_Addition(this.ServerPosition, Vector3.op_Multiply(this.eyes.BodyForward(), 1000f)), this.ServerPosition));
    }
示例#4
0
 public override StateStatus StateThink(float delta)
 {
     base.StateThink(delta);
     if (status == StateStatus.Error)
     {
         return(status);
     }
     if (!brain.Navigator.Moving)
     {
         if (currentWaitTime <= 0f && currentTargetPoint.HasLookAtPoints())
         {
             Transform randomLookAtPoint = currentTargetPoint.GetRandomLookAtPoint();
             if (randomLookAtPoint != null)
             {
                 brain.Navigator.SetFacingDirectionOverride(Vector3Ex.Direction2D(randomLookAtPoint.transform.position, GetEntity().ServerPosition));
             }
         }
         if (currentTargetPoint.WaitTime > 0f)
         {
             currentWaitTime += delta;
         }
         if (currentTargetPoint.WaitTime <= 0f || currentWaitTime >= currentTargetPoint.WaitTime)
         {
             brain.Navigator.ClearFacingDirectionOverride();
             currentWaitTime = 0f;
             AIMovePoint aIMovePoint = currentTargetPoint;
             currentTargetPoint = path.GetNextPoint(currentTargetPoint, ref pathDirection);
             if ((!(currentTargetPoint != null) || !(currentTargetPoint == aIMovePoint)) && (currentTargetPoint == null || !brain.Navigator.SetDestination(currentTargetPoint.transform.position, BaseNavigator.NavigationSpeed.Slow)))
             {
                 return(StateStatus.Error);
             }
         }
     }
     return(StateStatus.Running);
 }
示例#5
0
 public void FixedUpdate()
 {
     if (this.thisEntity == null)
     {
         return;
     }
     if (this.entityContents == null)
     {
         return;
     }
     BaseEntity[] array = this.entityContents.ToArray <BaseEntity>();
     for (int i = 0; i < (int)array.Length; i++)
     {
         BaseEntity baseEntity = array[i];
         if (baseEntity.IsValid() && !baseEntity.EqualNetID(this.thisEntity))
         {
             Rigidbody component = baseEntity.GetComponent <Rigidbody>();
             if (component && !component.isKinematic)
             {
                 float   single   = Vector3Ex.Distance2D(baseEntity.transform.position, base.transform.position);
                 float   single1  = 1f - Mathf.InverseLerp(this.minRadius, this.maxRadius, single);
                 float   single2  = 1f - Mathf.InverseLerp(this.minRadius - 1f, this.minRadius, single);
                 Vector3 vector3  = baseEntity.ClosestPoint(base.transform.position);
                 Vector3 vector31 = Vector3Ex.Direction2D(vector3, base.transform.position);
                 component.AddForceAtPosition((vector31 * this.maxPushVelocity) * single1, vector3, ForceMode.Acceleration);
                 if (single2 > 0f)
                 {
                     component.AddForceAtPosition((vector31 * 1f) * single2, vector3, ForceMode.VelocityChange);
                 }
             }
         }
     }
 }
    public void Greeting()
    {
        List <BasePlayer> list = (List <BasePlayer>)Pool.GetList <BasePlayer>();

        Vis.Entities <BasePlayer>(((Component)this).get_transform().get_position(), 10f, list, 131072, (QueryTriggerInteraction)2);
        ((Component)this).get_transform().get_position();
        BasePlayer basePlayer1 = (BasePlayer)null;

        foreach (BasePlayer basePlayer2 in list)
        {
            if (!basePlayer2.isClient && !basePlayer2.IsNpc && (!Object.op_Equality((Object)basePlayer2, (Object)this) && basePlayer2.IsVisible(this.eyes.position, float.PositiveInfinity)) && (!Object.op_Equality((Object)basePlayer2, (Object)this.lastWavedAtPlayer) && (double)Vector3.Dot(Vector3Ex.Direction2D(basePlayer2.eyes.position, this.eyes.position), this.initialFacingDir) >= 0.200000002980232))
            {
                basePlayer1 = basePlayer2;
                break;
            }
        }
        if (Object.op_Equality((Object)basePlayer1, (Object)null) && !list.Contains(this.lastWavedAtPlayer))
        {
            this.lastWavedAtPlayer = (BasePlayer)null;
        }
        if (Object.op_Inequality((Object)basePlayer1, (Object)null))
        {
            this.SignalBroadcast(BaseEntity.Signal.Gesture, "wave", (Connection)null);
            this.SetAimDirection(Vector3Ex.Direction2D(basePlayer1.eyes.position, this.eyes.position));
            this.lastWavedAtPlayer = basePlayer1;
        }
        else
        {
            this.SetAimDirection(this.initialFacingDir);
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BasePlayer>((List <M0>&) ref list);
    }
    public override Vector3 GetAimDirection()
    {
        bool    flag     = this.currentTarget != null;
        bool    flag1    = (!flag ? false : this.currentTargetLOS);
        bool    flag2    = Vector3Ex.Distance2D(this.finalDestination, base.GetPosition()) > 0.5f;
        Vector3 navAgent = this.NavAgent.desiredVelocity;

        navAgent.y = 0f;
        navAgent.Normalize();
        if (!flag)
        {
            if (flag2)
            {
                return(navAgent);
            }
            return(Vector3.zero);
        }
        if (flag1 && this.desiredSpeed != HumanNPC.SpeedType.Sprint)
        {
            Vector3 vector3 = this.AimOffset(this.currentTarget) - this.eyes.position;
            return(vector3.normalized);
        }
        if (flag2)
        {
            return(navAgent);
        }
        if (this.aimOverridePosition != Vector3.zero)
        {
            return(Vector3Ex.Direction2D(this.aimOverridePosition, this.ServerPosition));
        }
        return(Vector3Ex.Direction2D(this.ServerPosition + (this.eyes.BodyForward() * 1000f), this.ServerPosition));
    }
示例#8
0
    public override Vector3 GetAimDirection()
    {
        bool    num             = currentTarget != null;
        bool    flag            = num && currentTargetLOS;
        bool    flag2           = Vector3Ex.Distance2D(finalDestination, GetPosition()) > 0.5f;
        Vector3 desiredVelocity = NavAgent.desiredVelocity;

        desiredVelocity.y = 0f;
        desiredVelocity.Normalize();
        if (!num)
        {
            if (flag2)
            {
                return(desiredVelocity);
            }
            return(Vector3.zero);
        }
        if (flag && desiredSpeed != SpeedType.Sprint)
        {
            return((AimOffset(currentTarget) - eyes.position).normalized);
        }
        if (Vector3.Distance(currentTarget.transform.position, base.transform.position) < 5f)
        {
            return((AimOffset(currentTarget) - eyes.position).normalized);
        }
        if (flag2)
        {
            return(desiredVelocity);
        }
        if (aimOverridePosition != Vector3.zero)
        {
            return(Vector3Ex.Direction2D(aimOverridePosition, base.transform.position));
        }
        return(Vector3Ex.Direction2D(base.transform.position + eyes.BodyForward() * 1000f, base.transform.position));
    }
示例#9
0
    public void RPC_WantsPush(BaseEntity.RPCMessage msg)
    {
        BasePlayer basePlayer = msg.player;

        if (basePlayer.isMounted)
        {
            return;
        }
        if (this.RecentlyPushed())
        {
            return;
        }
        if (!base.HasFlag(BaseEntity.Flags.Reserved7) || basePlayer.WaterFactor() > 0.6f && !base.IsFlipped())
        {
            return;
        }
        if (Vector3.Distance(basePlayer.transform.position, base.transform.position) > 5f)
        {
            return;
        }
        if (this.dying)
        {
            return;
        }
        if (Interface.CallHook("CanPushBoat", basePlayer, this) != null)
        {
            return;
        }
        basePlayer.metabolism.calories.Subtract(2f);
        basePlayer.metabolism.SendChangesToClient();
        if (!base.IsFlipped())
        {
            Vector3 vector3  = Vector3Ex.Direction2D(basePlayer.transform.position, base.transform.position);
            Vector3 vector31 = Vector3Ex.Direction2D(basePlayer.transform.position + (basePlayer.eyes.BodyForward() * 3f), basePlayer.transform.position);
            vector31 = ((Vector3.up * 0.1f) + vector31).normalized;
            Vector3 vector32 = base.transform.position + (vector3 * 2f);
            float   single   = 3f;
            float   single1  = Vector3.Dot(base.transform.forward, vector31);
            single = single + Mathf.InverseLerp(0.8f, 1f, single1) * 3f;
            this.myRigidBody.AddForceAtPosition(vector31 * single, vector32, ForceMode.VelocityChange);
        }
        else
        {
            this.myRigidBody.AddRelativeTorque(Vector3.forward * 5f, ForceMode.VelocityChange);
        }
        this.nextPushTime = UnityEngine.Time.realtimeSinceStartup + 1f;
        if (base.HasFlag(BaseEntity.Flags.Reserved5))
        {
            if (this.pushWaterEffect.isValid)
            {
                Effect.server.Run(this.pushWaterEffect.resourcePath, this, 0, Vector3.zero, Vector3.zero, null, false);
                return;
            }
        }
        else if (this.pushLandEffect.isValid)
        {
            Effect.server.Run(this.pushLandEffect.resourcePath, this, 0, Vector3.zero, Vector3.zero, null, false);
        }
    }
示例#10
0
    public CH47FlightTest.HelicopterInputState_t GetAIInputState()
    {
        CH47FlightTest.HelicopterInputState_t helicopterInputStateT = new CH47FlightTest.HelicopterInputState_t();
        Vector3 vector3 = Vector3.Cross(Vector3.up, base.transform.right);
        float   single  = Vector3.Dot(Vector3.Cross(Vector3.up, vector3), Vector3Ex.Direction2D(this.AIMoveTarget.position, base.transform.position));

        helicopterInputStateT.yaw = (single < 0f ? 1f : 0f);
        ref float singlePointer = ref helicopterInputStateT.yaw;
    public void KeeperLookAt(Vector3 pos)
    {
        NPCShopKeeper nPCShopKeeper = GetNPCShopKeeper();

        if (!(nPCShopKeeper == null))
        {
            nPCShopKeeper.SetAimDirection(Vector3Ex.Direction2D(pos, nPCShopKeeper.transform.position));
        }
    }
示例#12
0
    public float AngleToTarget(BaseCombatEntity potentialtarget, bool use2D = false)
    {
        use2D = true;
        Transform centerMuzzle = GetCenterMuzzle();
        Vector3   position     = centerMuzzle.position;
        Vector3   vector       = AimOffset(potentialtarget);
        Vector3   zero         = Vector3.zero;

        return(Vector3.Angle(to: (!use2D) ? (vector - position).normalized : Vector3Ex.Direction2D(vector, position), from: use2D ? centerMuzzle.forward.XZ3D().normalized : centerMuzzle.forward));
    }
    public void KeeperLookAt(Vector3 pos)
    {
        NPCShopKeeper nPCShopKeeper = this.GetNPCShopKeeper();

        if (nPCShopKeeper == null)
        {
            return;
        }
        nPCShopKeeper.SetAimDirection(Vector3Ex.Direction2D(pos, nPCShopKeeper.transform.position));
    }
    public void KeeperLookAt(Vector3 pos)
    {
        NPCShopKeeper npcShopKeeper = this.GetNPCShopKeeper();

        if (Object.op_Equality((Object)npcShopKeeper, (Object)null))
        {
            return;
        }
        npcShopKeeper.SetAimDirection(Vector3Ex.Direction2D(pos, ((Component)npcShopKeeper).get_transform().get_position()));
    }
 public bool DidHitMarker(HitInfo info)
 {
     if (this.xMarker == null)
     {
         return(false);
     }
     if ((double)Vector3.Dot(Vector3Ex.Direction2D(base.transform.position, this.xMarker.transform.position), info.attackNormal) >= 0.3 && Vector3.Distance(this.xMarker.transform.position, info.HitPositionWorld) <= 0.2f)
     {
         return(true);
     }
     return(false);
 }
示例#16
0
 public void SpawnEggsAtPoint(int numEggs, Vector3 pos, Vector3 aimDir, float minDist = 1f, float maxDist = 2f)
 {
     for (int i = 0; i < numEggs; i++)
     {
         Vector3 vector = pos;
         aimDir   = ((!(aimDir == Vector3.zero)) ? AimConeUtil.GetModifiedAimConeDirection(90f, aimDir) : UnityEngine.Random.onUnitSphere);
         vector   = pos + Vector3Ex.Direction2D(pos + aimDir * 10f, pos) * UnityEngine.Random.Range(minDist, maxDist);
         vector.y = TerrainMeta.HeightMap.GetHeight(vector);
         CollectableEasterEgg collectableEasterEgg = GameManager.server.CreateEntity(HuntablePrefab[UnityEngine.Random.Range(0, HuntablePrefab.Length)].resourcePath, vector) as CollectableEasterEgg;
         collectableEasterEgg.Spawn();
         _spawnedEggs.Add(collectableEasterEgg);
     }
 }
    public override void CompletePendingOrder()
    {
        Effect.server.Run(this.buyEffect.resourcePath, base.transform.position, Vector3.up, null, false);
        NPCShopKeeper nPCShopKeeper = this.GetNPCShopKeeper();

        if (nPCShopKeeper)
        {
            nPCShopKeeper.SignalBroadcast(BaseEntity.Signal.Gesture, "victory", null);
            if (this.vend_Player != null)
            {
                nPCShopKeeper.SetAimDirection(Vector3Ex.Direction2D(this.vend_Player.transform.position, nPCShopKeeper.transform.position));
            }
        }
        base.CompletePendingOrder();
    }
    public override void CompletePendingOrder()
    {
        Effect.server.Run(this.buyEffect.resourcePath, ((Component)this).get_transform().get_position(), Vector3.get_up(), (Connection)null, false);
        NPCShopKeeper npcShopKeeper = this.GetNPCShopKeeper();

        if (Object.op_Implicit((Object)npcShopKeeper))
        {
            npcShopKeeper.SignalBroadcast(BaseEntity.Signal.Gesture, "victory", (Connection)null);
            if (Object.op_Inequality((Object)this.vend_Player, (Object)null))
            {
                npcShopKeeper.SetAimDirection(Vector3Ex.Direction2D(((Component)this.vend_Player).get_transform().get_position(), ((Component)npcShopKeeper).get_transform().get_position()));
            }
        }
        base.CompletePendingOrder();
    }
    public override void CompletePendingOrder()
    {
        Effect.server.Run(buyEffect.resourcePath, base.transform.position, Vector3.up);
        NPCShopKeeper nPCShopKeeper = GetNPCShopKeeper();

        if ((bool)nPCShopKeeper)
        {
            nPCShopKeeper.SignalBroadcast(Signal.Gesture, "victory");
            if (vend_Player != null)
            {
                nPCShopKeeper.SetAimDirection(Vector3Ex.Direction2D(vend_Player.transform.position, nPCShopKeeper.transform.position));
            }
        }
        base.CompletePendingOrder();
    }
    public void Greeting()
    {
        List <BasePlayer> list = Pool.GetList <BasePlayer>();

        Vis.Entities <BasePlayer>(base.transform.position, 10f, list, 131072, QueryTriggerInteraction.Collide);
        Vector3    vector3    = base.transform.position;
        BasePlayer basePlayer = null;

        foreach (BasePlayer basePlayer1 in list)
        {
            if (basePlayer1.isClient || basePlayer1.IsNpc || basePlayer1 == this || !basePlayer1.IsVisible(this.eyes.position, Single.PositiveInfinity) || basePlayer1 == this.lastWavedAtPlayer || Vector3.Dot(Vector3Ex.Direction2D(basePlayer1.eyes.position, this.eyes.position), this.initialFacingDir) < 0.2f)
            {
                continue;
            }
            basePlayer = basePlayer1;
            if (basePlayer == null && !list.Contains(this.lastWavedAtPlayer))
            {
                this.lastWavedAtPlayer = null;
            }
            if (basePlayer == null)
            {
                this.SetAimDirection(this.initialFacingDir);
            }
            else
            {
                base.SignalBroadcast(BaseEntity.Signal.Gesture, "wave", null);
                this.SetAimDirection(Vector3Ex.Direction2D(basePlayer.eyes.position, this.eyes.position));
                this.lastWavedAtPlayer = basePlayer;
            }
            Pool.FreeList <BasePlayer>(ref list);
            return;
        }
        if (basePlayer == null && !list.Contains(this.lastWavedAtPlayer))
        {
            this.lastWavedAtPlayer = null;
        }
        if (basePlayer == null)
        {
            this.SetAimDirection(this.initialFacingDir);
        }
        else
        {
            base.SignalBroadcast(BaseEntity.Signal.Gesture, "wave", null);
            this.SetAimDirection(Vector3Ex.Direction2D(basePlayer.eyes.position, this.eyes.position));
            this.lastWavedAtPlayer = basePlayer;
        }
        Pool.FreeList <BasePlayer>(ref list);
    }
示例#21
0
        public override void StateThink(float delta)
        {
            Vector3 orbitCenter = this.GetOrbitCenter();
            CH47HelicopterAIController entity = this.brain.GetEntity();
            Vector3 position1 = entity.GetPosition();
            Vector3 vector3_1 = Vector3Ex.Direction2D(orbitCenter, position1);
            Vector3 vector3_2 = Vector3.Cross(Vector3.get_up(), vector3_1);
            float   num1      = (double)Vector3.Dot(Vector3.Cross(((Component)entity).get_transform().get_right(), Vector3.get_up()), vector3_2) < 0.0 ? -1f : 1f;
            float   num2      = 75f;
            Vector3 vector3_3 = Vector3.op_Addition(Vector3.op_UnaryNegation(vector3_1), Vector3.op_Multiply(Vector3.op_Multiply(vector3_2, num1), 0.6f));
            Vector3 position2 = Vector3.op_Addition(orbitCenter, Vector3.op_Multiply(((Vector3) ref vector3_3).get_normalized(), num2));

            entity.SetMoveTarget(position2);
            entity.SetAimDirection(Vector3Ex.Direction2D(position2, position1));
            base.StateThink(delta);
        }
示例#22
0
        public override void StateThink(float delta)
        {
            Vector3 orbitCenter = this.GetOrbitCenter();
            CH47HelicopterAIController entity = this.brain.GetEntity();
            Vector3 position = entity.GetPosition();
            Vector3 vector3  = Vector3Ex.Direction2D(orbitCenter, position);
            Vector3 vector31 = Vector3.Cross(Vector3.up, vector3);
            float   single   = (Vector3.Dot(Vector3.Cross(entity.transform.right, Vector3.up), vector31) < 0f ? -1f : 1f);
            float   single1  = 75f;
            Vector3 vector32 = -vector3 + ((vector31 * single) * 0.6f);
            Vector3 vector33 = orbitCenter + (vector32.normalized * single1);

            entity.SetMoveTarget(vector33);
            entity.SetAimDirection(Vector3Ex.Direction2D(vector33, position));
            base.StateThink(delta);
        }
示例#23
0
        public override StateStatus StateThink(float delta)
        {
            Vector3 orbitCenter = GetOrbitCenter();
            CH47HelicopterAIController entity = brain.GetEntity();
            Vector3 position   = entity.GetPosition();
            Vector3 vector     = Vector3Ex.Direction2D(orbitCenter, position);
            Vector3 vector2    = Vector3.Cross(Vector3.up, vector);
            float   num        = ((Vector3.Dot(Vector3.Cross(entity.transform.right, Vector3.up), vector2) < 0f) ? (-1f) : 1f);
            float   num2       = 75f;
            Vector3 normalized = (-vector + vector2 * num * 0.6f).normalized;
            Vector3 vector3    = orbitCenter + normalized * num2;

            entity.SetMoveTarget(vector3);
            entity.SetAimDirection(Vector3Ex.Direction2D(vector3, position));
            base.StateThink(delta);
            return(StateStatus.Running);
        }
示例#24
0
    public HelicopterInputState_t GetAIInputState()
    {
        HelicopterInputState_t result = default(HelicopterInputState_t);
        Vector3 vector = Vector3.Cross(Vector3.up, base.transform.right);
        float   num    = Vector3.Dot(Vector3.Cross(Vector3.up, vector), Vector3Ex.Direction2D(AIMoveTarget.position, base.transform.position));

        result.yaw  = ((num < 0f) ? 1f : 0f);
        result.yaw -= ((num > 0f) ? 1f : 0f);
        float num2 = Vector3.Dot(Vector3.up, base.transform.right);

        result.roll  = ((num2 < 0f) ? 1f : 0f);
        result.roll -= ((num2 > 0f) ? 1f : 0f);
        float num3 = Vector3Ex.Distance2D(base.transform.position, AIMoveTarget.position);
        float num4 = Vector3.Dot(vector, Vector3Ex.Direction2D(AIMoveTarget.position, base.transform.position));
        float num5 = Vector3.Dot(Vector3.up, base.transform.forward);

        if (num3 > 10f)
        {
            result.pitch  = ((num4 > 0.8f) ? (-0.25f) : 0f);
            result.pitch -= ((num4 < -0.8f) ? (-0.25f) : 0f);
            if (num5 < -0.35f)
            {
                result.pitch = -1f;
            }
            else if (num5 > 0.35f)
            {
                result.pitch = 1f;
            }
        }
        else if (num5 < -0f)
        {
            result.pitch = -1f;
        }
        else if (num5 > 0f)
        {
            result.pitch = 1f;
        }
        float idealAltitude = GetIdealAltitude();
        float y             = base.transform.position.y;
        float num6          = 0f;

        num6 = ((y > idealAltitude + altitudeTolerance) ? (-1f) : ((y < idealAltitude - altitudeTolerance) ? 1f : ((!(num3 > 20f)) ? 0f : Mathf.Lerp(0f, 1f, num3 / 20f))));
        Debug.Log("desiredThrottle : " + num6);
        result.throttle = num6 * 1f;
        return(result);
    }
    public CH47FlightTest.HelicopterInputState_t GetAIInputState()
    {
        CH47FlightTest.HelicopterInputState_t helicopterInputStateT = new CH47FlightTest.HelicopterInputState_t();
        Vector3 vector3 = Vector3.Cross(Vector3.get_up(), ((Component)this).get_transform().get_right());
        float   num1    = Vector3.Dot(Vector3.Cross(Vector3.get_up(), vector3), Vector3Ex.Direction2D(this.AIMoveTarget.get_position(), ((Component)this).get_transform().get_position()));

        helicopterInputStateT.yaw  = (double)num1 < 0.0 ? 1f : 0.0f;
        helicopterInputStateT.yaw -= (double)num1 > 0.0 ? 1f : 0.0f;
        float num2 = Vector3.Dot(Vector3.get_up(), ((Component)this).get_transform().get_right());

        helicopterInputStateT.roll  = (double)num2 < 0.0 ? 1f : 0.0f;
        helicopterInputStateT.roll -= (double)num2 > 0.0 ? 1f : 0.0f;
        float num3 = Vector3Ex.Distance2D(((Component)this).get_transform().get_position(), this.AIMoveTarget.get_position());
        float num4 = Vector3.Dot(vector3, Vector3Ex.Direction2D(this.AIMoveTarget.get_position(), ((Component)this).get_transform().get_position()));
        float num5 = Vector3.Dot(Vector3.get_up(), ((Component)this).get_transform().get_forward());

        if ((double)num3 > 10.0)
        {
            helicopterInputStateT.pitch  = (double)num4 > 0.800000011920929 ? -0.25f : 0.0f;
            helicopterInputStateT.pitch -= (double)num4 < -0.800000011920929 ? -0.25f : 0.0f;
            if ((double)num5 < -0.349999994039536)
            {
                helicopterInputStateT.pitch = -1f;
            }
            else if ((double)num5 > 0.349999994039536)
            {
                helicopterInputStateT.pitch = 1f;
            }
        }
        else if ((double)num5 < -0.0)
        {
            helicopterInputStateT.pitch = -1f;
        }
        else if ((double)num5 > 0.0)
        {
            helicopterInputStateT.pitch = 1f;
        }
        float idealAltitude = this.GetIdealAltitude();
        float y             = (float)((Component)this).get_transform().get_position().y;
        float num6          = (double)y <= (double)idealAltitude + (double)CH47FlightTest.altitudeTolerance ? ((double)y >= (double)idealAltitude - (double)CH47FlightTest.altitudeTolerance ? ((double)num3 <= 20.0 ? 0.0f : Mathf.Lerp(0.0f, 1f, num3 / 20f)) : 1f) : -1f;

        Debug.Log((object)("desiredThrottle : " + (object)num6));
        helicopterInputStateT.throttle = num6 * 1f;
        return(helicopterInputStateT);
    }
示例#26
0
    public void Call()
    {
        CH47HelicopterAIController component = GameManager.server.CreateEntity(heliPrefab.resourcePath).GetComponent <CH47HelicopterAIController>();

        if ((bool)component)
        {
            Vector3         size    = TerrainMeta.Size;
            CH47LandingZone closest = CH47LandingZone.GetClosest(base.transform.position);
            Vector3         zero    = Vector3.zero;
            zero.y = closest.transform.position.y;
            Vector3 vector   = Vector3Ex.Direction2D(closest.transform.position, zero);
            Vector3 position = closest.transform.position + vector * startDist;
            position.y = closest.transform.position.y;
            component.transform.position = position;
            component.SetLandingTarget(closest.transform.position);
            component.Spawn();
        }
    }
示例#27
0
    public AIMovePoint GetBestRoamPosition(Vector3 start)
    {
        AIInformationZone informationZone = this.GetInformationZone();

        if (informationZone == null)
        {
            return(null);
        }
        float       single      = -1f;
        AIMovePoint aIMovePoint = null;

        foreach (AIMovePoint movePoint in informationZone.movePoints)
        {
            if (!movePoint.transform.parent.gameObject.activeSelf)
            {
                continue;
            }
            float single1 = 0f;
            float single2 = Vector3.Dot(this.eyes.BodyForward(), Vector3Ex.Direction2D(movePoint.transform.position, this.eyes.position));
            single1 = single1 + Mathf.InverseLerp(-1f, 1f, single2) * 100f;
            float single3 = Vector3.Distance(this.ServerPosition, movePoint.transform.position);
            if (movePoint.IsUsedForRoaming())
            {
                continue;
            }
            float single4 = Mathf.Abs(this.ServerPosition.y - movePoint.transform.position.y);
            single1 = single1 + (1f - Mathf.InverseLerp(1f, 10f, single4)) * 100f;
            if (single4 > 5f)
            {
                continue;
            }
            if (single3 > 5f)
            {
                single1 = single1 + (1f - Mathf.InverseLerp(5f, 20f, single3)) * 50f;
            }
            if (single1 <= single)
            {
                continue;
            }
            aIMovePoint = movePoint;
            single      = single1;
        }
        return(aIMovePoint);
    }
示例#28
0
    public override void DoPushAction(BasePlayer player)
    {
        player.metabolism.calories.Subtract(3f);
        player.metabolism.SendChangesToClient();
        Vector3 vector  = Vector3Ex.Direction2D(player.transform.position, base.transform.position);
        Vector3 vector2 = player.eyes.BodyForward();

        vector2.y = 0.25f;
        Vector3 position = base.transform.position + vector * 2f;
        float   num      = rigidBody.mass * 2f;

        rigidBody.AddForceAtPosition(vector2 * num, position, ForceMode.Impulse);
        rigidBody.AddForce(Vector3.up * 3f, ForceMode.Impulse);
        if (rigidBody.IsSleeping())
        {
            rigidBody.WakeUp();
        }
        isPushing = true;
        Invoke(DisablePushing, 0.5f);
    }
示例#29
0
    public void RPC_WantsPush(BaseEntity.RPCMessage msg)
    {
        BasePlayer player = msg.player;

        if (player.isMounted || this.RecentlyPushed() || !this.HasFlag(BaseEntity.Flags.Reserved7) || ((double)player.WaterFactor() > 0.600000023841858 && !this.IsFlipped() || ((double)Vector3.Distance(((Component)player).get_transform().get_position(), ((Component)this).get_transform().get_position()) > 5.0 || this.dying)))
        {
            return;
        }
        player.metabolism.calories.Subtract(2f);
        player.metabolism.SendChangesToClient();
        if (this.IsFlipped())
        {
            this.myRigidBody.AddRelativeTorque(Vector3.op_Multiply(Vector3.get_forward(), 5f), (ForceMode)2);
        }
        else
        {
            Vector3 vector3_1  = Vector3Ex.Direction2D(((Component)player).get_transform().get_position(), ((Component)this).get_transform().get_position());
            Vector3 vector3_2  = Vector3.op_Addition(Vector3.op_Multiply(Vector3.get_up(), 0.1f), Vector3Ex.Direction2D(Vector3.op_Addition(((Component)player).get_transform().get_position(), Vector3.op_Multiply(player.eyes.BodyForward(), 3f)), ((Component)player).get_transform().get_position()));
            Vector3 normalized = ((Vector3) ref vector3_2).get_normalized();
            Vector3 vector3_3  = Vector3.op_Addition(((Component)this).get_transform().get_position(), Vector3.op_Multiply(vector3_1, 2f));
            float   num        = 3f + Mathf.InverseLerp(0.8f, 1f, Vector3.Dot(((Component)this).get_transform().get_forward(), normalized)) * 3f;
            this.myRigidBody.AddForceAtPosition(Vector3.op_Multiply(normalized, num), vector3_3, (ForceMode)2);
        }
        this.nextPushTime = Time.get_realtimeSinceStartup() + 1f;
        if (this.HasFlag(BaseEntity.Flags.Reserved5))
        {
            if (!this.pushWaterEffect.isValid)
            {
                return;
            }
            Effect.server.Run(this.pushWaterEffect.resourcePath, (BaseEntity)this, 0U, Vector3.get_zero(), Vector3.get_zero(), (Connection)null, false);
        }
        else
        {
            if (!this.pushLandEffect.isValid)
            {
                return;
            }
            Effect.server.Run(this.pushLandEffect.resourcePath, (BaseEntity)this, 0U, Vector3.get_zero(), Vector3.get_zero(), (Connection)null, false);
        }
    }
示例#30
0
    public void Call()
    {
        CH47HelicopterAIController component = (CH47HelicopterAIController)((Component)GameManager.server.CreateEntity(this.heliPrefab.resourcePath, (Vector3)null, (Quaternion)null, true)).GetComponent <CH47HelicopterAIController>();

        if (!Object.op_Implicit((Object)component))
        {
            return;
        }
        Vector3         size    = TerrainMeta.Size;
        CH47LandingZone closest = CH47LandingZone.GetClosest(((Component)this).get_transform().get_position());
        Vector3         zero    = Vector3.get_zero();

        zero.y = ((Component)closest).get_transform().get_position().y;
        Vector3 vector3_1 = Vector3Ex.Direction2D(((Component)closest).get_transform().get_position(), zero);
        Vector3 vector3_2 = Vector3.op_Addition(((Component)closest).get_transform().get_position(), Vector3.op_Multiply(vector3_1, this.startDist));

        vector3_2.y = ((Component)closest).get_transform().get_position().y;
        ((Component)component).get_transform().set_position(vector3_2);
        component.SetLandingTarget(((Component)closest).get_transform().get_position());
        component.Spawn();
    }