public void TurnOffEffectsOnDeath(NodeRemoveEvent e, TankNode tank)
 {
     tank.moduleVisualEffectObjects.JumpImpactEffect.SetActive(false);
     tank.moduleVisualEffectObjects.ExternalImpactEffect.SetActive(false);
     tank.moduleVisualEffectObjects.FireRingEffect.SetActive(false);
     tank.moduleVisualEffectObjects.ExplosiveMassEffect.SetActive(false);
 }
Exemplo n.º 2
0
        private Transform CreateTankSoundRoot(TankNode tank)
        {
            Transform transform = tank.tankVisualRoot.transform.gameObject.GetComponentsInChildren <TankSoundRootBehaviour>(true)[0].gameObject.transform;

            tank.Entity.AddComponent(new TankSoundRootComponent(transform));
            return(transform);
        }
Exemplo n.º 3
0
    public Tank CreateTank(TankSyncInfo syncInfo, int playerId = 0)
    {
        GamePlayerController player;

        GameManager.AllPlayers.TryGetValue(playerId, out player);

        GameObject obj  = GameObjectPool.instance.Instantiate(unitPrefab);
        TankNode   node = obj.GetComponent <TankNode>();
        Tank       unit = obj.GetComponent <Tank>();

        //TankController ctrl = obj.GetComponent<TankController>();

        ResourceManager.instance.LoadUnitModel(syncInfo.baseInfo.model);  // high time cost
        ResourceManager.instance.AssignModelToUnitNode(syncInfo.baseInfo.model, node);

        unit.m_id = syncInfo.id;
        node.m_id = syncInfo.id;
        AddUnit(unit);

        //unit.m_client = player;
        unit.m_model = syncInfo.baseInfo.model;
        if (localClient.isServer)
        {
            unit.AI = UnitAI.instance;
        }

        unit.Name      = syncInfo.baseInfo.name;
        unit.MaxHpBase = (float)syncInfo.baseInfo.maxHp;
        if (syncInfo.baseInfo.attackSkill.valid)
        {
            AttackAct atk = new AttackAct(syncInfo.baseInfo.attackSkill.name, (float)syncInfo.baseInfo.attackSkill.cd, new AttackValue(AttackValue.NameToType(syncInfo.baseInfo.attackSkill.type), (float)syncInfo.baseInfo.attackSkill.value), (float)syncInfo.baseInfo.attackSkill.vrange);
            atk.CastRange      = (float)syncInfo.baseInfo.attackSkill.range;
            atk.CastHorizontal = syncInfo.baseInfo.attackSkill.horizontal;
            foreach (var ani in syncInfo.baseInfo.attackSkill.animations)
            {
                atk.AddCastAnimation(ModelNode.NameToId(ani));
            }
            atk.ProjectileTemplate      = ResourceManager.instance.LoadProjectile(syncInfo.baseInfo.attackSkill.projectile);
            atk.ProjectileTemplate.fire = "Straight";
            unit.AddActiveSkill(atk);
        }

        node.position      = syncInfo.position;
        node.rotation      = syncInfo.rotation;
        unit.Hp            = syncInfo.hp;
        unit.force.Force   = syncInfo.force;
        unit.MoveSpeedBase = (float)syncInfo.baseInfo.move;
        unit.Revivable     = syncInfo.baseInfo.revivable;
        unit.Fixed         = syncInfo.baseInfo.isfixed;

        for (int i = 0; i < syncInfo.guns.Count; ++i)
        {
            unit.AddGun(i);
            unit.SetGunPosition(i, syncInfo.guns[i].position);
            unit.SetGunRotation(i, syncInfo.guns[i].rotation);
            //syncInfo.guns[i].rotateSpeed;
        }

        return(unit);
    }
Exemplo n.º 4
0
 public void PlayKillSound(KillEvent e, SelfBattleUserNode battleUser, [JoinByUser] TankNode tank, [JoinAll] SingleNode <SoundListenerComponent> listener)
 {
     if (KillTankSoundEffectBehaviour.CreateKillTankSound(tank.killTankSoundEffect.EffectPrefab))
     {
         base.ScheduleEvent <KillTankSoundEffectCreatedEvent>(listener);
     }
 }
Exemplo n.º 5
0
        public void StartPrepareHull(NodeAddedEvent e, TankNode tank, [Context, JoinByTank] HullSkin hullSkin)
        {
            Entity entity = tank.Entity;

            entity.AddComponent <ChassisConfigComponent>();
            base.NewEvent <RequestHullPrefabsEvent>().Attach(entity).Attach(hullSkin.Entity).ScheduleDelayed(0.2f);
        }
Exemplo n.º 6
0
        private void StartReducing(AimingWorkActivationNode weapon, TankNode tank, ICollection <RendererNode> renderers, bool switchShader)
        {
            base.ScheduleEvent(new AddTankShaderEffectEvent(ClientGraphicsConstants.SHAFT_AIMING_EFFECT, false), tank);
            if (switchShader)
            {
                Shader transparentShader = tank.tankShader.TransparentShader;
                this.SetTransparentMode(renderers, tank, transparentShader, -1f);
            }
            if (weapon.Entity.HasComponent <ShaftAimingRendererRecoveringAlphaComponent>())
            {
                weapon.Entity.RemoveComponent <ShaftAimingRendererRecoveringAlphaComponent>();
            }
            float alpha = TankMaterialsUtil.GetAlpha(tank.trackRenderer.Renderer);

            weapon.Entity.AddComponent(new ShaftAimingRendererReducingAlphaComponent(alpha));
            ShaftAimingRendererQueueMapComponent component = new ShaftAimingRendererQueueMapComponent();

            foreach (RendererNode node in renderers)
            {
                foreach (Material material in node.baseRenderer.Renderer.materials)
                {
                    component.QueueMap.Add(material, material.renderQueue);
                    material.renderQueue = weapon.shaftAimingRendererEffect.TransparentRenderQueue;
                }
            }
            weapon.Entity.AddComponent(component);
        }
Exemplo n.º 7
0
        public void SetOpaqueModeOnExitTankActiveState(NodeRemoveEvent evt, TankNode tank, [JoinByTank] ShaftAimingRendererEffectNode weapon, [JoinByTank] ICollection <RendererNode> renderers)
        {
            float alpha = ClientGraphicsConstants.OPAQUE_ALPHA;

            this.SetTransparentMode(renderers, tank, null, alpha);
            base.ScheduleEvent(new StopTankShaderEffectEvent(ClientGraphicsConstants.SHAFT_AIMING_EFFECT, false), tank);
        }
 public void HideFlag(NodeRemoveEvent e, CarriedFlagNode flag1, [JoinByTank] TankNode user, [JoinByUser] FlagIndicatorNode flagIndicator, CarriedFlagNode flag2, [JoinByTank] ICollection <CarriedFlagNode> flags)
 {
     if (flags.Count <= 1)
     {
         flagIndicator.scoreTableFlagIndicator.SetFlagIconActivity(false);
     }
 }
Exemplo n.º 9
0
 public void InitDoubleArmorEffect(NodeAddedEvent evt, [Combine] TankNode tank, SingleNode <SoundListenerBattleStateComponent> soundListener)
 {
     if (!tank.Entity.HasComponent <TankDeadStateComponent>())
     {
         tank.Entity.AddComponent <DoubleArmorEffectReadyComponent>();
     }
 }
Exemplo n.º 10
0
        public void PrepareTargeting(TargetingEvent evt, WeaponNode weapon, [JoinByTank] TankNode tank)
        {
            TargetingData targetingData = evt.TargetingData;
            VerticalSectorsTargetingComponent verticalSectorsTargeting = weapon.verticalSectorsTargeting;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);

            targetingData.Origin       = accessor.GetBarrelOriginWorld();
            targetingData.Dir          = accessor.GetFireDirectionWorld();
            targetingData.FullDistance = verticalSectorsTargeting.WorkDistance;
            targetingData.MaxAngle     = (verticalSectorsTargeting.VAngleUp <= verticalSectorsTargeting.VAngleDown) ? verticalSectorsTargeting.VAngleDown : verticalSectorsTargeting.VAngleUp;
            LinkedList <TargetSector> instance = BattleCache.targetSectors.GetInstance();

            instance.Clear();
            CollectTargetSectorsEvent eventInstance = BattleCache.collectTargetSectorsEvent.GetInstance().Init();

            eventInstance.TargetSectors = instance;
            TargetingCone cone = new TargetingCone {
                VAngleUp   = verticalSectorsTargeting.VAngleUp,
                VAngleDown = verticalSectorsTargeting.VAngleDown,
                HAngle     = verticalSectorsTargeting.HAngle,
                Distance   = verticalSectorsTargeting.WorkDistance
            };

            eventInstance.TargetingCone = cone;
            base.ScheduleEvent(eventInstance, weapon);
            CollectSectorDirectionsEvent event3 = BattleCache.collectSectorDirectionsEvent.GetInstance().Init();

            event3.TargetSectors = instance;
            event3.TargetingData = targetingData;
            base.ScheduleEvent(event3, weapon);
            base.ScheduleEvent(BattleCache.collectTargetsEvent.GetInstance().Init(targetingData), weapon);
            base.ScheduleEvent(BattleCache.targetEvaluateEvent.GetInstance().Init(targetingData), weapon);
        }
Exemplo n.º 11
0
        public void PlayEMPEffect(PlayEMPHitTargetTankEvent e, TankNode tank)
        {
            ParticleSystem system = Object.Instantiate <ParticleSystem>(tank.empHitVisualEffect.EmpHitPrefab, tank.tankSoundRoot.SoundRootTransform.position, tank.tankSoundRoot.SoundRootTransform.rotation, tank.tankSoundRoot.SoundRootTransform.transform);

            system.shape.mesh = tank.baseRenderer.Mesh;
            Object.Destroy(system.gameObject, 2f);
        }
 public void TryMarkTargetLoaded(NodeAddedEvent e, TankNode tank, [JoinByBattle] ICollection <StreamHitNode> streamHits)
 {
     foreach (StreamHitNode node in streamHits)
     {
         this.AddIfMatches(tank, node);
     }
 }
 private void ApplyMoveControl(TankNode tank, MoveControl?moveControl)
 {
     if (moveControl != null)
     {
         this.ApplyMoveControl(tank.chassis, moveControl.Value.MoveAxis, moveControl.Value.TurnAxis);
     }
 }
Exemplo n.º 14
0
        public void UpdateRegionOpacityByDistance(TimeUpdateEvent e, TankNode tank, [JoinAll, Combine] VisibleBonusRegionNode region, [JoinAll] SingleNode <BonusRegionClientConfigComponent> configNode, [JoinAll] SingleNode <RoundActiveStateComponent> round)
        {
            BonusRegionClientConfigComponent component = configNode.component;
            float num = Vector3.Distance(tank.tankColliders.BoundsCollider.transform.position, region.spatialGeometry.Position);

            region.opacityBonusRegion.Opacity = Mathf.Clamp01(1f - ((num - component.maxOpacityRadius) / (component.minOpacityRadius - component.maxOpacityRadius)));
        }
Exemplo n.º 15
0
        private void CollectCommandsAndSend(TankNode tankNode, WeaponNode weaponNode, MoveCommandType commandType)
        {
            TankMovementSenderComponent tankMovementSender = tankNode.tankMovementSender;

            if (((commandType & MoveCommandType.TANK) != MoveCommandType.NONE) && (tankMovementSender.LastSentMovementTime >= PreciseTime.Time))
            {
                commandType ^= MoveCommandType.TANK;
            }
            if (((commandType & MoveCommandType.WEAPON) != MoveCommandType.NONE) && (tankMovementSender.LastSentWeaponRotationTime >= PreciseTime.Time))
            {
                commandType ^= MoveCommandType.WEAPON;
            }
            Movement?nullable  = null;
            float?   nullable3 = null;

            if ((commandType & MoveCommandType.TANK) != MoveCommandType.NONE)
            {
                nullable = new Movement?(this.GetMovement(tankNode));
            }
            if ((commandType & MoveCommandType.WEAPON) != MoveCommandType.NONE)
            {
                nullable3 = new float?(weaponNode.weaponRotationControl.Rotation);
            }
            MoveCommand moveCommand = new MoveCommand {
                Movement              = nullable,
                WeaponRotation        = nullable3,
                TankControlVertical   = this.GetMoveAxis(tankNode),
                TankControlHorizontal = this.GetTurnAxis(tankNode),
                WeaponRotationControl = this.GetWeaponControl(weaponNode),
                ClientTime            = (int)(PreciseTime.Time * 1000.0)
            };

            this.SendCommand(tankNode, moveCommand);
        }
Exemplo n.º 16
0
        private void SendCommand(TankNode tankNode, MoveCommand moveCommand)
        {
            TankMovementSenderComponent tankMovementSender = tankNode.tankMovementSender;
            Movement?movement = moveCommand.Movement;

            if (movement != null)
            {
                if (!PhysicsUtil.ValidateMovement(movement.Value))
                {
                    return;
                }
                tankMovementSender.LastSentMovement     = movement;
                tankMovementSender.LastSentMovementTime = PreciseTime.Time;
                base.Log.Debug("SEND MOVEMENT");
            }
            if (moveCommand.WeaponRotation != null)
            {
                if (!PhysicsUtil.IsValidFloat(moveCommand.WeaponRotation.Value))
                {
                    LoggerProvider.GetLogger(typeof(PhysicsUtil)).ErrorFormat("Invalid WeaponRotation. StackTrace:[{0}]", Environment.StackTrace);
                    return;
                }
                tankMovementSender.LastSentWeaponRotationTime = PreciseTime.Time;
                base.Log.Debug("SEND WEAPON_ROTATION");
            }
            base.ScheduleEvent(new MoveCommandEvent(moveCommand), tankNode.Entity);
            base.Log.Debug("SEND DISCRETE");
        }
Exemplo n.º 17
0
        public void Impact(ImpactEvent evt, TankNode tank)
        {
            Rigidbody rigidbody = tank.rigidbody.Rigidbody;
            Vector3   position  = MathUtil.LocalPositionToWorldPosition(evt.LocalHitPoint, rigidbody.gameObject);

            rigidbody.AddForceAtPositionSafe(evt.Force, position);
        }
Exemplo n.º 18
0
        private bool IsWeaponUnderground(MuzzleLogicAccessor muzzlePoint, int mask, TankNode tank, GameObject[] raycastExclusionGameObjects)
        {
            RaycastHit hit;
            Vector3    center = tank.tankColliders.BoundsCollider.bounds.center;
            Vector3    dir    = muzzlePoint.GetBarrelOriginWorld() - center;

            return(PhysicsUtil.RaycastWithExclusion(center, dir, out hit, dir.magnitude, mask, raycastExclusionGameObjects));
        }
Exemplo n.º 19
0
        private void UpdateGyroscopeData(WeaponGyroscopeNode weaponGyroscope, TankNode tank)
        {
            WeaponGyroscopeRotationComponent weaponGyroscopeRotation = weaponGyroscope.weaponGyroscopeRotation;
            Transform transform = tank.hullInstance.HullInstance.transform;

            weaponGyroscopeRotation.ForwardDir = transform.forward;
            weaponGyroscopeRotation.UpDir      = transform.up;
        }
Exemplo n.º 20
0
        private void PlayLowEnergyFeedback(TankNode tank)
        {
            this.StopSound(tank);
            WeaponFeedbackSoundBehaviour behaviour = Object.Instantiate <WeaponFeedbackSoundBehaviour>(tank.shootingEnergyFeedbackSound.LowEnergyFeedbackSoundAsset);

            tank.shootingEnergyFeedbackSound.Instance = behaviour;
            behaviour.Play(-1f, 1f, true);
        }
Exemplo n.º 21
0
        public void ApplyKickback(FixedUpdateEvent evt, KickbackNode weapon, [JoinByTank] TankNode tank)
        {
            KickbackComponent   kickback = weapon.kickback;
            MuzzleLogicAccessor accessor = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            float deltaTime = evt.DeltaTime;

            VulcanPhysicsUtils.ApplyVulcanForce(((-accessor.GetFireDirectionWorld() * kickback.KickbackForce) * WeaponConstants.WEAPON_FORCE_MULTIPLIER) * deltaTime, tank.rigidbody.Rigidbody, accessor.GetWorldMiddlePosition(), tank.tankFalling, tank.track);
        }
Exemplo n.º 22
0
        public void UpdateWeaponRotation(UpdateEvent e, WeaponNode weapon, [JoinByTank] TankNode tank)
        {
            WeaponVisualRootComponent weaponVisualRoot = weapon.weaponVisualRoot;
            WeaponInstanceComponent   weaponInstance   = weapon.weaponInstance;

            weaponVisualRoot.transform.SetLocalRotationSafe(weaponInstance.WeaponInstance.transform.localRotation);
            weaponVisualRoot.transform.SetLocalPositionSafe(Vector3.zero);
        }
Exemplo n.º 23
0
        public void RequestPrefabs(RequestHullPrefabsEvent e, TankNode tank, HullSkin hullSkin)
        {
            Entity entity = tank.Entity;

            entity.AddComponent <TankCommonPrefabComponent>();
            entity.AddComponent(new AssetReferenceComponent(new AssetReference(entity.GetComponent <TankCommonPrefabComponent>().AssetGuid)));
            entity.AddComponent <AssetRequestComponent>();
        }
Exemplo n.º 24
0
 public void ShowFire(NodeAddedEvent evt, TankNode tank, [JoinByTank] NormalTurretNode turret)
 {
     if (tank.cameraVisibleTrigger.IsVisible)
     {
         float timeToPlay = (float)(tank.tankDeadState.EndDate - Date.Now);
         this.PlayEffect(tank.tankDeathExplosionPrefabs.FirePrefab, tank.tankVisualRoot.transform, tank.mountPoint.MountPoint, timeToPlay, tank);
     }
 }
Exemplo n.º 25
0
 public void ShowExplosion(NodeAddedEvent evt, TankNode tank)
 {
     if (tank.cameraVisibleTrigger.IsVisible)
     {
         float timeToPlay = tank.tankDeadState.EndDate.UnityTime - Time.time;
         this.PlayEffect(tank.tankDeathExplosionPrefabs.ExplosionPrefab, tank.tankVisualRoot.transform, tank.mountPoint.MountPoint, timeToPlay, tank);
     }
 }
Exemplo n.º 26
0
 public void AddTankShaderEffect(AddTankShaderEffectEvent e, TankNode tank)
 {
     if (e.EnableException && tank.tankOpaqueShaderBlockers.Blockers.Contains(e.Key))
     {
         throw new TankShaderEffectAlreadyAddedException(e.Key);
     }
     tank.tankOpaqueShaderBlockers.Blockers.Add(e.Key);
 }
Exemplo n.º 27
0
        public void SelfDetachWeapon(DetachWeaponIfPossibleEvent e, TankNode tank, [JoinByTank] UnblockedWeaponNode weapon)
        {
            Rigidbody rigidbody = this.DetachWeapon(tank, weapon);

            rigidbody.SetVelocitySafe(rigidbody.velocity + new Vector3(Random.Range((float)-1.5f, (float)1.5f), Random.Range((float)2f, (float)3f), Random.Range((float)-1.5f, (float)1.5f)));
            rigidbody.SetAngularVelocitySafe(rigidbody.angularVelocity + Vector3.Scale(Random.onUnitSphere, new Vector3(Random.Range((float)2f, (float)4f), Random.Range((float)0.5f, (float)1f), Random.Range((float)2f, (float)4f))));
            base.ScheduleEvent(new DetachWeaponEvent(rigidbody.velocity, rigidbody.angularVelocity), tank);
        }
Exemplo n.º 28
0
        public void AddMessageLog(FlagEvent e, FlagNode flag, [JoinByTank] TankNode tank2Team, [JoinByTeam] TeamNode tankTeam, FlagNode flag2User, [JoinByTank] TankNode tank2User, [JoinByUser] UserNode user, FlagNode flag2Team, [JoinByTeam] TeamNode flagTeam, [JoinAll] SingleNode <SelfBattleUserComponent> selfUser, [JoinByTeam] Optional <TeamNode> selfTeam, [JoinAll] CombatLogNode combatLog)
        {
            CombatLogCTFMessagesComponent combatLogCTFMessages = combatLog.combatLogCTFMessages;
            string newValue    = GetOwnFlag(selfTeam, flagTeam, combatLogCTFMessages);
            Color  teamColor   = CombatEventLogUtil.GetTeamColor(tankTeam.colorInBattle.TeamColor, combatLog.combatEventLog);
            string messageText = CombatEventLogUtil.ApplyPlaceholder(GetMessage(e, flag.Entity, combatLogCTFMessages).Replace(CombatLogCTFMessagesComponent.OWN, newValue), "{user}", user.userRank.Rank, user.userUid.Uid, teamColor);

            combatLog.uiLog.UILog.AddMessage(messageText);
        }
Exemplo n.º 29
0
        private void StopSound(TankNode tank)
        {
            WeaponFeedbackSoundBehaviour instance = tank.shootingEnergyFeedbackSound.Instance;

            if (instance)
            {
                instance.GetComponent <WeaponEnergyFeedbackFadeBehaviour>().enabled = true;
            }
        }
Exemplo n.º 30
0
        public void StartKickback(BaseShotEvent evt, KickbackNode weapon, [JoinByTank] TankNode tank)
        {
            KickbackComponent   kickback      = weapon.kickback;
            MuzzleLogicAccessor accessor      = new MuzzleLogicAccessor(weapon.muzzlePoint, weapon.weaponInstance);
            Vector3             vector        = -accessor.GetFireDirectionWorld() * kickback.KickbackForce;
            Vector3             worldPosition = accessor.GetWorldPosition();

            tank.rigidbody.Rigidbody.AddForceAtPositionSafe(vector * WeaponConstants.WEAPON_FORCE_MULTIPLIER, worldPosition);
        }