Пример #1
0
 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;
     }
     }
 }
Пример #2
0
        internal ToppleUpdate(GameObject gameObject, ToppleUpdateModuleData moduleData)
        {
            _gameObject = gameObject;
            _moduleData = moduleData;

            _toppleState = ToppleState.NotToppled;
        }
Пример #3
0
        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();
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        internal ToppleUpdate(ToppleUpdateModuleData moduleData)
        {
            _moduleData = moduleData;

            _toppleState = ToppleState.NotToppled;
        }