/// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary> protected override void OnPostCreate(bool loaded) { base.OnPostCreate(loaded); if (EntitySystemWorld.Instance.IsServer() || EntitySystemWorld.Instance.IsSingle()) { const string regionTypeName = "ManualInfluenceRegion"; InfluenceRegionType regionType = (InfluenceRegionType)EntityTypes.Instance.GetByName( regionTypeName); if (regionType == null) { regionType = (InfluenceRegionType)EntityTypes.Instance.ManualCreateType( regionTypeName, EntityTypes.Instance.GetClassInfoByEntityClassName("InfluenceRegion")); regionType.NetworkType = EntityNetworkTypes.ServerOnly; } region = (InfluenceRegion)Entities.Instance.Create(regionType, Map.Instance); region.ShapeType = Region.ShapeTypes.Capsule; region.DistanceFunction = InfluenceRegion.DistanceFunctionType.NormalFadeAxisX; region.SetTransform(Position, Rotation, InfluenceRegionScale); region.PostCreate(); region.AllowSave = false; region.EditorSelectable = false; bladesMotor = PhysicsModel.GetMotor("bladesMotor") as GearedMotor; } SubscribeToTickEvent(); }
private void MohiOff() { //turning off some stuff when you are getting out of helli GearedMotor main = PhysicsModel.GetMotor("hellimain") as GearedMotor; GearedMotor back = PhysicsModel.GetMotor("helliback") as GearedMotor; main.Enabled = false; back.Enabled = false; if (rotorSoundChannel != null) { rotorSoundChannel.Stop(); rotorSoundChannel = null; } }
void TickIntellect() { //horizontalMotor { float throttle = 0; throttle += Intellect.GetControlKeyStrength(GameControlKeys.Left); throttle -= Intellect.GetControlKeyStrength(GameControlKeys.Right); GearedMotor motor = PhysicsModel.GetMotor("horizontalMotor") as GearedMotor; if (motor != null) { motor.Throttle = throttle; } } //gibbetMotor { ServoMotor motor = PhysicsModel.GetMotor("gibbetMotor") as ServoMotor; if (motor != null) { Radian needAngle = motor.DesiredAngle; needAngle += Intellect.GetControlKeyStrength(GameControlKeys.Forward) * .004f; needAngle -= Intellect.GetControlKeyStrength(GameControlKeys.Backward) * .004f; MathFunctions.Clamp(ref needAngle, new Degree(-20.0f).InRadians(), new Degree(40.0f).InRadians()); motor.DesiredAngle = needAngle; } } //Change player LookDirection at rotation PlayerIntellect intellect = Intellect as PlayerIntellect; if (intellect != null) { Vec3 lookVector = intellect.LookDirection.GetVector(); lookVector *= OldRotation.GetInverse(); lookVector *= Rotation; intellect.LookDirection = SphereDir.FromVector(lookVector); } }
/// <summary>Overridden from <see cref="Engine.EntitySystem.Entity.OnPostCreate(Boolean)"/>.</summary> protected override void OnPostCreate( bool loaded ) { base.OnPostCreate( loaded ); if( EntitySystemWorld.Instance.IsServer() || EntitySystemWorld.Instance.IsSingle() ) { const string regionTypeName = "ManualInfluenceRegion"; InfluenceRegionType regionType = (InfluenceRegionType)EntityTypes.Instance.GetByName( regionTypeName ); if( regionType == null ) { regionType = (InfluenceRegionType)EntityTypes.Instance.ManualCreateType( regionTypeName, EntityTypes.Instance.GetClassInfoByEntityClassName( "InfluenceRegion" ) ); regionType.NetworkType = EntityNetworkTypes.ServerOnly; } region = (InfluenceRegion)Entities.Instance.Create( regionType, Map.Instance ); region.ShapeType = Region.ShapeTypes.Capsule; region.DistanceFunction = InfluenceRegion.DistanceFunctionType.NormalFadeAxisX; region.SetTransform( Position, Rotation, InfluenceRegionScale ); region.PostCreate(); region.AllowSave = false; region.EditorSelectable = false; bladesMotor = PhysicsModel.GetMotor( "bladesMotor" ) as GearedMotor; } AddTimer(); UpdateParticlesForceCoefficient( 0 ); }
private void TickIntellect() { ShiftBooster(); HelliOn = Intellect != null && Intellect.IsActive(); // GUItest(); //finding motors GearedMotor main = PhysicsModel.GetMotor("hellimain") as GearedMotor; GearedMotor back = PhysicsModel.GetMotor("helliback") as GearedMotor; if (HelliOn) { main.Enabled = true; back.Enabled = true; } //engine force + sound pitch control if (Intellect.IsControlKeyPressed(GameControlKeys.Forward)) { force += forceadd; enpitch += 0.02f; } else if (Intellect.IsControlKeyPressed(GameControlKeys.Backward)) { dec = true; force -= forceadd; enpitch -= 0.02f; } else { dec = false; enpitch -= 0.01f; if (force > 50) { force -= forceadd; } if (force < 50) { force += forceadd; } } MathFunctions.Clamp(ref force, 0.1f, 100 + Type.MaxForce); MathFunctions.Clamp(ref enpitch, 0.8f, 1.3f); //update helli channel position and pitch if (rotorSoundChannel != null) { //update channel rotorSoundChannel.Pitch = enpitch; rotorSoundChannel.Volume = 1; rotorSoundChannel.Position = Position; //rotorSoundChannel.MinDistance = 10; } //end of engine force + sound pitch control //Forces //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //start helli Pitch if (Intellect.IsControlKeyPressed(GameControlKeys.Arrow_Up) || Intellect.IsControlKeyPressed(GameControlKeys.Arrow_Down)) { float AUp = Intellect.GetControlKeyStrength(GameControlKeys.Arrow_Up) / 2; float ADown = Intellect.GetControlKeyStrength(GameControlKeys.Arrow_Down) / 2; Hpitch += (AUp - ADown); MathFunctions.Clamp(ref Hpitch, -10, 10); HelliBody.AddForce(ForceType.GlobalAtLocalPos, TickDelta, HelliBody.Rotation * new Vec3(0, 0, Hpitch / 2) * HelliBody.Mass, new Vec3(-2, 0, 0)); } else { Hpitch = 0; } //end of helli pitch //start helli Z turn if (Intellect.IsControlKeyPressed(GameControlKeys.Right) || Intellect.IsControlKeyPressed(GameControlKeys.Left)) { float right = Intellect.GetControlKeyStrength(GameControlKeys.Right) / 2; float left = Intellect.GetControlKeyStrength(GameControlKeys.Left) / 2; TrunZ += (left - right); MathFunctions.Clamp(ref TrunZ, -10, 10); HelliBody.AddForce(ForceType.GlobalTorque, TickDelta, HelliBody.Rotation * new Vec3(0, 0, TrunZ) * HelliBody.Mass, Vec3.Zero); } else { TrunZ = 0; } //end of helli Z turn //start helli X turn if (Intellect.IsControlKeyPressed(GameControlKeys.Arrow_Right) || Intellect.IsControlKeyPressed(GameControlKeys.Arrow_Left)) { float rightX = Intellect.GetControlKeyStrength(GameControlKeys.Arrow_Right) / 2; float leftX = Intellect.GetControlKeyStrength(GameControlKeys.Arrow_Left) / 2; TrunX += (rightX - leftX); MathFunctions.Clamp(ref TrunX, -10, 10); HelliBody.AddForce(ForceType.GlobalTorque, TickDelta, HelliBody.Rotation * new Vec3(TrunX / 5, 0, 0) * HelliBody.Mass, Vec3.Zero); } else { TrunX = 0; } //end of helli X turn ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //start of adding force MathFunctions.Clamp(ref force, 0.1f, 100); //anti gravity when helli is not decending if (dec == false) { HelliBody.AddForce(ForceType.GlobalAtLocalPos, TickDelta, new Vec3(0, 0, 2) * HelliBody.Mass, Vec3.Zero); } //if Max Alt is not reached add helli motor force if (GetRealAlt() < Type.MaxAlt) { HelliBody.AddForce(ForceType.GlobalAtLocalPos, TickDelta, HelliBody.Rotation * 2 * new Vec3(0, 0, force / 7) * HelliBody.Mass, Vec3.Zero); } //dampings HelliBody.AngularDamping = 1.5f; HelliBody.LinearDamping = 0.4f; //another anti gravity force if (HelliBody.LinearVelocity.Z < 0) { HelliBody.AddForce(ForceType.GlobalAtLocalPos, TickDelta, HelliBody.Rotation * new Vec3(0, 0, -HelliBody.LinearVelocity.Z) * HelliBody.Mass, Vec3.Zero); } }