internal override void Update(BehaviorUpdateContext context) { switch (_toppleState) { case ToppleState.Toppling: { // TODO: InitialAccelPercent var deltaAngle = 0.3f * (float)context.Time.DeltaTime.TotalSeconds; _toppleAngle += deltaAngle; context.GameObject.SetRotation(context.GameObject.Rotation * Quaternion.CreateFromYawPitchRoll(deltaAngle, 0, 0)); if (_toppleAngle > MathUtility.PiOver2) { _toppleAngle = MathUtility.PiOver2; if (_moduleData.BounceVelocityPercent.IsZero) { _toppleState = ToppleState.Toppled; KillObject(context); } else { _moduleData.BounceFX?.Value.Execute(context); //_toppleState = ToppleState.Bouncing1Up; // TODO } } // TODO break; } } }
internal ToppleUpdate(GameObject gameObject, ToppleUpdateModuleData moduleData) { _gameObject = gameObject; _moduleData = moduleData; _toppleState = ToppleState.NotToppled; }
internal override void Load(BinaryReader reader) { var version = reader.ReadByte(); if (version != 1) { throw new InvalidDataException(); } base.Load(reader); _toppleSpeed = reader.ReadSingle(); _toppleDirection = reader.ReadVector3(); var unknownUint2 = reader.ReadUInt32(); if (unknownUint2 != 0) { throw new InvalidDataException(); } _toppleState = reader.ReadUInt32AsEnum <ToppleState>(); _toppleAngle = reader.ReadSingle(); var unknownFloat6 = reader.ReadSingle(); var unknownUint4 = reader.ReadUInt32(); if (unknownUint4 != 0) { throw new InvalidDataException(); } var unknownUint5 = reader.ReadUInt32(); if (unknownUint5 != 0) { throw new InvalidDataException(); } var unknownBool6 = reader.ReadBooleanChecked(); if (unknownBool6) { throw new InvalidDataException(); } var unknownUint6 = reader.ReadUInt32(); }
private void StartTopple(BehaviorUpdateContext context) { _moduleData.ToppleFX?.Value.Execute(context); CreateStump(context); if (_moduleData.KillWhenStartToppling) { KillObject(context); return; } _toppleState = ToppleState.Toppling; // TODO: Is this the right time to do this? context.GameObject.ModelConditionFlags.Set(ModelConditionFlag.Toppled, true); }
private void StartTopple() { _moduleData.ToppleFX?.Value.Execute( new FXListExecutionContext( _gameObject.Rotation, _gameObject.Translation, _gameObject.GameContext)); CreateStump(); if (_moduleData.KillWhenStartToppling) { KillObject(); return; } _toppleState = ToppleState.Toppling; // TODO: Is this the right time to do this? _gameObject.ModelConditionFlags.Set(ModelConditionFlag.Toppled, true); }
internal ToppleUpdate(ToppleUpdateModuleData moduleData) { _moduleData = moduleData; _toppleState = ToppleState.NotToppled; }