Beispiel #1
0
    // [StructLayout(LayoutKind.Explicit)]
    // struct MyMessage {
    //   [FieldOffset(0)]
    //   public int Foo;
    //
    //   [FieldOffset(4)]
    //   public int Bar;
    //
    //   [FieldOffset(5)]
    //   public ulong Data;
    // }

//
//
// struct MessageHeader {
//
// }

    void PrintPosition(CharacterData *cd)
    {
        // CharacterData empty = default;
        // *cd = empty;
        // Debug.Log(wo->Transform.Positon);
        // Debug.Log(wo->Type);
    }
        public void Swap(Character newCharacter, bool isMetalSonic = false)
        {
            Handle = GetCharacterGameObject(PlayerID);

            // Reset character size before swap
            Rescale(1f);

            // Store original CharacterData
            CharacterData *oldCharacterData = CharacterData;

            NextAction = PlayerAction.ReturnToNormal;

            // Set Metal Sonic flag
            _gameHandler.IsMetalSonic = isMetalSonic;

            // Change main function of the game object
            Handle->executor = _characterMainFunctions[newCharacter];

            // Delete old character
            if (newCharacter == Character.Gamma)
            {
                Destructor((IntPtr)Handle);
            }

            // Set new character ID
            CharacterID = newCharacter;

            // Set action to intialize
            Info->Action = (byte)PlayerObjectAction.Initialize;

            // Cancel special states of the character
            Info->Status &= ~(Status.Attack | Status.Ball | Status.LightDash | Status.Unknown3);

            // Free player collision
            Info->CollisionInfo = null;

            // Load new character
            Executor((IntPtr)Handle);

            if (CharacterID == Character.Eggman)
            {
                Handle->displayer = _eggmanDisplay.DisplayFunction;
            }

            // Copy CharacterData stuff from old character
            CharacterData->Powerups       = oldCharacterData->Powerups;
            CharacterData->JumpTime       = oldCharacterData->JumpTime;
            CharacterData->UnderwaterTime = oldCharacterData->UnderwaterTime;
            CharacterData->PathDistance   = oldCharacterData->PathDistance;
            CharacterData->Speed          = oldCharacterData->Speed;
            CharacterData->HeldObject     = oldCharacterData->HeldObject;

            // Load special player animations
            if (newCharacter != Character.Eggman && newCharacter != Character.Tikal)
            {
                LoadSpecialPlayerAnimations(newCharacter);
            }
        }