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 }
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") });
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; }
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); }
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); } } } }
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); }
// 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(); }
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); } } }
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); } } } }
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); }
public GameLogic(LevelAttempt levelAttempt) { this.levelAttempt = levelAttempt; gamePhysics = new GamePhysics(levelAttempt.Level); collisions = new Collisions(levelAttempt.Level); }
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; } }
/**移动**/ 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(); } }
// 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); }
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); } } } }
// 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(); }
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)); }
public static bool CanPlayerUseWires(BasePlayer player) { if (!player.CanBuild()) { return(false); } return(!GamePhysics.CheckSphere(player.eyes.position, 0.1f, 536870912, QueryTriggerInteraction.Collide)); }
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)); }
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; } } }
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; } } }
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; } } }
// 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); }
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)); }
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); }