public override ImmutableGameState CloneDerived() { ImmutableGameState clone = base.CloneDerived(); clone.TankStates = (TankState[])TankStates.Clone(); clone.BulletStates = (BulletState[])BulletStates.Clone(); return(clone); }
/// <summary> /// Updates the <see cref="state"/> Only modifies the state variable if the /// player has died or respawned since last Update. /// </summary> public void UpdateState() { if (wasNotDead != hb.isNotDead() && hb.isNotDead()) { state = TankStates.Alive; } else if (wasNotDead != hb.isNotDead() && !hb.isNotDead()) { state = TankStates.Dead; } wasNotDead = hb.isNotDead(); }
//To be used later maybe when we need to declare other global variables // that don't belong in above categories #endregion // Start is called before the first frame update void Start() { // Determine which OS the game is being run on, and set controller // mappings accordingly. switch (Application.platform) { case RuntimePlatform.OSXEditor: case RuntimePlatform.OSXPlayer: forwardDrive = (tag == "Player1_obj" ? "forward-drive-1-mac" : "forward-drive-2-mac"); backwardDrive = (tag == "Player1_obj" ? "backward-drive-1-mac" : "backward-drive-2-mac"); reverse = (tag == "Player1_obj" ? "reverse-1-mac" : "reverse-2-mac"); buildButton = (tag == "Player1_obj" ? "build-1-mac" : "build-2-mac"); selectBuildButton = (tag == "Player1_obj" ? "select-1-mac" : "select-2-mac"); submitButton = (tag == "Player1_obj" ? "submit-1-mac" : "submit-2-mac"); break; case RuntimePlatform.WindowsEditor: case RuntimePlatform.WindowsPlayer: forwardDrive = (tag == "Player1_obj" ? "forward-drive-1-win" : "forward-drive-2-win"); backwardDrive = (tag == "Player1_obj" ? "backward-drive-1-win" : "backward-drive-2-win"); reverse = (tag == "Player1_obj" ? "reverse-1-win" : "reverse-2-win"); buildButton = (tag == "Player1_obj" ? "build-1-win" : "build-2-win"); selectBuildButton = (tag == "Player1_obj" ? "select-1-win" : "select-2-win"); submitButton = (tag == "Player1_obj" ? "submit-1-win" : "submit-2-win"); break; default: Debug.LogError("Mappings not setup for operating systems other than Windows or Mac OS"); break; } // Left analog stick is the same mapping on Mac OS and Windows xDrive = (tag == "Player1_obj" ? "x-drive-1" : "x-drive-2"); zDrive = (tag == "Player1_obj" ? "z-drive-1" : "z-drive-2"); // Define movement starting values stickInput = new Vector3(); rb = transform.GetComponent <Rigidbody>(); dir = 1; // Define resource starting values Fluff = 0; Plastic = 0; // Get the reference to the HealthBehavior script hb = GetComponent <HealthBehavior>(); state = TankStates.Alive; wasNotDead = hb.isNotDead(); GetComponent <Rigidbody>().maxAngularVelocity = turnSpeed; }
public void Destroy() { if (state != TankStates.Dead) { (Scene as PlayScene).Score += 50; } state = TankStates.Dead; Explosion explosion = Scene.AddSprite<Explosion>(); explosion.Scale = 3; explosion.BackgroundLayer = BackgroundLayer; explosion.StartExploding(Position, 1, false); Scene.Remove(this); Scene.Remove(gun); }
private void SendStates(bool initial) { var type = initial ? MessageType.InitialTankStates : MessageType.TankStates; var tankStates = new TankStates { Type = type, States = new TankStates.TankState[_tanks.Count] }; var i = 0; foreach (var tank in _tanksList) { var position = tank.transform.position; var firePosition = tank.GetDesiredFirePosition(); var fire = tank.GetFireIsHeld(); var state = new TankStates.TankState { moveX = position.x, moveY = position.z, fire = fire, fireX = firePosition.x, fireY = firePosition.z, respawned = initial || tank.Respawned }; if (state.respawned) { state.rotation = tank.GetRotation(); } tank.Respawned = false; if (initial) { state.publicKey = _publicKeys[i]; } tankStates.States[i] = state; i++; } var sendTo = _publicKeys.Where(p => !p.Equals(_publicKey)).ToList(); sendTo.ForEach(a => Send(a, tankStates)); }
private void SetState() { if (_movementInputValue > 0f) { State = TankStates.Moving; } else { State = TankStates.Idle; } }
private void Awake() { _rigidbody = GetComponent<Rigidbody>(); State = TankStates.Idle; }
void Aim() { gun.Aim(); state = TankStates.Aiming; Speed = 0; Wait(1, Think); }
private void StartClient() { TankInputModule.Instance.Init(state => Send(Env.ServerName, state)); for (var i = 0; i < 15; i++) { Send(i + "." + Env.ServerName, new JoinEvent()); } _client.OnMessage += (src, data) => UnityMainThreadDispatcher.Instance().Enqueue(() => { Env.ServerName = src; switch (GetMessageType(data)) { case MessageType.InitialTankStates: Debug.Log(src); Debug.Log(_tanks); goto case MessageType.TankStates; case MessageType.TankStates: var tanks = TankStates.FromByteArray(data); for (var i = 0; i < tanks.States.Length; i++) { var state = tanks.States[i]; TankManager tank; if (tanks.Type == MessageType.InitialTankStates) { tank = AddTank(state.publicKey); if (state.publicKey.Equals(_publicKey)) { HUDController.Instance.InitHudPlayer(tank.Health); tank.Follow(); } } else { tank = _tanksList[i]; } if (state.respawned) { tank.Respawn( new Vector3(state.moveX, 0, state.moveY), new Vector3(0, state.rotation.Value, 0) ); } else { tank.SetDesiredMovementPosition(new Vector2(state.moveX, state.moveY)); } tank.SetDesiredFirePosition(new Vector3(state.fireX, 0, state.fireY)); tank.SetFireIsHeld(state.fire); } break; case MessageType.ChatMessage: var message = ChatMessage.FromByteArray(data); UIChat.ShowMessage(message.Message); break; case MessageType.JoinEvent: throw new ArgumentOutOfRangeException(); case MessageType.MovementState: throw new ArgumentOutOfRangeException(); default: throw new ArgumentOutOfRangeException(); } }); }