public void FireGun(Vector3 targetPos, float aimCone, bool isCoax)
    {
        Transform transforms = (isCoax ? this.coaxMuzzle : this.topTurretMuzzle);
        Vector3   vector3    = transforms.transform.position - (transforms.forward * 0.25f);
        Vector3   vector31   = targetPos - vector3;
        Vector3   modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(aimCone, vector31.normalized, true);

        targetPos = vector3 + (modifiedAimConeDirection * 300f);
        List <RaycastHit> list = Facepunch.Pool.GetList <RaycastHit>();

        GamePhysics.TraceAll(new Ray(vector3, modifiedAimConeDirection), 0f, list, 300f, 1219701521, QueryTriggerInteraction.UseGlobal);
        for (int i = 0; i < list.Count; i++)
        {
            RaycastHit item   = list[i];
            BaseEntity entity = item.GetEntity();
            if (!(entity != null) || !(entity == this) && !entity.EqualNetID(this))
            {
                BaseCombatEntity baseCombatEntity = entity as BaseCombatEntity;
                if (baseCombatEntity != null)
                {
                    this.ApplyDamage(baseCombatEntity, item.point, modifiedAimConeDirection);
                }
                if (!(entity != null) || entity.ShouldBlockProjectiles())
                {
                    targetPos = item.point;
                    break;
                }
            }
        }
        base.ClientRPC <bool, Vector3>(null, "CLIENT_FireGun", isCoax, targetPos);
        Facepunch.Pool.FreeList <RaycastHit>(ref list);
    }
        // CONSTRUCTOR ----------------------------------------------------------------------------
        public ButtonEntity( string pLabel, Scene pScene, GamePhysics pGamePhysics, TextureInfo pTextureInfo, Vector2i pTileIndex2D )
            : base(pScene, pGamePhysics, pTextureInfo, pTileIndex2D, null)
        {
            halfWidth = Width / 2.0f;
            halfHeight = Height / 2.0f;
            labelOffset = new Vector2(0.1f, 0.25f);
            this.setPivot(0.5f,0.5f);

            font = Crystallography.UI.FontManager.Instance.GetInGame("Bariol", 25);
            map = Crystallography.UI.FontManager.Instance.GetMap( font );
            if ( pLabel != null ) {
                label = new Label( pLabel, map );
                label.Pivot = new Vector2(0.15f, 0.25f );
                label.Scale = new Vector2(1.0f/this.Width,1.0f/this.Height);
            }

            this.getNode().AddChild(label);

            labelOffset = Vector2.Zero;
            status = NORMAL;
            _onToggle = false;
            _pressed = false;
            _initialized = false;

            #if DEBUG
            Console.WriteLine(GetType().ToString() + " created" );
            #endif
        }
Esempio n. 3
0
    public void FireBullet()
    {
        float   damageAmount     = 10f;
        Vector3 vector3          = Vector3.op_Subtraction(((Component)this.muzzlePos).get_transform().get_position(), Vector3.op_Multiply(this.muzzlePos.get_forward(), 0.25f));
        Vector3 aimConeDirection = AimConeUtil.GetModifiedAimConeDirection((float)this.aimCone, ((Component)this.muzzlePos).get_transform().get_forward(), true);

        this.ClientRPC <Vector3>((Connection)null, "CLIENT_FireGun", Vector3.op_Addition(vector3, Vector3.op_Multiply(aimConeDirection, 300f)));
        List <RaycastHit> list = (List <RaycastHit>)Pool.GetList <RaycastHit>();

        GamePhysics.TraceAll(new Ray(vector3, aimConeDirection), 0.1f, list, 300f, 1219701521, (QueryTriggerInteraction)0);
        for (int index = 0; index < list.Count; ++index)
        {
            RaycastHit hit    = list[index];
            BaseEntity entity = hit.GetEntity();
            if (!Object.op_Inequality((Object)entity, (Object)null) || !Object.op_Equality((Object)entity, (Object)this) && !entity.EqualNetID((BaseNetworkable)this))
            {
                if (Object.op_Inequality((Object)(entity as BaseCombatEntity), (Object)null))
                {
                    HitInfo info = new HitInfo((BaseEntity)this, entity, DamageType.Bullet, damageAmount, ((RaycastHit) ref hit).get_point());
                    entity.OnAttacked(info);
                    if (entity is BasePlayer || entity is BaseNpc)
                    {
                        Effect.server.ImpactEffect(new HitInfo()
                        {
                            HitPositionWorld = ((RaycastHit) ref hit).get_point(),
                            HitNormalWorld   = Vector3.op_UnaryNegation(((RaycastHit) ref hit).get_normal()),
                            HitMaterial      = StringPool.Get("Flesh")
                        });
Esempio n. 4
0
    public override void Spawn()
    {
        base.Spawn();
        SetFlag(Flags.Reserved2, true);
        SetFlag(Flags.Reserved1, StaticTop);
        if (!base.IsTop)
        {
            return;
        }
        List <RaycastHit> obj = Pool.GetList <RaycastHit>();

        GamePhysics.TraceAll(new Ray(base.transform.position, -Vector3.up), 0f, obj, 200f, 262144, QueryTriggerInteraction.Collide);
        foreach (RaycastHit item in obj)
        {
            if (item.transform.parent != null)
            {
                ElevatorStatic component = item.transform.parent.GetComponent <ElevatorStatic>();
                if (component != null && component != this && component.isServer)
                {
                    floorPositions.Add(component);
                }
            }
        }
        Pool.FreeList(ref obj);
        floorPositions.Reverse();
        base.Floor = floorPositions.Count;
        for (int i = 0; i < floorPositions.Count; i++)
        {
            floorPositions[i].SetFloorDetails(i, this);
        }
    }
    public void UpdateTargetVisibility()
    {
        RaycastHit raycastHit;

        if (!this.HasTarget())
        {
            return;
        }
        Vector3    vector3    = this._target.transform.position;
        BasePlayer basePlayer = this._target as BasePlayer;

        if (basePlayer)
        {
            vector3 = basePlayer.eyes.position;
        }
        bool    flag     = false;
        float   single   = Vector3.Distance(vector3, this.muzzleTransform.position);
        Vector3 vector31 = (vector3 - this.muzzleTransform.position).normalized;

        if (single < this.maxTargetRange && this.InFiringArc(this._target) && GamePhysics.Trace(new Ray(this.muzzleTransform.position + (vector31 * 6f), vector31), 0f, out raycastHit, single * 1.1f, 1218652417, QueryTriggerInteraction.UseGlobal) && raycastHit.collider.gameObject.ToBaseEntity() == this._target)
        {
            flag = true;
        }
        if (flag)
        {
            this.lastSeenTargetTime = UnityEngine.Time.realtimeSinceStartup;
        }
        this.targetVisible = flag;
    }
Esempio n. 6
0
 public override void ServerProjectileHit(HitInfo info)
 {
     for (int index = 0; index < this.numToCreateChances; ++index)
     {
         if (this.createOnImpact.isValid && (double)Random.Range(0.0f, 1f) < (double)this.createOnImpactChance)
         {
             BaseEntity entity = GameManager.server.CreateEntity(this.createOnImpact.resourcePath, (Vector3)null, (Quaternion)null, true);
             if (Object.op_Implicit((Object)entity))
             {
                 ((Component)entity).get_transform().set_position(Vector3.op_Addition(info.HitPositionWorld, Vector3.op_Multiply(info.HitNormalWorld, 0.1f)));
                 ((Component)entity).get_transform().set_rotation(Quaternion.LookRotation(info.HitNormalWorld));
                 if (!GamePhysics.LineOfSight(info.HitPositionWorld, ((Component)entity).get_transform().get_position(), 2162688, 0.0f))
                 {
                     ((Component)entity).get_transform().set_position(info.HitPositionWorld);
                 }
                 entity.Spawn();
                 if ((double)this.spreadAngle > 0.0)
                 {
                     Vector3 aimConeDirection = AimConeUtil.GetModifiedAimConeDirection(this.spreadAngle, info.HitNormalWorld, true);
                     entity.SetVelocity(Vector3.op_Multiply(aimConeDirection, Random.Range(1f, 3f)));
                 }
             }
         }
     }
     base.ServerProjectileHit(info);
 }
    public bool PlayerVisible(BasePlayer ply)
    {
        RaycastHit raycastHit;
        object     obj = Interface.CallHook("CanHelicopterTarget", this, ply);

        if (obj as bool)
        {
            return((bool)obj);
        }
        Vector3 vector3 = ply.eyes.position;

        if (TOD_Sky.Instance.IsNight && Vector3.Distance(vector3, this.interestZoneOrigin) > 40f)
        {
            return(false);
        }
        Vector3 vector31 = base.transform.position - (Vector3.up * 6f);
        float   single   = Vector3.Distance(vector3, vector31);
        Vector3 vector32 = (vector3 - vector31).normalized;

        if (GamePhysics.Trace(new Ray(vector31 + (vector32 * 5f), vector32), 0f, out raycastHit, single * 1.1f, 1218652417, QueryTriggerInteraction.UseGlobal) && raycastHit.collider.gameObject.ToBaseEntity() == ply)
        {
            return(true);
        }
        return(false);
    }
Esempio n. 8
0
    public void FireGun(Vector3 targetPos, float aimCone, bool isCoax)
    {
        Transform transform  = (isCoax ? coaxMuzzle : topTurretMuzzle);
        Vector3   vector     = transform.transform.position - transform.forward * 0.25f;
        Vector3   normalized = (targetPos - vector).normalized;
        Vector3   modifiedAimConeDirection = AimConeUtil.GetModifiedAimConeDirection(aimCone, normalized);

        targetPos = vector + modifiedAimConeDirection * 300f;
        List <RaycastHit> obj = Facepunch.Pool.GetList <RaycastHit>();

        GamePhysics.TraceAll(new Ray(vector, modifiedAimConeDirection), 0f, obj, 300f, 1219701521);
        for (int i = 0; i < obj.Count; i++)
        {
            RaycastHit hit    = obj[i];
            BaseEntity entity = RaycastHitEx.GetEntity(hit);
            if (!(entity != null) || (!(entity == this) && !entity.EqualNetID(this)))
            {
                BaseCombatEntity baseCombatEntity = entity as BaseCombatEntity;
                if (baseCombatEntity != null)
                {
                    ApplyDamage(baseCombatEntity, hit.point, modifiedAimConeDirection);
                }
                if (!(entity != null) || entity.ShouldBlockProjectiles())
                {
                    targetPos = hit.point;
                    break;
                }
            }
        }
        ClientRPC(null, "CLIENT_FireGun", isCoax, targetPos);
        Facepunch.Pool.FreeList(ref obj);
    }
        // helper procedure for BoxEntities
        public void BoxColliders <T>(Vector3 position, Vector3 halfExtents, Quaternion orientation, List <T> list, int layerMask = -1, QueryTriggerInteraction triggerInteraction = QueryTriggerInteraction.Collide)
            where T : Collider
        {
            layerMask = GamePhysics.HandleTerrainCollision(position, layerMask);
            int num = Physics.OverlapBoxNonAlloc(position, halfExtents, colBuffer, orientation, layerMask, triggerInteraction);

            if (num >= (int)colBuffer.Length)
            {
                Debug.LogWarning("Vis query is exceeding collider buffer length.");
            }
            for (int i = 0; i < num; i++)
            {
                T t = (T)(colBuffer[i] as T);
                colBuffer[i] = null;
                if (t != null)
                {
                    if (!t.transform.CompareTag("MeshColliderBatch"))
                    {
                        list.Add(t);
                    }
                    else
                    {
                        t.transform.GetComponent <MeshColliderBatch>().LookupColliders <T>(position, 100f, list);
                    }
                }
            }
        }
Esempio n. 10
0
    public static bool TestNoClipping(BasePlayer ply, Vector3 oldPos, Vector3 newPos, bool sphereCast, float deltaTime = 0f)
    {
        ply.vehiclePauseTime = Mathf.Max(0f, ply.vehiclePauseTime - deltaTime);
        int num = 429990145;

        if (ply.vehiclePauseTime > 0f)
        {
            num &= -8193;
        }
        float      noclip_backtracking = ConVar.AntiHack.noclip_backtracking;
        float      noclip_margin       = ConVar.AntiHack.noclip_margin;
        float      radius     = ply.GetRadius();
        float      height     = ply.GetHeight(true);
        Vector3    normalized = (newPos - oldPos).normalized;
        float      num2       = radius - noclip_margin;
        Vector3    vector     = oldPos + new Vector3(0f, height - radius, 0f) - normalized * noclip_backtracking;
        float      magnitude  = (newPos + new Vector3(0f, height - radius, 0f) - vector).magnitude;
        RaycastHit hitInfo    = default(RaycastHit);
        bool       flag       = UnityEngine.Physics.Raycast(new Ray(vector, normalized), out hitInfo, magnitude + num2, num, QueryTriggerInteraction.Ignore);

        if (!flag && sphereCast)
        {
            flag = UnityEngine.Physics.SphereCast(new Ray(vector, normalized), num2, out hitInfo, magnitude, num, QueryTriggerInteraction.Ignore);
        }
        if (flag)
        {
            return(GamePhysics.Verify(hitInfo));
        }
        return(false);
    }
Esempio n. 11
0
    // Uhodí do země a udělí poškození
    private IEnumerator GroundSmash()
    {
        const float TIME_TO_HIT = 1f;
        const float TIME_TO_END = 1.58f;

        transform.rotation = GamePhysics.RotateTowardsTarget(transform.rotation, transform.position, _target.position, 1);
        float timePlaying = 0;

        _animator.SetTrigger("GroundSmash");

        while (timePlaying <= TIME_TO_HIT)
        {
            timePlaying += Time.fixedDeltaTime;
            yield return(new WaitForFixedUpdate());
        }

        SphericalHitDetection(_groundSmashRadius, GetHandsCenterPosition());
        while (timePlaying <= TIME_TO_END)
        {
            timePlaying += Time.fixedDeltaTime;
            yield return(new WaitForFixedUpdate());
        }

        StartNextAction();
    }
Esempio n. 12
0
    public static void TraceAllUnordered(
        Ray ray,
        float radius,
        List <RaycastHit> hits,
        float maxDistance = float.PositiveInfinity,
        int layerMask     = -5,
        QueryTriggerInteraction triggerInteraction = 0)
    {
        int num = (double)radius != 0.0 ? Physics.SphereCastNonAlloc(ray, radius, GamePhysics.hitBuffer, maxDistance, layerMask, triggerInteraction) : Physics.RaycastNonAlloc(ray, GamePhysics.hitBuffer, maxDistance, layerMask, triggerInteraction);

        if (num == 0)
        {
            return;
        }
        if (num >= GamePhysics.hitBuffer.Length)
        {
            Debug.LogWarning((object)"Physics query is exceeding hit buffer length.");
        }
        for (int index = 0; index < num; ++index)
        {
            RaycastHit hitInfo = GamePhysics.hitBuffer[index];
            if (GamePhysics.Verify(hitInfo))
            {
                hits.Add(hitInfo);
            }
        }
    }
Esempio n. 13
0
    public static void Colliders <T>(
        Vector3 position,
        float radius,
        List <T> list,
        int layerMask = -1,
        QueryTriggerInteraction triggerInteraction = 2)
        where T : Collider
    {
        layerMask = GamePhysics.HandleTerrainCollision(position, layerMask);
        int num = Physics.OverlapSphereNonAlloc(position, radius, Vis.colBuffer, layerMask, triggerInteraction);

        if (num >= Vis.colBuffer.Length)
        {
            Debug.LogWarning((object)"Vis query is exceeding collider buffer length.");
        }
        for (int index = 0; index < num; ++index)
        {
            T obj = Vis.colBuffer[index] as T;
            Vis.colBuffer[index] = (Collider)null;
            if (!Object.op_Equality((Object)(object)obj, (Object)null) && ((Collider)(object)obj).get_enabled())
            {
                if (((Component)((Component)(object)obj).get_transform()).CompareTag("MeshColliderBatch"))
                {
                    ((MeshColliderBatch)((Component)((Component)(object)obj).get_transform()).GetComponent <MeshColliderBatch>()).LookupColliders <T>(position, radius, list);
                }
                else
                {
                    list.Add(obj);
                }
            }
        }
    }
Esempio n. 14
0
 public static void OverlapCapsule <T>(Vector3 point0, Vector3 point1, float radius, List <T> list, int layerMask = -5, QueryTriggerInteraction triggerInteraction = 1)
     where T : Component
 {
     layerMask = GamePhysics.HandleTerrainCollision(point0, layerMask);
     layerMask = GamePhysics.HandleTerrainCollision(point1, layerMask);
     GamePhysics.BufferToList <T>(UnityEngine.Physics.OverlapCapsuleNonAlloc(point0, point1, radius, GamePhysics.colBuffer, layerMask, triggerInteraction), list);
 }
Esempio n. 15
0
        public GameLogic(LevelAttempt levelAttempt)
        {
            this.levelAttempt = levelAttempt;

            gamePhysics = new GamePhysics(levelAttempt.Level);
            collisions  = new Collisions(levelAttempt.Level);
        }
Esempio n. 16
0
 public void UpdateTargetVisibility()
 {
     if (HasTarget())
     {
         Vector3    position   = _target.transform.position;
         BasePlayer basePlayer = _target as BasePlayer;
         if ((bool)basePlayer)
         {
             position = basePlayer.eyes.position;
         }
         bool       flag       = false;
         float      num        = Vector3.Distance(position, muzzleTransform.position);
         Vector3    normalized = (position - muzzleTransform.position).normalized;
         RaycastHit hitInfo;
         if (num < maxTargetRange && InFiringArc(_target) && GamePhysics.Trace(new Ray(muzzleTransform.position + normalized * 6f, normalized), 0f, out hitInfo, num * 1.1f, 1218652417) && GameObjectEx.ToBaseEntity(hitInfo.collider.gameObject) == _target)
         {
             flag = true;
         }
         if (flag)
         {
             lastSeenTargetTime = UnityEngine.Time.realtimeSinceStartup;
         }
         targetVisible = flag;
     }
 }
Esempio n. 17
0
        /**移动**/

        protected override void Move()
        {
            if (StatuController != null && StatuController.GetAnimator() != null &&
                StatuController.GetAnimator().speed <= 0)
            {
                return;
            }
            if (_isSynMove)
            {
                MoveByDir();
            }
            if (GetMeVo() != null && !GetMeVo().IsHitRecover&& (IsFloating() || GetMeVo().FloatingYSpeed != 0f || GetMeVo().FloatingXSpeed != 0f))
            {
                var     meVo   = GetMeVo();
                Vector3 pos    = Vector3.zero;
                float   ySpeed = 0f;
                GamePhysics.CalculateParabolic(GetMePos(), meVo.FloatingXSpeed, meVo.FloatingYSpeed, meVo.AtkerDirection, GamePhysics.Gravity, out pos, out ySpeed);
                Me.Pos(pos.x, pos.y, pos.z);
                meVo.FloatingYSpeed = ySpeed;
                if (!IsFloating())                                    //不再浮空的话把属性清0
                {
                    if (StatuController.CurrentStatu == Status.HURT4) //击飞状态中
                    {
                        StatuController.SetStatu(Status.HURTDOWN);
                    }
                    meVo.FloatingXSpeed = 0f;
                    meVo.FloatingYSpeed = 0f;
                    meVo.AtkerDirection = 0;
                }
            }
            if (IsWalking)
            {
                MoveForward();
            }
        }
Esempio n. 18
0
    // Určuje jestli je nepřítel na zemi
    private bool IsGrounded()
    {
        bool grounded = GamePhysics.IsGroundedRayCast(transform.position, _groundOffset, _rayOverhead, _groundLayer, out float yCorrection);

        transform.position = new Vector3(transform.position.x, transform.position.y + yCorrection, transform.position.z);
        return(grounded);
    }
Esempio n. 19
0
    public static void Colliders <T>(OBB bounds, List <T> list, int layerMask = -1, QueryTriggerInteraction triggerInteraction = 2)
        where T : Collider
    {
        layerMask = GamePhysics.HandleTerrainCollision(bounds.position, layerMask);
        int num = Physics.OverlapBoxNonAlloc(bounds.position, bounds.extents, Vis.colBuffer, bounds.rotation, layerMask, triggerInteraction);

        if (num >= (int)Vis.colBuffer.Length)
        {
            Debug.LogWarning("Vis query is exceeding collider buffer length.");
        }
        for (int i = 0; i < num; i++)
        {
            T t = (T)(Vis.colBuffer[i] as T);
            Vis.colBuffer[i] = null;
            if (!(t == null) && t.enabled)
            {
                if (!t.transform.CompareTag("MeshColliderBatch"))
                {
                    list.Add(t);
                }
                else
                {
                    t.transform.GetComponent <MeshColliderBatch>().LookupColliders <T>(bounds, list);
                }
            }
        }
    }
Esempio n. 20
0
    // Provede útok, během kterého skočí do vzduchu;
    private IEnumerator JumpSmash()
    {
        const float TIME_TO_HIT = 1.3f;
        const float TIME_TO_END = 1.83f;

        Vector3 initialPosition = transform.position;
        Vector3 location        = _target.position;
        float   maxProgress     = Mathf.Max(((_target.position - transform.position).magnitude - _landDistanceOffset) / (_target.position - transform.position).magnitude, _minLandDistanceProgress);

        transform.rotation = GamePhysics.RotateTowardsTarget(transform.rotation, transform.position, _target.position, 1);
        float timePlaying = 0, progress;

        _animator.SetTrigger("JumpSmash");

        while (timePlaying <= TIME_TO_HIT)
        {
            timePlaying += Time.fixedDeltaTime;
            progress     = (timePlaying / TIME_TO_HIT) * maxProgress;

            transform.position = GamePhysics.MoveTowardsPositionProgressivelyNonYClamped(initialPosition, location, progress);
            yield return(new WaitForFixedUpdate());
        }

        SphericalHitDetection(_jumpSmashRadius, GetBossCenterPosition());

        while (timePlaying <= TIME_TO_END)
        {
            timePlaying += Time.fixedDeltaTime;
            yield return(new WaitForFixedUpdate());
        }

        StartNextAction();
    }
Esempio n. 21
0
    public static bool TestNoClipping(BasePlayer ply, Vector3 oldPos, Vector3 newPos, bool sphereCast, float deltaTime = 0f)
    {
        ply.vehiclePauseTime = Mathf.Max(0f, ply.vehiclePauseTime - deltaTime);
        int num = 429990145;

        if (ply.vehiclePauseTime > 0f)
        {
            num &= -8193;
        }
        float   noclipBacktracking = ConVar.AntiHack.noclip_backtracking;
        float   noclipMargin       = ConVar.AntiHack.noclip_margin;
        float   radius             = ply.GetRadius();
        float   height             = ply.GetHeight(true);
        Vector3 vector3            = newPos - oldPos;
        Vector3 vector31           = vector3.normalized;
        float   single             = radius - noclipMargin;
        Vector3 vector32           = (oldPos + new Vector3(0f, height - radius, 0f)) - (vector31 * noclipBacktracking);

        vector3 = (newPos + new Vector3(0f, height - radius, 0f)) - vector32;
        float      single1    = vector3.magnitude;
        RaycastHit raycastHit = new RaycastHit();
        bool       flag       = UnityEngine.Physics.Raycast(new Ray(vector32, vector31), out raycastHit, single1 + single, num, QueryTriggerInteraction.Ignore);

        if (!flag & sphereCast)
        {
            flag = UnityEngine.Physics.SphereCast(new Ray(vector32, vector31), single, out raycastHit, single1, num, QueryTriggerInteraction.Ignore);
        }
        if (!flag)
        {
            return(false);
        }
        return(GamePhysics.Verify(raycastHit));
    }
Esempio n. 22
0
 public static bool CanPlayerUseWires(BasePlayer player)
 {
     if (!player.CanBuild())
     {
         return(false);
     }
     return(!GamePhysics.CheckSphere(player.eyes.position, 0.1f, 536870912, QueryTriggerInteraction.Collide));
 }
Esempio n. 23
0
 public static bool LineOfSight(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, Vector3 p4, int layerMask, float padding = 0f)
 {
     if (!GamePhysics.LineOfSightInternal(p0, p1, layerMask, padding, 0f) || !GamePhysics.LineOfSightInternal(p1, p2, layerMask, 0f, 0f) || !GamePhysics.LineOfSightInternal(p2, p3, layerMask, 0f, 0f))
     {
         return(false);
     }
     return(GamePhysics.LineOfSightInternal(p3, p4, layerMask, 0f, padding));
 }
Esempio n. 24
0
 public bool PlayerBehind(BasePlayer player)
 {
     if (Vector3.Dot(base.transform.forward, (player.transform.position - base.transform.position).normalized) <= -0.3f)
     {
         return(GamePhysics.LineOfSight(player.eyes.position, EyePoint.position, 2162688));
     }
     return(false);
 }
 public static bool IsInArea(
     Vector3 position,
     Quaternion rotation,
     Bounds bounds,
     LayerMask layerMask)
 {
     return(GamePhysics.CheckOBB(new OBB(position, rotation, bounds), ((LayerMask) ref layerMask).get_value(), (QueryTriggerInteraction)0));
 }
    public void SpawnOnRay(Ray ray, int mask, float length = 0.5f, Vector3 forward = null, float speed = 0f)
    {
        RaycastHit raycastHit;

        if (!GamePhysics.Trace(ray, 0f, out raycastHit, length, mask, QueryTriggerInteraction.UseGlobal))
        {
            Effect.client.Run(this.DefaultEffect.resourcePath, ray.origin, ray.direction * -1f, forward);
            if (this.DefaultSoundDefinition != null)
            {
                this.PlaySound(this.DefaultSoundDefinition, raycastHit.point, speed);
            }
            return;
        }
        WaterLevel.WaterInfo waterInfo = WaterLevel.GetWaterInfo(ray.origin);
        if (waterInfo.isValid)
        {
            Vector3 vector3 = new Vector3(ray.origin.x, WaterSystem.GetHeight(ray.origin), ray.origin.z);
            MaterialEffect.Entry waterEntry = this.GetWaterEntry();
            if (this.submergedWaterDepth > 0f && waterInfo.currentDepth >= this.submergedWaterDepth)
            {
                waterEntry = this.submergedWaterEntry;
            }
            else if (this.deepWaterDepth > 0f && waterInfo.currentDepth >= this.deepWaterDepth)
            {
                waterEntry = this.deepWaterEntry;
            }
            if (waterEntry == null)
            {
                return;
            }
            Effect.client.Run(waterEntry.Effect.resourcePath, vector3, Vector3.up, new Vector3());
            if (waterEntry.SoundDefinition != null)
            {
                this.PlaySound(waterEntry.SoundDefinition, vector3, speed);
            }
            return;
        }
        PhysicMaterial materialAt = raycastHit.collider.GetMaterialAt(raycastHit.point);

        MaterialEffect.Entry entryFromMaterial = this.GetEntryFromMaterial(materialAt);
        if (entryFromMaterial != null)
        {
            Effect.client.Run(entryFromMaterial.Effect.resourcePath, raycastHit.point, raycastHit.normal, forward);
            if (entryFromMaterial.SoundDefinition != null)
            {
                this.PlaySound(entryFromMaterial.SoundDefinition, raycastHit.point, speed);
            }
        }
        else
        {
            Effect.client.Run(this.DefaultEffect.resourcePath, raycastHit.point, raycastHit.normal, forward);
            if (this.DefaultSoundDefinition != null)
            {
                this.PlaySound(this.DefaultSoundDefinition, raycastHit.point, speed);
                return;
            }
        }
    }
Esempio n. 27
0
    public void ServerUse_Strike()
    {
        BasePlayer ownerPlayer = GetOwnerPlayer();

        if (ownerPlayer == null)
        {
            return;
        }
        Vector3 position = ownerPlayer.eyes.position;
        Vector3 vector   = ownerPlayer.eyes.BodyForward();

        for (int i = 0; i < 2; i++)
        {
            List <RaycastHit> obj = Facepunch.Pool.GetList <RaycastHit>();
            GamePhysics.TraceAll(new Ray(position - vector * ((i == 0) ? 0f : 0.2f), vector), (i == 0) ? 0f : attackRadius, obj, effectiveRange + 0.2f, 1219701521);
            bool flag = false;
            for (int j = 0; j < obj.Count; j++)
            {
                RaycastHit hit    = obj[j];
                BaseEntity entity = RaycastHitEx.GetEntity(hit);
                if (entity == null || (entity != null && (entity == ownerPlayer || entity.EqualNetID(ownerPlayer))) || (entity != null && entity.isClient) || entity.Categorize() == ownerPlayer.Categorize())
                {
                    continue;
                }
                float num = 0f;
                foreach (DamageTypeEntry damageType in damageTypes)
                {
                    num += damageType.amount;
                }
                entity.OnAttacked(new HitInfo(ownerPlayer, entity, DamageType.Slash, num * npcDamageScale));
                HitInfo obj2 = Facepunch.Pool.Get <HitInfo>();
                obj2.HitEntity        = entity;
                obj2.HitPositionWorld = hit.point;
                obj2.HitNormalWorld   = -vector;
                if (entity is BaseNpc || entity is BasePlayer)
                {
                    obj2.HitMaterial = StringPool.Get("Flesh");
                }
                else
                {
                    obj2.HitMaterial = StringPool.Get((RaycastHitEx.GetCollider(hit).sharedMaterial != null) ? AssetNameCache.GetName(RaycastHitEx.GetCollider(hit).sharedMaterial) : "generic");
                }
                ServerUse_OnHit(obj2);
                Effect.server.ImpactEffect(obj2);
                Facepunch.Pool.Free(ref obj2);
                flag = true;
                if (!(entity != null) || entity.ShouldBlockProjectiles())
                {
                    break;
                }
            }
            Facepunch.Pool.FreeList(ref obj);
            if (flag)
            {
                break;
            }
        }
    }
Esempio n. 28
0
        void TriggerUse(BasePlayer player, InputState input)
        {
            Quaternion currentRot;

            TryGetPlayerView(player, out currentRot);
            var hitpoints = Physics.RaycastAll(new Ray(player.eyes.position, currentRot * Vector3.forward), 5f, useLayer, QueryTriggerInteraction.Collide);

            GamePhysics.Sort(hitpoints);
            for (var i = 0; i < hitpoints.Length; i++)
            {
                var hit    = hitpoints[i];
                var target = hit.collider;
                if (target.name == "Terrain")
                {
                    Interface.Oxide.CallHook("OnUseTerrain", player, target);
                    return;
                }

                if (target.name == "MeshColliderBatch")
                {
                    target = RaycastHitEx.GetCollider(hit);
                }

                BaseEntity        targetEntity;
                ResourceDispenser targetDispenser;

                if ((targetEntity = target.GetComponentInParent <BasePlayer>()) != null)
                {
                    Interface.Oxide.CallHook("OnUsePlayer", player, targetEntity);
                    break;
                }
                else if ((targetEntity = target.GetComponentInParent <BaseNpc>()) != null)
                {
                    Interface.Oxide.CallHook("OnUseNPC", player, targetEntity);
                    break;
                }
                else if ((targetEntity = target.GetComponentInParent <BuildingBlock>()) != null)
                {
                    Interface.Oxide.CallHook("OnUseBuilding", player, targetEntity);
                    break;
                }
                else if ((targetEntity = target.GetComponentInParent <SleepingBag>()) != null)
                {
                    Interface.Oxide.CallHook("OnUseSleepingBag", player, targetEntity);
                    break;
                }
                else if ((targetEntity = target.GetComponentInParent <PlantEntity>()) != null)
                {
                    Interface.Oxide.CallHook("OnUsePlant", player, targetEntity);
                    break;
                }
                else if ((targetDispenser = target.GetComponentInParent <ResourceDispenser>()) != null)
                {
                    Interface.Oxide.CallHook("OnUseResource", player, targetDispenser);
                    break;
                }
            }
        }
Esempio n. 29
0
    // Posune nepřátele blíž k cílové pozici a otočí podle směru pohybu
    public float MoveToTargetAndRotate()
    {
        float   distance;
        Vector3 positionDelta = GamePhysics.MoveTowardsPositionNonYClamped(transform.position, _target.position, _movementSpeed, out distance);

        transform.position += positionDelta;
        transform.rotation  = GamePhysics.RotateTowardsMovementDirection(transform.rotation, positionDelta, _rotationSpeed);
        return(distance);
    }
Esempio n. 30
0
 public static bool CheckSphere(
     Vector3 position,
     float radius,
     int layerMask = -5,
     QueryTriggerInteraction triggerInteraction = 0)
 {
     layerMask = GamePhysics.HandleTerrainCollision(position, layerMask);
     return(Physics.CheckSphere(position, radius, layerMask, triggerInteraction));
 }
Esempio n. 31
0
 public static void OverlapOBB(
     OBB obb,
     List <Collider> list,
     int layerMask = -5,
     QueryTriggerInteraction triggerInteraction = 1)
 {
     layerMask = GamePhysics.HandleTerrainCollision((Vector3)obb.position, layerMask);
     GamePhysics.BufferToList(Physics.OverlapBoxNonAlloc((Vector3)obb.position, (Vector3)obb.extents, GamePhysics.colBuffer, (Quaternion)obb.rotation, layerMask, triggerInteraction), list);
 }