void APlayerCharacter::EnergyRemove() { if (EnergyInt > 0.0001) { EnergyInt -= EnergyDamageSpeed; UpdateEnergy(EnergyInt); } }
void APlayerCharacter::EnergyAdd() { if (EnergyInt < 0.5) { EnergyInt += EnergyRegenerateSpeed; UpdateEnergy(EnergyInt); } }
bool ProcessDot11Frame(UCHAR *frameBuf, ULONG frameBufSize ) { PDOT11RFC1042ENCAP pWlanHeader = (PDOT11RFC1042ENCAP)frameBuf; if (pWlanHeader->MacHeader.FrameControl.Type == FRAME_DATA && pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_DATA ) { static USHORT CurRecvSeqNo = 0xffff; int fTargetFrame = 0; // Try to send some ACK if ( (memcmp( MACAddress.Address, pWlanHeader->MacHeader.Address1.Address, MAC_ADDRESS_LENGTH) == 0) ) { DataFrameAck11(pWlanHeader, frameBufSize); UpdateLastRate(); PlotText ( "mac event", "receive a packet - seq (%d) size (%d) rate (%u).................................", pWlanHeader->MacHeader.SequenceControl.SequenceNumber, frameBufSize, lastRate ); fTargetFrame = 1; } if ( fTargetFrame || ETH_IS_BROADCAST (pWlanHeader->MacHeader.Address1.Address) ) { UpdateLastRate(); nDataPacketRcvCnt ++; if (CurRecvSeqNo != pWlanHeader->MacHeader.SequenceControl.SequenceNumber && pWlanHeader->MacHeader.SequenceControl.FragmentNumber == 0 ) { if ( frameBufSize < sizeof(DOT11RFC1042ENCAP)) { return S_OK; } CurRecvSeqNo = pWlanHeader->MacHeader.SequenceControl.SequenceNumber; MAC_ADDRESS destAddr; MAC_ADDRESS srcAddr; UINT16 Type; ULONG Offset; PETHERNET_HEADER pEthernetHeader; /* ad hoc mode destAddr = pWlanHeader->MacHeader.Address1; srcAddr = pWlanHeader->MacHeader.Address2; lastMACDst = pWlanHeader->MacHeader.Address1; lastMACSrc = pWlanHeader->MacHeader.Address2; lastMACBssid = pWlanHeader->MacHeader.Address3; */ /* AP mode */ if ( OpMode == CLIENT_MODE ) { destAddr = pWlanHeader->MacHeader.Address1; srcAddr = pWlanHeader->MacHeader.Address3; Type = pWlanHeader->Type; lastMACDst = pWlanHeader->MacHeader.Address1; lastMACSrc = pWlanHeader->MacHeader.Address3; lastMACBssid = pWlanHeader->MacHeader.Address2; } else { destAddr = pWlanHeader->MacHeader.Address1; srcAddr = pWlanHeader->MacHeader.Address2; Type = pWlanHeader->Type; lastMACDst = pWlanHeader->MacHeader.Address1; lastMACSrc = pWlanHeader->MacHeader.Address2; lastMACBssid = pWlanHeader->MacHeader.Address3; } Offset = sizeof(DOT11RFC1042ENCAP) - sizeof(ETHERNET_HEADER); pEthernetHeader = (PETHERNET_HEADER)(frameBuf + Offset); pEthernetHeader->destAddr = destAddr; pEthernetHeader->srcAddr = srcAddr; pEthernetHeader->Type = Type; PlotText ( "mac event", "Indicate packet seq (%d)", CurRecvSeqNo ); HRESULT hr; hr = SoraUIndicateRxPacket(frameBuf + Offset, frameBufSize - Offset - 4 ); // remove FCS UpdateEnergy (); return SUCCEEDED(hr); } } else { nInterferenceCnt ++; } } else if (pWlanHeader->MacHeader.FrameControl.Type == FRAME_CTRL && pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_ACK) { if (LastPACKETxID) { if (memcmp(MACAddress.Address, pWlanHeader->MacHeader.Address1.Address, MAC_ADDRESS_LENGTH)) return true; struct PACKETxID* ptid; ptid = LastPACKETxID; LastPACKETxID = NULL; nAckRcvCnt ++; if ( ptid->m_packet ) { SoraUCompleteTxPacket(ptid->m_packet, STATUS_SUCCESS); } debug_printf("Complete Send Packet: [%08x], TxID: [%d], TX succeed\n", ptid->m_packet, ptid->m_tid.m_txid[0]); switch(ptid->m_status) { case PACKET_CAN_TX: FreeTxResource(&ptid->m_tid); break; default: break; } free(ptid); } } else if (pWlanHeader->MacHeader.FrameControl.Type == FRAME_MAN && pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_BEACON) { ProcessBeacon ((PDOT11_MAC_BEACON)pWlanHeader); } else if (pWlanHeader->MacHeader.FrameControl.Type == FRAME_MAN ) { if ( memcmp( MACAddress.Address, pWlanHeader->MacHeader.Address1.Address, MAC_ADDRESS_LENGTH) == 0 ) { if ( pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_AUTH ) // auth { DataFrameAck11 ( pWlanHeader, frameBufSize ); if ( assoState == ASSO_NONE ) { assoState = ASSO_AUTH; } } else if ( pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_ASSO ) // asso { DataFrameAck11 ( pWlanHeader, frameBufSize ); if ( assoState == ASSO_AUTH || assoState == ASSO_NONE ) { assoState = ASSO_DONE; } } else if ( pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_DEASSO || // deassociate pWlanHeader->MacHeader.FrameControl.Subtype == SUBT_DEAUTH ) // deauth { assoState = ASSO_NONE; } } } return true; }