protected override void OnEventFired(object source, EntityCreationFinishedEventArgs args) { GameObject entity = GameObjectMappable.RetrieveEntity(args.EntityGuid); //Adding a test/demo collider to allow for a clicking volume. BoxCollider collider = entity.AddComponent <BoxCollider>(); collider.isTrigger = true; entity.AddComponent <OnMouseClickedComponent>().OnMouseClicked += (sender, eventArgs) => { if (eventArgs.Type == MouseButtonClickEventArgs.MouseType.Left) { //Check if they are selectable if (!EntityDataFieldMappable.RetrieveEntity(args.EntityGuid).HasBaseObjectFieldFlag(BaseObjectFieldFlags.UNIT_FLAG_NOT_SELECTABLE)) { SendService.SendMessage(new ClientInteractNetworkedObjectRequestPayload(args.EntityGuid, ClientInteractNetworkedObjectRequestPayload.InteractType.Selection)); //Client side prediction of player target LocalPlayerDetails.EntityData.SetFieldValue(EntityObjectField.UNIT_FIELD_TARGET, args.EntityGuid); } } else { //Check if the entity is interactable before sending a packet. if (EntityDataFieldMappable.RetrieveEntity(args.EntityGuid).HasBaseObjectFieldFlag(BaseObjectFieldFlags.UNIT_FLAG_INTERACTABLE)) { SendService.SendMessage(new ClientInteractNetworkedObjectRequestPayload(args.EntityGuid, ClientInteractNetworkedObjectRequestPayload.InteractType.Interaction)); } } }; }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { //If they have a floating name root we should try to set the name. EntityGameObjectDirectory directory = ObjectDirectoryMappable.RetrieveEntity(args.EntityGuid); GameObject nameRoot = directory.GetGameObject(EntityGameObjectDirectory.Type.NameRoot); IUIText text = nameRoot.GetComponent <IUIText>(); if (text == null) { return; } if (NameQueryable.Exists(args.EntityGuid)) { text.Text = NameQueryable.Retrieve(args.EntityGuid); } else { UnityAsyncHelper.UnityMainThreadContext.PostAsync(async() => { string name = await NameQueryable.RetrieveAsync(args.EntityGuid); //Maybe it got deleted before query was done. if (nameRoot == null) { return; } text.Text = NameQueryable.Retrieve(args.EntityGuid); }); } }
protected sealed override void OnEventFired(object source, EntityCreationFinishedEventArgs args) { if (args.EntityGuid.EntityType != EntityType.Player) { return; } OnEntityCreationFinished(args); }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { IEntityDataFieldContainer entityData = EntityDataMappable.RetrieveEntity(args.EntityGuid); GameObjectTemplateModel objectTemplateModel = GameObjectTemplateMappable.RetrieveEntity(args.EntityGuid); //We should generally consider this field static. I cannot even IMAGINE how we'd handle a change to this field on either //client or server. entityData.SetFieldValue(GameObjectField.GAMEOBJECT_TYPE_ID, (int)objectTemplateModel.ObjectType); }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { //Obviously, we only fire the event if the spawned entity is the local player. if (IsSpawningEntityLocalPlayer(args.EntityGuid)) { OnLocalPlayerSpawned?.Invoke(this, new LocalPlayerSpawnedEventArgs(args.EntityGuid)); //Also, once we've encountered the local player spawn we can actually unsubscribe from this event Unsubscribe(); } }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { IMovementData movementData = MovementDataMappable.RetrieveEntity(args.EntityGuid); IEntityDataFieldContainer dataFieldContainer = EntityDataMappable.RetrieveEntity(args.EntityGuid); EntityCreationData data = new EntityCreationData(args.EntityGuid, movementData, EntityDataUpdateFactory.Create(new EntityFieldUpdateCreationContext(dataFieldContainer, dataFieldContainer.DataSetIndicationArray))); var senderContext = new GenericSingleTargetMessageContext <PlayerSelfSpawnEventPayload>(args.EntityGuid, new PlayerSelfSpawnEventPayload(data)); Sender.Send(senderContext); }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { IEntityDataFieldContainer data = EntityDataContainer.RetrieveEntity(args.EntityGuid); UnityAsyncHelper.UnityMainThreadContext.PostAsync(async() => { var characterAppearance = await CharacterService.GetCharacterAppearance(args.EntityGuid.EntityId); //Even if the character has logged off we're just setting an unused data container so it's ok. if (characterAppearance.isSuccessful) { data.SetFieldValue(BaseObjectField.UNIT_FIELD_DISPLAYID, characterAppearance.Result.AvatarModelId); } }); }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { IEntityDataFieldContainer dataContainer = EntityDataMappable.RetrieveEntity(args.EntityGuid); switch (dataContainer.GetEnumFieldValue <GameObjectType>(GameObjectField.GAMEOBJECT_TYPE_ID)) { //Visual doesn't have behaviours case GameObjectType.Visual: return; default: CreateBehaviourComponent(args.EntityGuid); break; } }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { //TODO: left over from bad desigh. }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { }
protected override void OnEventFired(object source, EntityCreationFinishedEventArgs args) { WorldActor.Tell(new CreateEntityActorMessage(args.EntityGuid)); }
protected override void OnEntityCreationFinished(EntityCreationFinishedEventArgs args) { //Right now it's just default. PlayerPersistenceConfigMappable.AddObject(args.EntityGuid, new EntitySaveableConfiguration()); }