private void Granade(DudeMoveState dude) { if (dude.AttackCooldown * dude.AttackSpeed > 1) { dude.AttackCooldown = 0; dude.WeaponEffect.Execute(dude.transform.position); } else { return; } if (dude.CubeStorage < dude.MaximumStorage * 0.8f) { return; } _fx.ScreenShake(0.1f, 0.25f); dude.CubeStorage = 0; var dir = (dude.Cursor.position - dude.Tr.position).normalized; var granade = _pool.SpawnFromPool("Granade", dude.Tr.position + dir, Quaternion.identity); granade.GetComponent <ProjectileBehaviour>().Shoot((dir + Vector3.up * 0.5f).normalized, dude.GranadeForce); dude.Rb.AddForce(-dir * dude.RecoilForce, ForceMode.Impulse); }
private void Move(DudeMoveState dude, float hori, float vert) { dude.Rb.AddForce(new Vector3(hori, 0, vert).normalized *(dude.Grounded ? dude.MoveSpeed : dude.MoveSpeed * 0.33f) * Time.deltaTime, ForceMode.VelocityChange); }
private void Succ(DudeMoveState dude) { if (dude.CubeStorage > dude.MaximumStorage || dude.SuccCooldown * dude.SuccSpeed < 1) { return; } dude.SuccCooldown = 0; RaycastHit hit; if (Physics.SphereCast(dude.transform.position + Vector3.up, 1.5f, (dude.Cursor.position - dude.transform.position).normalized, out hit, (dude.Cursor.position - dude.transform.position).magnitude, ~((1 << 10) & (1 << 11)))) { var selection = Selections.SphereSelection(World.Instance, hit.point.ToVector3Int(), dude.SuccArea); var tiles = selection.SolidTiles.ToList(); var cubes = tiles.Count; for (int i = 0; i < cubes; i++) { _pool.SpawnFromPool("SuccCube", tiles[i].Position + Vector3.one / 2, Quaternion.identity); } dude.CubeStorage += cubes; selection.DeleteAll(); } }
private void Shoot(DudeMoveState dude) { if (dude.AttackCooldown * dude.AttackSpeed > 1) { dude.AttackCooldown = 0; dude.WeaponEffect.Execute(dude.transform.position); } else { return; } if (dude.CubeStorage < dude.MinimumStorage) { return; } dude.CubeStorage--; _fx.ScreenShake(0.1f, 0.25f); var cursorDir = (dude.Cursor.position - dude.transform.position).normalized; var target = dude.Cursor.position; RaycastHit hit; if (Physics.SphereCast(dude.transform.position, dude.AimAssistRadius, cursorDir, out hit, 100f, 1 << 10)) { target = hit.transform.position; } var dir = ((target - dude.Tr.position + (dude.Cursor.position - dude.Tr.position)).normalized + Random.insideUnitSphere * dude.SpreadAmount).normalized; var projectile = _pool.SpawnFromPool("Projectile", dude.Tr.position + dir, Quaternion.identity); projectile.GetComponent <ProjectileBehaviour>().Shoot(dir, dude.ShootForce); dude.Rb.AddForce(-dir * dude.RecoilForce, ForceMode.Impulse); }
private void Jump(DudeMoveState dude) { var momentum = dude.Rb.velocity * 4; dude.Rb.AddForce(momentum.x, dude.JumpForce, momentum.z, ForceMode.Impulse); }
private void ApplyGravity(DudeMoveState dude) { var gravity = Physics.gravity * (dude.GravityScale + 5); dude.Rb.AddForce(gravity, ForceMode.Acceleration); }
private void Start() { _rb = GetComponentInParent <Rigidbody>(); _dude = GetComponentInParent <DudeMoveState>(); }