Created
November 8, 2021 15:53
-
-
Save danielmahon/375041e09c997bfaf3b537706872baed to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// system example | |
public class SystemManager : MonoBehaviour { | |
[SerializeField] List<CoreSystem> _systems; | |
// Start is called before the first frame update | |
void Start() { | |
foreach (var system in _systems) { | |
system.Init(); | |
} | |
} | |
void FixedUpdate() { | |
foreach (var system in _systems) { | |
system.OnFixedUpdate(); | |
} | |
} | |
// public T? GetSystem<T>() where T : CoreSystem { | |
// return _systems.Find(system => system is T) as T; | |
// } | |
} | |
[CreateAssetMenu(fileName = "PlayerSystem", menuName = "Systems/PlayerSystem", order = 1)] | |
public class PlayerSystem : CoreSystem { | |
// ... | |
List<PlayerController> _players = new List<PlayerController>(); | |
public override void Init() { | |
SpawnPlayer(); | |
} | |
public override void OnFixedUpdate() { | |
foreach (var player in _players.ToArray()) { | |
player.OnFixedUpdate(); | |
} | |
} | |
void SpawnPlayer() { | |
// spawn player | |
var player = Instantiate(_playerPrefab, _spawnPosition, Quaternion.identity); | |
player.Init(_colorSystem.PaddleColor); | |
_players.Add(player); | |
} | |
} | |
public class PlayerController : MonoBehaviour { | |
[SerializeField] List<Ability> _abilities; | |
// ... | |
public void Init(Color paddleColor) { | |
_rigidbody = GetComponent<Rigidbody>(); | |
_renderer.material.SetColor("_Color", paddleColor); | |
} | |
public void OnFixedUpdate() { | |
var movement = _moveSpeed * Time.fixedDeltaTime * _movementInput; | |
foreach (var modifier in _abilities.OfType<IMovementModifier>()) { | |
movement = modifier.ModifyMovement(movement); | |
} | |
var nextPosition = transform.position + movement; | |
nextPosition.x = Mathf.Clamp(nextPosition.x, -_xMovementRange, _xMovementRange); | |
// update movement | |
_rigidbody.MovePosition(nextPosition); | |
} | |
public void OnMove(InputAction.CallbackContext context) { | |
var moveInput = context.ReadValue<Vector2>().normalized; | |
_movementInput = new Vector3(moveInput.x, 0, 0); | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment